Procházet zdrojové kódy

add c++ example server

Julius Pfrommer před 10 roky
rodič
revize
d913c602e3
4 změnil soubory, kde provedl 58 přidání a 8 odebrání
  1. 5 5
      examples/networklayer_tcp.c
  2. 2 2
      examples/server.c
  3. 51 0
      examples/server.cpp
  4. 0 1
      include/ua_server.h

+ 5 - 5
examples/networklayer_tcp.c

@@ -121,7 +121,7 @@ static UA_StatusCode NetworkLayerTCP_add(NetworkLayerTCP *layer, UA_Int32 newsoc
     c->layer = layer;
     c->connection.state = UA_CONNECTION_OPENING;
     c->connection.localConf = layer->conf;
-    c->connection.channel = UA_NULL;
+    c->connection.channel = (void*)0;
     c->connection.close = (void (*)(void*))closeConnection;
     c->connection.write = (void (*)(void*, UA_ByteStringArray))writeCallback;
 
@@ -144,10 +144,10 @@ static UA_UInt32 batchDeleteLinks(NetworkLayerTCP *layer, UA_WorkItem **returnWo
 		return 0;
 	}
 #ifdef UA_MULTITHREADING
-    struct deleteLink *d = uatomic_xchg(&layer->deleteLinkList, UA_NULL);
+    struct deleteLink *d = uatomic_xchg(&layer->deleteLinkList, (void*)0);
 #else
     struct deleteLink *d = layer->deleteLinkList;
-    layer->deleteLinkList = UA_NULL;
+    layer->deleteLinkList = (void*)0;
 #endif
     UA_UInt32 count = 0;
     while(d) {
@@ -301,7 +301,7 @@ static UA_StatusCode NetworkLayerTCP_start(NetworkLayerTCP *layer) {
 
 static UA_Int32 NetworkLayerTCP_getWork(NetworkLayerTCP *layer, UA_WorkItem **workItems,
                                         UA_UInt16 timeout) {
-    UA_WorkItem *items = UA_NULL;
+    UA_WorkItem *items = (void*)0;
     UA_Int32 itemsCount = batchDeleteLinks(layer, &items);
     setFDSet(layer);
     struct timeval tmptv = {0, timeout};
@@ -387,7 +387,7 @@ UA_ServerNetworkLayer ServerNetworkLayerTCP_new(UA_ConnectionConfig conf, UA_UIn
 	tcplayer->conLinksSize = 0;
 	tcplayer->conLinks = NULL;
     tcplayer->port = port;
-    tcplayer->deleteLinkList = UA_NULL;
+    tcplayer->deleteLinkList = (void*)0;
 
     UA_ServerNetworkLayer nl;
     nl.nlHandle = tcplayer;

+ 2 - 2
examples/server.c

@@ -61,8 +61,8 @@ int main(int argc, char** argv) {
     UA_Server_setServerCertificate(server, loadCertificate());
     UA_Server_addNetworkLayer(server, ServerNetworkLayerTCP_new(UA_ConnectionConfig_standard, 16664));
 
-    UA_WorkItem work = {.type = UA_WORKITEMTYPE_METHODCALL, .work.methodCall = {.method = testCallback, .data = UA_NULL} };
-    UA_Server_addRepeatedWorkItem(server, &work, 20000000, UA_NULL); // call every 2 sec
+    UA_WorkItem work = {.type = UA_WORKITEMTYPE_METHODCALL, .work.methodCall = {.method = testCallback, .data = NULL} };
+    UA_Server_addRepeatedWorkItem(server, &work, 20000000, NULL); // call every 2 sec
 
 	// add a variable node to the adresspace
     UA_Int32 *myInteger = UA_Int32_new();

+ 51 - 0
examples/server.cpp

@@ -0,0 +1,51 @@
+/*
+ * This work is licensed under a Creative Commons CCZero 1.0 Universal License.
+ * See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
+ */
+#include <iostream>
+
+// provided by the open62541 lib
+#include "ua_server.h"
+
+// provided by the user, implementations available in the /examples folder
+#include "logger_stdout.h"
+#include "networklayer_tcp.h"
+
+/**
+ * Build Instructions (Linux)
+ *
+ * To build this C++ server, first compile the open62541 library. Then, compile the network layer and logging with a C compiler.
+ * - gcc -std=c99 -c networklayer_tcp.c -I../include -I../build/src_generated
+ * - gcc -std=c99 -c logger_stdout.c -I../include -I../build/src_generated
+ * Lastly, compile and link the C++ server with
+ * - g++ server.cpp networklayer_tcp.o logger_stdout.o ../build/libopen62541.a -I../include -I../build/src_generated -o server
+ */
+
+using namespace std;
+
+int main()
+{
+	UA_Server *server = UA_Server_new();
+    UA_Server_addNetworkLayer(server, ServerNetworkLayerTCP_new(UA_ConnectionConfig_standard, 16664));
+
+	//add a node to the adresspace
+    UA_Int32 *myInteger = UA_Int32_new();
+    *myInteger = 42;
+    UA_Variant *myIntegerVariant = UA_Variant_new();
+    UA_Variant_setValue(myIntegerVariant, myInteger, UA_TYPES_INT32);
+    UA_QualifiedName myIntegerName;
+    UA_QUALIFIEDNAME_ASSIGN(myIntegerName, "the answer");
+    UA_NodeId nullnode, objects, organizes;
+    UA_NODEID_ASSIGN(nullnode, 0, 0);
+    UA_NODEID_ASSIGN(objects, UA_NS0ID_OBJECTSFOLDER, 0);
+    UA_NODEID_ASSIGN(organizes, UA_NS0ID_ORGANIZES, 0);
+    
+    UA_Server_addVariableNode(server, myIntegerVariant, &nullnode, &myIntegerName,
+                              &objects, &organizes);
+
+    UA_Boolean running = UA_TRUE;
+    UA_StatusCode retval = UA_Server_run(server, 1, &running);
+	UA_Server_delete(server);
+
+	return retval;
+}

+ 0 - 1
include/ua_server.h

@@ -22,7 +22,6 @@ extern "C" {
 
 #include "ua_types.h"
 #include "ua_types_generated.h"
-#include "ua_util.h"
 #include "ua_nodeids.h"
 #include "ua_connection.h"
 #include "ua_log.h"