예제 #1
0
        public void RunAsyncWorker(TypedRequest request, Action <TypedResponse> successCallback,
                                   Action <ErrorResponse> errorCallback, long sequenceNumber, Action <BufferedResponse> processResponse)
        {
            var sw = Stopwatch.StartNew();

            var ipcRequest = new IpcRequest {
                RequestId = _ipcRequestIdFactory.GetNextId(),
                Protocol  = IpcProtocols.TypedMessage,
                Data      = request
            };

            _serverProcessProxy.RunAsync(ipcRequest, ipcResponse => {
                var response = new BufferedResponse {
                    SequenceNumber  = sequenceNumber,
                    IpcRequest      = ipcRequest,
                    IpcResponse     = ipcResponse,
                    SuccessCallback = successCallback,
                    ErrorCallback   = errorCallback,
                    Elapsed         = sw.Elapsed
                };
                processResponse(response);
            });
        }
예제 #2
0
        private static void SendResponse(BufferedResponse bufferedResponse)
        {
            Logger.LogInfo("Server request #{0} ({1}) took {2:n0} msec to execute.",
                           bufferedResponse.IpcRequest.RequestId,
                           GetRequestDescription(bufferedResponse.IpcRequest),
                           bufferedResponse.Elapsed.TotalMilliseconds);

            if (bufferedResponse.IpcResponse.Protocol == IpcProtocols.TypedMessage)
            {
                bufferedResponse.SuccessCallback((TypedResponse)bufferedResponse.IpcResponse.Data);
            }
            else if (bufferedResponse.IpcResponse.Protocol == IpcProtocols.Exception)
            {
                bufferedResponse.ErrorCallback((ErrorResponse)bufferedResponse.IpcResponse.Data);
            }
            else
            {
                var error = new InvalidOperationException(string.Format("Unknown response protocol: {0}",
                                                                        bufferedResponse.IpcResponse.Protocol));
                var errorResponse = ErrorResponseHelper.CreateErrorResponse(error);
                bufferedResponse.ErrorCallback(errorResponse);
            }
        }