int Configurator::Run(bool installing) { rime::Deployer& deployer(rime::Service::instance().deployer()); bool reconfigured = false; rime::SwitcherSettings switcher_settings(&deployer); UIStyleSettings ui_style_settings(&deployer); bool skip_switcher_settings = installing && !switcher_settings.IsFirstRun(); bool skip_ui_style_settings = installing && !ui_style_settings.IsFirstRun(); (skip_switcher_settings || ConfigureSwitcher(&switcher_settings, &reconfigured)) && (skip_ui_style_settings || ConfigureUI(&ui_style_settings, &reconfigured)); if (installing || reconfigured) { return UpdateWorkspace(reconfigured); } return 0; }
int Configurator::SyncUserData() { HANDLE hMutex = CreateMutex(NULL, TRUE, L"WeaselDeployerMutex"); if (!hMutex) { LOG(ERROR) << "Error creating WeaselDeployerMutex."; return 1; } if (GetLastError() == ERROR_ALREADY_EXISTS) { LOG(WARNING) << "another deployer process is running; aborting operation."; CloseHandle(hMutex); MessageBox(NULL, L"正在執行另一項部署任務,請稍候再試。", L"【小狼毫】", MB_OK | MB_ICONINFORMATION); return 1; } weasel::Client client; if (client.Connect()) { LOG(INFO) << "Turning WeaselServer into maintenance mode."; client.StartMaintenance(); } { rime::Deployer& deployer(rime::Service::instance().deployer()); if (!RimeSyncUserData()) { LOG(ERROR) << "Error synching user data."; return 1; } RimeJoinMaintenanceThread(); } CloseHandle(hMutex); // should be closed before resuming service. if (client.Connect()) { LOG(INFO) << "Resuming service."; client.EndMaintenance(); } return 0; }
int Configurator::DictManagement() { HANDLE hMutex = CreateMutex(NULL, TRUE, L"WeaselDeployerMutex"); if (!hMutex) { LOG(ERROR) << "Error creating WeaselDeployerMutex."; return 1; } if (GetLastError() == ERROR_ALREADY_EXISTS) { LOG(WARNING) << "another deployer process is running; aborting operation."; CloseHandle(hMutex); MessageBox(NULL, L"正在執行另一項部署任務,請稍候再試。", L"【小狼毫】", MB_OK | MB_ICONINFORMATION); return 1; } weasel::Client client; if (client.Connect()) { LOG(INFO) << "Turning WeaselServer into maintenance mode."; client.StartMaintenance(); } { rime::Deployer& deployer(rime::Service::instance().deployer()); rime::InstallationUpdate installation; installation.Run(&deployer); // setup user data sync dir DictManagementDialog dlg(&deployer); dlg.DoModal(); } CloseHandle(hMutex); // should be closed before resuming service. if (client.Connect()) { LOG(INFO) << "Resuming service."; client.EndMaintenance(); } return 0; }
int main(int argc, char** argv) { // Initialize Orocos __os_init(argc, argv); OCL::DeploymentComponent deployer("deployer"); RTT::Logger::Instance()->setLogLevel(RTT::Logger::Debug); deployer.import("rtt_ros"); deployer.import("rtt_rosnode"); deployer.getProvider<RTT::Scripting>("scripting")->eval("ros.import(\"conman\")"); deployer.getProvider<RTT::Scripting>("scripting")->eval("ros.import(\"conman_ros\")"); conman::Scheme scheme("scheme"); scheme.connectPeers(&deployer); scheme.loadService("conman_ros"); IOBlock iob1(argc, argv, "iob1"); IOBlock iob2(argc, argv, "iob2"); IOBlock iob3(argc, argv, "iob3"); IOBlock iob4(argc, argv, "iob4"); IOBlock iob5(argc, argv, "iob5"); iob1.out.connectTo(&iob2.in); iob2.out.connectTo(&iob3.in); iob3.out.connectTo(&iob4.in); iob4.out.connectTo(&iob5.in); iob5.out.connectTo(&iob1.in); scheme.addBlock(&iob1); scheme.addBlock(&iob2); scheme.addBlock(&iob3); scheme.addBlock(&iob4); scheme.addBlock(&iob5); scheme.latchConnections("iob5","iob1",true); scheme.setGroupMembers("even", "iob2"); scheme.addToGroup("iob4", "even"); scheme.addGroup("odd"); scheme.addToGroup("iob1", "odd"); scheme.addToGroup("iob3", "odd"); scheme.addToGroup("iob5", "odd"); scheme.addGroup("other"); scheme.addToGroup("iob5", "other"); scheme.addToGroup("iob4", "other"); std::vector<std::string> execution_order; scheme.getExecutionOrder(execution_order); std::vector<std::string> &ptr_blocks = execution_order; scheme.configure(); scheme.start(); scheme.enableBlocks(ptr_blocks, true, true); OCL::TaskBrowser browse(&deployer); browse.loop(); return 0; }