Beispiel #1
0
        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());
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }