|
@@ -258,7 +258,8 @@ processDelayedCallback(UA_Server *server, WorkerCallback *dc) {
|
|
|
/**
|
|
|
* Main Server Loop
|
|
|
* ----------------
|
|
|
- * Start: Spin up the workers and the network layer
|
|
|
+ * Start: Spin up the workers and the network layer and sample the server's
|
|
|
+ * start time.
|
|
|
* Iterate: Process repeated callbacks and events in the network layer.
|
|
|
* This part can be driven from an external main-loop in an
|
|
|
* event-driven single-threaded architecture.
|
|
@@ -267,8 +268,18 @@ processDelayedCallback(UA_Server *server, WorkerCallback *dc) {
|
|
|
|
|
|
UA_StatusCode
|
|
|
UA_Server_run_startup(UA_Server *server) {
|
|
|
- /* Start the networklayers */
|
|
|
+ UA_Variant var;
|
|
|
UA_StatusCode result = UA_STATUSCODE_GOOD;
|
|
|
+
|
|
|
+ /* Sample the start time and set it to the Server object */
|
|
|
+ server->startTime = UA_DateTime_now();
|
|
|
+ UA_Variant_init(&var);
|
|
|
+ UA_Variant_setScalar(&var, &server->startTime, &UA_TYPES[UA_TYPES_DATETIME]);
|
|
|
+ UA_Server_writeValue(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME),
|
|
|
+ var);
|
|
|
+
|
|
|
+ /* Start the networklayers */
|
|
|
for(size_t i = 0; i < server->config.networkLayersSize; ++i) {
|
|
|
UA_ServerNetworkLayer *nl = &server->config.networkLayers[i];
|
|
|
result |= nl->start(nl);
|