public void OnMessage(IReader reader) { try { if (closed) { logger.Debug($"Got message when closed. Ignoring..."); return; } MessageType messageType = (MessageType)reader.ReadByte(); ReadFormatterInfo readFormatterInfo = new ReadFormatterInfo(reader, rpcSerializer); switch (messageType) { case MessageType.RpcRequest: RemotingRequest remotingRequest = new RemotingRequest(); remotingRequest.MergeFrom(readFormatterInfo); LogMessageReceived(remotingRequest); EnqueueRequest(remotingRequest); break; case MessageType.RpcResponse: RemotingResponse remotingResponse = new RemotingResponse(); remotingResponse.MergeFrom(readFormatterInfo); LogMessageReceived(remotingResponse); ExecuteResponse(remotingResponse); break; case MessageType.RpcResponseError: RemotingResponseError remotingResponseError = new RemotingResponseError(); remotingResponseError.MergeFrom(readFormatterInfo); LogMessageReceived(remotingResponseError); ExecuteResponseError(remotingResponseError); break; default: OnExtraMessage(messageType, readFormatterInfo); break; } } catch (Exception outerException) { logger.Error($"Unhandled exception on {this.GetType().Name}.{nameof(OnMessage)}(): {outerException}"); Connection.Close(); } }
internal virtual void OnExtraMessage(MessageType messageType, ReadFormatterInfo readFormatterInfo) { throw new ArgumentException($"Wrong message type: {messageType}, perhaps encryption or compression mismatch"); }