Example #1
0
        private void Activate()
        {
            try
            {
                InitializeMessageBus();
                StartProcess();
            }
            catch (Exception e)
            {
                _log.ErrorFormat("Can't start application for host: {0}. Error: {1}", _host, e);

                lock (_lock)
                {
                    if (_messageBus != null)
                    {
                        _messageBus.Dispose();
                        _messageBus = null;
                    }

                    _messageBus = null;
                    _process    = null;
                    _state      = ApplicationState.Inactive;
                }
            }
        }
Example #2
0
 private void InitializeMessageBus()
 {
     _messageBus = new NamedPipeMessageBus(_hostPipeName, _appPipeName);
     _messageBus.Subscribe((ApplicationActivatedMessage msg) => OnApplicationActivated());
     _messageBus.Subscribe((SendDataMessage msg) => SendMessage(msg.ConnectionIdentity, msg.Data));
     _messageBus.Subscribe((CloseConnectionMessage msg) => CloseConnection(msg.ConnectionIdentity));
 }
Example #3
0
        public void Start()
        {
            _finishedWaitHandle.Reset();
            Init();

            _messageBus = new NamedPipeMessageBus(_appPipeName, _hostPipeName);

            _messageBus.Subscribe((ConnectionOpenedMessage msg) =>
            {
                RegisterConnection(new ProxyWebSocketConnection(msg, this));
            });

            _messageBus.Subscribe((ConnectionClosedMessage msg) =>
            {
                UnregisterConnection(msg.ConnectionIdentity);
            });

            _messageBus.Subscribe((DataReceivedMessage msg) =>
            {
                var c = GetConnection(msg.ConnectionIdentity);
                if (c == null)
                {
                    _log.Error("Received message for not existing connection");
                    return;
                }

                OnMessageReceived(new WebSocketMessageEventArgs(c, msg.Data));
            });

            _messageBus.Subscribe((PingReceivedMessage msg) =>
            {
                var c = GetConnection(msg.ConnectionIdentity);
                if (c == null)
                {
                    _log.Error("Received message for not existing connection");
                    return;
                }

                OnPingReceived(new WebSocketConnectionEventArgs(c));
            });

            _messageBus.Subscribe((CloseApplicationMessage msg) =>
            {
                Stop();
            });

            _messageBus.Notify(new ApplicationActivatedMessage());
        }
Example #4
0
        private void Shutdown()
        {
            // close process
            if (_process != null)
            {
                _handleProcessExit = false;

                _messageBus.Notify(new CloseApplicationMessage());
                if (!_process.WaitForExit(_terminateTimeout))
                {
                    _process.Kill();
                }

                _process = null;

                _handleProcessExit = true;
            }

            // close message bus
            if (_messageBus != null)
            {
                _messageBus.Dispose();
                _messageBus = null;
            }

            // close web socket connections
            if (_connections.Count > 0)
            {
                _handleConnectionClose = false;

                foreach (var connection in _connections)
                {
                    connection.Close();
                }

                _handleConnectionClose = true;
            }
        }