Ejemplo n.º 1
0
    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

    }
Ejemplo n.º 2
0
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;
}