/// <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); }
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); } }