public override FutureResponse AsyncRequest(Command command) { int commandId = GetNextCommandId(); command.CommandId = commandId; command.ResponseRequired = true; FutureResponse future = new FutureResponse(); Exception priorError = null; lock (requestMap.SyncRoot) { priorError = this.error; if (priorError == null) { requestMap[commandId] = future; } } if (priorError != null) { BrokerError brError = new BrokerError(); brError.Message = priorError.Message; ExceptionResponse response = new ExceptionResponse(); response.Exception = brError; future.Response = response; throw priorError; } next.Oneway(command); return(future); }
protected override void OnCommand(ITransport sender, Command command) { if (command is Response) { Response response = (Response)command; int correlationId = response.CorrelationId; FutureResponse future = (FutureResponse)requestMap[correlationId]; if (future != null) { requestMap.Remove(correlationId); future.Response = response; if (response is ExceptionResponse) { ExceptionResponse er = response as ExceptionResponse; BrokerError brokerError = er.Exception; BrokerException exception = new BrokerException(brokerError); this.exceptionHandler(this, exception); } } else { if (Tracer.IsDebugEnabled) { Tracer.Debug("Unknown response ID: " + response.CommandId + " for response: " + response); } } } else { this.commandHandler(sender, command); } }
public override FutureResponse AsyncRequest(Command command) { int commandId = GetNextCommandId(); command.CommandId = commandId; command.ResponseRequired = true; FutureResponse future = new FutureResponse(); requestMap[commandId] = future; next.Oneway(command); return(future); }
protected override void OnException(ITransport sender, Exception command) { base.OnException(sender, command); foreach (DictionaryEntry entry in requestMap) { FutureResponse value = (FutureResponse)entry.Value; ExceptionResponse response = new ExceptionResponse(); BrokerError error = new BrokerError(); error.Message = command.Message; response.Exception = error; value.Response = response; } requestMap.Clear(); }
public override Response Request(Command command, TimeSpan timeout) { FutureResponse future = AsyncRequest(command); future.ResponseTimeout = timeout; Response response = future.Response; if (response != null && response is ExceptionResponse) { ExceptionResponse er = (ExceptionResponse)response; BrokerError brokerError = er.Exception; if (brokerError == null) { throw new BrokerException(); } else { throw new BrokerException(brokerError); } } return(response); }