/// <summary> /// Reads first Hello message from client /// </summary> private async Task <bool> ProcessFirstMessage(TmqMessage 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); TmqServerSocket socket = await _handler.Connected(_server, info, connectionData); if (socket == null) { info.Close(); return(false); } info.State = ConnectionStates.Pipe; handshakeResult.Socket = socket; _server.Pinger.Add(socket); socket.SetCleanupAction(s => { _server.Pinger.Remove(socket); _handler.Disconnected(_server, s); }); return(true); }
private async Task ProcessMessage(IConnectionInfo info, TmqMessage message, TmqServerSocket socket) { //if user makes a mistake in received method, we should not interrupt connection handling try { socket.KeepAlive(); await _handler.Received(_server, info, socket, message); } catch (Exception e) { if (_server.Logger != null) { _server.Logger.LogException("Unhandled Exception", e); } } }