public Form1() { InitializeComponent(); cli = new CommandConsole(); monitor = new FileMonitor(file); server = new CLIServer(cli, monitor); iServer = new IterativerServer(monitor); server.listen(); Console.WriteLine(monitor.dump()); }
public void Read1() { LauncherFactory launcherFactory = new LauncherFactory(); AppInitializedDetectorFactory appInitializedDetectorFactory = new AppInitializedDetectorFactory(); var localOps = new LocalOperations("m1", launcherFactory, appInitializedDetectorFactory, null); localOps.SetPlanRepo(TestPlanRepo.plans.Values); var server = new CLIServer("127.0.0.1", 6001, localOps); server.Start(); var client = new TcpClient("localhost", 6001); SendReq(client, "001", "StartPlan p1"); server.Tick(); var resp001 = ReadResp(client, 1000); SendReq(client, "002", "GetAppState m1.a"); server.Tick(); var resp002 = ReadResp(client, 1000); SendReq(client, "003", "GetPlanState p1"); server.Tick(); var resp003 = ReadResp(client, 1000); SendReq(client, "004", "GetAllPlansState"); server.Tick(); var resp004 = ReadResp(client, 1000); SendReq(client, "005", "GetAllAppsState"); server.Tick(); var resp005 = ReadResp(client, 1000); client.Close(); //Assert.IsNotNull(cfg.Plans[0].getAppDefs()); //Assert.AreEqual( "m1.a", cfg.Plans[0].getAppDefs().First().AppIdTuple.ToString() ); server.Stop(); }
static bool Initialize() { try { var ac = getAppConfig(); if (AppInstanceAlreadyRunning(ac.masterPort)) { throw new Exception("Another instance of Dirigent Master is already running!"); } log.InfoFormat("Master running on port {0}", ac.masterPort); IEnumerable <ILaunchPlan> planRepo = (ac.scfg != null) ? ac.scfg.Plans : null; // start a local network-only agent // use unique client id to avoid conflict with any other possible client string machineId = Guid.NewGuid().ToString(); var dirigClient = new Dirigent.Net.Client(machineId, "127.0.0.1", ac.masterPort); string rootForRelativePaths = System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(ac.sharedCfgFileName)); agent = new Dirigent.Agent.Core.Agent(machineId, dirigClient, false, rootForRelativePaths); // start master server var s = new Server(ac.masterPort, agent.Control, planRepo, ac.startupPlanName); // server works through its ServerRemoteObject dirigClient.Connect(); // connect should succeed immediately (server runs locally) // start a telnet client server log.InfoFormat("Command Line Interface running on port {0}", ac.CLIPort); cliServer = new CLIServer("0.0.0.0", ac.CLIPort, agent.Control); cliServer.Start(); return(true); } catch (Exception ex) { log.Error(ex); //ExceptionDialog.showException(ex, "Dirigent Exception", ""); return(false); } }
public void CLIServerTest() { Mock <Command> cmd = new Mock <Command>(); Mock <Monitor> mon = new Mock <Monitor>(); cmd.Setup(c => c.addQueue(It.IsAny <String>())) .Callback((string s) => { Console.WriteLine("addQueue: " + s); }); cmd.Setup(c => c.getHelp()) .Returns("help1\nhelp2"); (new Thread(() => { CLIServer server = new CLIServer(cmd.Object, mon.Object); server.listen(false); })).Start(); Thread.Sleep(1000); TcpClient client = new TcpClient("localhost", 8080); StreamWriter write = new StreamWriter(client.GetStream()); StreamReader reader = new StreamReader(client.GetStream()); Assert.AreEqual("Successfully Connected", reader.ReadLine()); write.WriteLine("help"); write.Flush(); string line; string lines = ""; while ((line = reader.ReadLine()) != "EOS") { lines += line; } client.Close(); // Assert.AreEqual("help1\nhelp2", lines); }
public void RunServer(Options aOptions) { if (aOptions.Version) { Console.WriteLine("1"); return; } _useProtobufOutput = aOptions.FrontendPipe; if (_useProtobufOutput) { _stdioTask = new Task(ReadStdio); _stdioTask.Start(); } if (aOptions.GenerateCertificate) { // CertUtils.GenerateSelfSignedCert(aOptions.CertFile, aOptions.PrivFile); Console.WriteLine("Cannot currently generate certificates."); return; } if (aOptions.DeviceConfigFile != null) { DeviceConfigurationManager.LoadBaseConfigurationFile(aOptions.DeviceConfigFile); } else { DeviceConfigurationManager.LoadBaseConfigurationFromResource(); } if (aOptions.UserDeviceConfigFile != null) { DeviceConfigurationManager.Manager.LoadUserConfigurationFile(aOptions.UserDeviceConfigFile); } if (aOptions.WebsocketServerInsecurePort == 0 && aOptions.WebsocketServerSecurePort == 0 && !aOptions.UseIpcServer) { PrintProcessLog("ERROR: Must specify either IPC server or Websocket server!"); return; } var logLevel = ButtplugLogLevel.Off; if (aOptions.Log != null) { if (!Enum.TryParse(aOptions.Log, out logLevel)) { PrintProcessLog("ERROR: Invalid log level!"); return; } } ButtplugServer ServerFactory() { var server = new CLIServer(aOptions.ServerName, (uint)aOptions.PingTime, _deviceManager); // Pull out the device manager for reuse later. if (_deviceManager == null) { _deviceManager = server.DeviceManager; } if (logLevel != ButtplugLogLevel.Off) { server.LogManager.AddLogListener(logLevel, (aLogMsg) => { PrintProcessLog(aLogMsg.LogMessage); }); } server.ClientConnected += (aObj, aEvent) => { if (_useProtobufOutput) { SendProcessMessage(new ServerProcessMessage { ClientConnected = new ServerProcessMessage.Types.ClientConnected { ClientName = server.ClientName } }); } else { Console.WriteLine($"Client connected: {server.ClientName}"); } }; return(server); } ButtplugIPCServer ipcServer = null; ButtplugWebsocketServer insecureWebsocketServer = null; ButtplugWebsocketServer secureWebsocketServer = null; if (aOptions.WebsocketServerInsecurePort != 0) { insecureWebsocketServer = new ButtplugWebsocketServer(); insecureWebsocketServer.StartServerAsync(ServerFactory, 1, aOptions.WebsocketServerInsecurePort, !aOptions.WebsocketServerAllInterfaces).Wait(); insecureWebsocketServer.ConnectionClosed += (aSender, aArgs) => { _disconnectWait.SetResult(true); }; PrintProcessLog("Insecure websocket Server now running..."); } if (aOptions.WebsocketServerSecurePort != 0 && aOptions.CertFile != null && aOptions.PrivFile != null) { secureWebsocketServer = new ButtplugWebsocketServer(); secureWebsocketServer.StartServerAsync(ServerFactory, 1, aOptions.WebsocketServerSecurePort, !aOptions.WebsocketServerAllInterfaces, aOptions.CertFile, aOptions.PrivFile).Wait(); secureWebsocketServer.ConnectionClosed += (aSender, aArgs) => { _disconnectWait.SetResult(true); }; PrintProcessLog("Secure websocket Server now running..."); } if (aOptions.UseIpcServer) { ipcServer = new ButtplugIPCServer(); ipcServer.StartServer(ServerFactory, aOptions.IpcPipe); ipcServer.ConnectionClosed += (aSender, aArgs) => { _disconnectWait.SetResult(true); }; PrintProcessLog("IPC Server now running..."); } // Now that all server possibilities are up and running, if we have a pipe, let the // parent program know we've started. if (_useProtobufOutput) { var msg = new ServerProcessMessage { ProcessStarted = new ServerProcessMessage.Types.ProcessStarted() }; SendProcessMessage(msg); } else { Console.WriteLine("Server started, waiting for client connection."); } do { _disconnectWait.Task.Wait(); if (ipcServer != null && ipcServer.Connected) { ipcServer?.Disconnect(); } if (insecureWebsocketServer != null && insecureWebsocketServer.Connected) { insecureWebsocketServer?.DisconnectAsync().Wait(); } if (secureWebsocketServer != null && secureWebsocketServer.Connected) { secureWebsocketServer?.DisconnectAsync().Wait(); } if (_useProtobufOutput) { var msg = new ServerProcessMessage { ClientDisconnected = new ServerProcessMessage.Types.ClientDisconnected() }; SendProcessMessage(msg); } else { Console.WriteLine("Client disconnected."); } _disconnectWait = new TaskCompletionSource <bool>(); } while (aOptions.StayOpen && !_shouldExit); if (!_useProtobufOutput) { return; } PrintProcessLog("Exiting"); if (_useProtobufOutput) { var exitMsg = new ServerProcessMessage { ProcessEnded = new ServerProcessMessage.Types.ProcessEnded() }; SendProcessMessage(exitMsg); } _stdinTokenSource.Cancel(); }
public static int Main(string[] args) { if (!Directory.Exists(DATADIR)) { Directory.CreateDirectory(DATADIR); } if (File.Exists(CONFFILE)) { try { MadConf.LoadConf(CONFFILE); Console.WriteLine("(CONFIG) Config loaded."); MainWindow.configStatus = "Config loaded."; } catch (Exception e) { Console.WriteLine("(CONFIG) Config could not be loaded: " + e.Message); MadConf.SetToDefault(); Console.WriteLine("(CONFIG) Config could not be loaded. Using default config."); MainWindow.configStatus = "Loaded default config."; } } else { Console.WriteLine("(CONFIG) No config file found!"); MadConf.SetToDefault(); Console.WriteLine("(CONFIG) Loaded default config."); MadConf.SaveConf(CONFFILE); Console.WriteLine("(CONFIG) Saved default config to '" + CONFFILE + "'."); Console.WriteLine("(CONFIG) Default config may not use all possible features!"); } Logger.Init(); DB db = new DB(DBFILE); JobSystem js = new JobSystem(db); js.OnNodeCountChange += new EventHandler(ModelHost.SyncHostList); ModelHost.Init(ref js); DHCPReader dhcpReader = new DHCPReader(js); if (args.Length == 0) { GUI_USED = true; Logger.Log("Programm Start. GUI Start.", Logger.MessageType.INFORM); GUILogic.RunGUI(js, db, dhcpReader); } else if (args.Length == 1) { switch (args[0]) { case "-cli": Logger.Log("Programm Start. CLI Start.", Logger.MessageType.INFORM); CLI cli = new CLI(js, dhcpReader, db); cli.Start(); break; case "-cliserver": Logger.Log("Programm Start. CLI Server Start.", Logger.MessageType.INFORM); try { CLIServer cliServer = new CLIServer(js, dhcpReader, db); cliServer.Start(); Console.WriteLine("(SERVER) Listening on port " + cliServer.serverPort + " ..."); Logger.Log("CLIServer started on port " + cliServer.serverPort + " ..", Logger.MessageType.INFORM); Console.ReadKey(false); cliServer.Stop(); cliServer.Dispose(); Console.WriteLine("(SERVER) Stopped."); Logger.Log("Server stopped.", Logger.MessageType.INFORM); } catch (Exception e) { Console.WriteLine("(SERVER) Could not start: " + e.Message); Logger.Log("CLIServer could not start: " + e.Message, Logger.MessageType.ERROR); } PressAnyKeyToClose(); break; default: Console.WriteLine("ERROR! Argument '" + args[0] + "' not known!"); Logger.Log("Programm Aborted. False Call Argument!", Logger.MessageType.EMERGENCY); break; } } else { Console.WriteLine("ERROR! Too many arguments!"); Logger.Log("Programm Aborted. Too many arguments!", Logger.MessageType.EMERGENCY); PressAnyKeyToClose(); } js.Shutdown(); db.Dispose(); Logger.Log("Programm Exited Successfully. See Ya!", Logger.MessageType.INFORM); Logger.ForceWriteToLog(); Logger.Dispose(); if (restart) { Application.Restart(); } return(0); }