private void HandleRemotingRequest(ReceiveContext receiveContext) { var remotingRequest = RemotingUtil.ParseRequest(receiveContext.ReceivedMessage); IRequestHandler requestHandler; if (!_requestHandlerDict.TryGetValue(remotingRequest.Code, out requestHandler)) { var errorMessage = string.Format("No request handler found for remoting request, request code:{0}", remotingRequest.Code); _logger.Error(errorMessage); var remotingResponse = new RemotingResponse(-1, remotingRequest.Sequence, Encoding.UTF8.GetBytes(errorMessage)); receiveContext.ReplyMessage = RemotingUtil.BuildResponseMessage(remotingResponse); receiveContext.MessageHandledCallback(receiveContext); return; } try { var remotingResponse = requestHandler.HandleRequest(new SocketRequestHandlerContext(receiveContext), remotingRequest); if (!remotingRequest.IsOneway && remotingResponse != null) { receiveContext.ReplyMessage = RemotingUtil.BuildResponseMessage(remotingResponse); receiveContext.MessageHandledCallback(receiveContext); } } catch (Exception ex) { var errorMessage = string.Format("Exception raised when handling remoting request, request code:{0}.", remotingRequest.Code); _logger.Error(errorMessage, ex); if (!remotingRequest.IsOneway) { var remotingResponse = new RemotingResponse(-1, remotingRequest.Sequence, Encoding.UTF8.GetBytes(ex.Message)); receiveContext.ReplyMessage = RemotingUtil.BuildResponseMessage(remotingResponse); receiveContext.MessageHandledCallback(receiveContext); } } }
public SocketRequestHandlerContext(ReceiveContext receiveContext) { Channel = new SocketChannel(receiveContext.ReplySocketInfo); SendRemotingResponse = remotingResponse => { receiveContext.ReplyMessage = RemotingUtil.BuildResponseMessage(remotingResponse); receiveContext.MessageHandledCallback(receiveContext); }; }