示例#1
0
        /// <summary>
        /// Reads first Hello message from client
        /// </summary>
        private async Task <bool> ProcessFirstMessage(HorseMessage message, IConnectionInfo info, ProtocolHandshakeResult handshakeResult)
        {
            if (message.Type != MessageType.Server || message.ContentType != KnownContentTypes.Hello)
            {
                return(false);
            }

            ConnectionData connectionData = new ConnectionData();

            message.Content.Position = 0;
            await connectionData.ReadFromStream(message.Content);

            HorseServerSocket socket = await _handler.Connected(_server, info, connectionData);

            if (socket == null)
            {
                info.Close();
                return(false);
            }

            info.State             = ConnectionStates.Pipe;
            handshakeResult.Socket = socket;
            _server.HeartbeatManager.Add(socket);

            socket.SetCleanupAction(s =>
            {
                _server.HeartbeatManager.Remove(socket);
                _handler.Disconnected(_server, s);
            });

            return(true);
        }
示例#2
0
        private Task ProcessMessage(IConnectionInfo info, HorseMessage message, HorseServerSocket socket)
        {
            //if user makes a mistake in received method, we should not interrupt connection handling
            try
            {
                if (socket.SmartHealthCheck)
                {
                    socket.KeepAlive();
                }
                else if (message.Type == MessageType.Pong)
                {
                    socket.KeepAlive();
                }

                return(_handler.Received(_server, info, socket, message));
            }
            catch (Exception e)
            {
                if (_server.Logger != null)
                {
                    _server.Logger.LogException("Unhandled Exception", e);
                }

                return(Task.CompletedTask);
            }
        }