ServerObject::ServerObject(Services::SharedPtr services, boost::asio::io_service& io, bool debug) : Server(services) , Io(io) , Debug(debug) , Instance(std::move(CreateServerObject(services))) , ServerTime(Instance.GetVariable(GetCurrentTimeRelativepath())) , Timer(io) { Timer.Start(boost::posix_time::seconds(1), [this](){ UpdateTime(); }); //Set many values in address space which are expected by clients std::vector<std::string> uris; uris.push_back("http://opcfoundation.org/UA/"); uris.push_back("http://freeopcua.github.io"); Node node = Node(Server, ObjectId::Server_NamespaceArray); node.SetValue(uris); node = Node(Server, ObjectId::Server_ServerStatus_BuildInfo_ManufacturerName); node.SetValue(std::string("FreeOpcUa")); node = Node(Server, ObjectId::Server_ServerCapabilities_LocaleIdArray); node.SetValue(std::vector<std::string>({ "en" })); node = Node(Server, ObjectId::Server_ServerStatus_BuildInfo_BuildNumber); node.SetValue(std::string("0.8")); node = Node(Server, ObjectId::Server_ServerStatus_BuildInfo_ProductName); node.SetValue(std::string("FreeOpcUa")); node = Node(Server, ObjectId::Server_ServerStatus_BuildInfo_ProductUri); node.SetValue(std::string("https://freeopcua.github.io")); node = Node(Server, ObjectId::Server_ServerStatus_State); node.SetValue((int32_t) 0); node = Node(Server, ObjectId::Server_ServerStatus_CurrentTime); node.SetValue(DateTime::Current());//Set time before the thread does it }
int main(int argc, FCSTR argv[]) { IService* pService = CreateServerObject(); IServiceLogic* pLogic = new FCLogicWorld; CCmdLineInfo cmdLine(argc, argv); char buffer[MAX_PATH]; size_t bufLen = sizeof(buffer); pService->ISRV_GetBinPath(buffer, bufLen); #ifdef _WIN32 SetCurrentDirectory(buffer); #else #endif // create the logger Logging::IDynLogWriter* pWriter = Logging::createLogWriter( Logging::LOGWRITER_TEXTFILE); ((Logging::IDynLogTextFileWriter*)pWriter)->setFilename("FCWorldServer.log"); Logging::getLogger()->addWriter(pWriter); Logging::getLogger()->setLogLevelFilter(5); pWriter->release(); if ( pService ) { pService->ISRV_AttachLogic(pLogic); // handle any command line options passed in if ( HandleCommandLine(cmdLine, pService) ) { // if we get here, we can boot the service/daemon pService->ISRV_Run(NULL); } // time to free up the resources pLogic->Free(); } // and release the service/daemon object ReleaseServerObject(pService); Logging::destroyLogger(); return 0; }