예제 #1
0
        public void Run()
        {
            _ipc.Start();

            AddModules();
            foreach (var m in _modules)
            {
                m.Value.SetDaemon(this);
                new Thread(m.Value.MessageLoop).Start();
            }

            while (true)
            {
                InterProcessMessage msg = _ipc.GetMessage();
                if (msg == null)
                {
                    Console.Error.WriteLine("null received. exit."); break;
                }

                // Console.WriteLine($"msg is module {msg.Module}, command {msg.Command}, args {msg.Args.ToStringForNetwork()}");

                if (InterProcessMessage.IsTerminator(msg))
                {
                    break;
                }

                if (_modules.TryGetValue(msg.Module, out var module))
                {
                    module.OnMessage(msg);
                }
            }

            foreach (var m in _modules)
            {
                m.Value.OnMessage(InterProcessMessage.Terminator);
            }

            _ipc.Close();
        }