Пример #1
0
        public Listener(Args args)
        {
            var certfile = ExecutableTools.Relative("DaemonManager.pfx");

            certificate = new X509Certificate2(certfile, "none");
            factory     = args.ShellFactory;
            clients     = new Dictionary <string, ClientRt>();
            server      = new TcpListener(args.EndPoint);
            server.MakeNotInheritable();
            using (var disposer = new Disposer())
            {
                //push must match dispose order
                register = new Runner(new Runner.Args {
                    ThreadName = "Register"
                });
                disposer.Push(register);
                accepter = new Runner(new Runner.Args {
                    ThreadName = "Accepter"
                });
                disposer.Push(accepter);

                disposer.Push(Dispose); //ensure cleanup order
                server.Start();
                endpoint = server.LocalEndpoint as IPEndPoint;
                disposer.Clear();
            }
        }
Пример #2
0
            public DaemonRT(DaemonDto dto, string root, int delay)
            {
                this.delay = delay;
                this.dto   = dto.Clone();

                using (var disposer = new Disposer())
                {
                    process = new DaemonProcess(new DaemonProcess.Args
                    {
                        Executable = PathTools.Combine(root, dto.Path),
                        //id matches [a-zA_Z][a-zA_Z0-9_]*
                        Arguments = string.Format("Id={0} Daemon=True {1}", dto.Id, dto.Args),
                    });
                    disposer.Push(process);

                    status = "Starting...";

                    reader = new Runner(new Runner.Args {
                        ThreadName = string.Format("DAEMON_{0}_{1}_O", dto.Id, process.Id)
                    });
                    erroer = new Runner(new Runner.Args {
                        ThreadName = string.Format("DAEMON_{0}_{1}_E", dto.Id, process.Id)
                    });
                    disposer.Push(erroer);

                    disposer.Push(Dispose); //ensure cleanup order
                    erroer.Run(ErrorLoop);
                    reader.Run(ReadLoop);
                    reader.Run(UpdateRestart);
                    disposer.Clear();
                }
            }
Пример #3
0
        public Instance(Args args)
        {
            using (var disposer = new Disposer())
            {
                Logger.Trace("DbPath {0}", args.DbPath);
                Logger.Trace("Downloads {0}", args.Downloads);
                Logger.Trace("RestartDelay {0}ms", args.RestartDelay);
                Logger.Trace("EndPoint {0}", args.EndPoint);
                factory = new ShellFactory();
                factory.Add(new SystemScriptable());
                factory.Add(new RunnerScriptable(args.Downloads));
                factory.Add(new DownloadScriptable(args.Downloads));
                manager = new Manager(new Manager.Args
                {
                    RestartDelay = args.RestartDelay,
                    Root         = args.Downloads,
                    Database     = args.DbPath,
                });
                disposer.Push(manager);
                factory.Add(manager);
                listener = new Listener(new Listener.Args
                {
                    ShellFactory = factory,
                    EndPoint     = args.EndPoint,
                });
                disposer.Push(listener);
                factory.Add(listener);
                endpoint = listener.EndPoint;

                disposer.Push(Dispose); //ensure cleanup order
                listener.Start();
                disposer.Clear();
            }
        }
Пример #4
0
        protected virtual void CleanupBindings()
        {
            if (_isQuitting)
            {
                return;
            }

            Disposer.Clear();
        }
Пример #5
0
        public override void Setup(IEventSystem eventSystem, IPoolManager poolManager, GroupFactory groupFactory)
        {
            base.Setup(eventSystem, poolManager, groupFactory);

            EventSystem.OnEvent <DeathEvent> ().Where(_ => _.Target.HasComponent <InputComponent> ()).Subscribe(_ =>
            {
                Observable.EveryUpdate().Subscribe(__ =>
                {
                    if (Input.GetMouseButton(0))
                    {
                        EventSystem.Publish(new LoadSceneEvent()
                        {
                            SceneName = "Level_01"
                        });
                        Disposer.Clear();
                    }
                }).AddTo(Disposer).AddTo(this);
            }).AddTo(this);
        }
Пример #6
0
 private void AcceptLoop()
 {
     while (true)
     {
         var client = server.AcceptTcpClient();
         register.Run(() =>
         {
             using (var disposer = new Disposer())
             {
                 disposer.Push(client);
                 var rt = new ClientRt(client, certificate, factory);
                 disposer.Push(rt.Dispose); //ensure cleanup order
                 clients.Add(rt.EndPoint.ToString(), rt);
                 rt.Run(() => RemoveClient(rt));
                 Logger.Trace("Client {0} connected", rt.EndPoint);
                 disposer.Clear();
             }
         });
     }
 }
Пример #7
0
            public ClientRt(TcpClient client, X509Certificate2 certificate, ShellFactory factory)
            {
                //client disposed in caller on throw
                this.client      = client;
                this.certificate = certificate;
                using (var disposer = new Disposer())
                {
                    start    = DateTime.Now;
                    last     = DateTime.Now;
                    shell    = factory.Create();
                    endpoint = client.Client.RemoteEndPoint as IPEndPoint;
                    reader   = new Runner(new Runner.Args {
                        ThreadName = string.Format("Client_{0}", endpoint)
                    });
                    disposer.Push(reader);

                    disposer.Push(Dispose); //ensure cleanup order
                    reader.Run(ReadLoop);
                    disposer.Clear();
                }
            }