public string StartListening(IClientMessage request, DistributedEventHandler handler, DecodeStartListenerResponse responseDecoder, object key = null) { try { IFuture <IClientMessage> task; if (key == null) { task = _client.GetInvocationService() .InvokeListenerOnRandomTarget(request, handler, responseDecoder); } else { task = _client.GetInvocationService() .InvokeListenerOnKeyOwner(request, key, handler, responseDecoder); } var clientMessage = ThreadUtil.GetResult(task); var registrationId = responseDecoder(clientMessage); RegisterListener(registrationId, request.GetCorrelationId()); return(registrationId); } catch (Exception e) { throw ExceptionUtil.Rethrow(e); } }
public string StartListening(IClientMessage request, DistributedEventHandler handler, DecodeStartListenerResponse responseDecoder, object key = null) { try { IFuture<IClientMessage> task; if (key == null) { task = _client.GetInvocationService() .InvokeListenerOnRandomTarget(request, handler, responseDecoder); } else { task = _client.GetInvocationService() .InvokeListenerOnKeyOwner(request, key, handler, responseDecoder); } var clientMessage = ThreadUtil.GetResult(task); var registrationId = responseDecoder(clientMessage); RegisterListener(registrationId, request.GetCorrelationId()); return registrationId; } catch (Exception e) { throw ExceptionUtil.Rethrow(e); } }
private void HandleEventMessage(IClientMessage eventMessage) { var correlationId = eventMessage.GetCorrelationId(); ClientListenerInvocation invocationWithHandler; if (!_listenerInvocations.TryGetValue(correlationId, out invocationWithHandler)) { // no event handler found, could be that the event is already unregistered Logger.Warning("No eventHandler for correlationId: " + correlationId + ", event: " + eventMessage); return; } invocationWithHandler.Handler(eventMessage); }
public void HandleResponseMessage(IClientMessage message) { var partitionId = message.GetPartitionId(); Task.Factory.StartNew(o => { var correlationId = message.GetCorrelationId(); DistributedEventHandler eventHandler; if (!_eventHandlers.TryGetValue(correlationId, out eventHandler)) { Logger.Warning(string.Format("No eventHandler for correlationId: {0} , event: {1} .", correlationId, message)); return; } eventHandler(message); }, partitionId, Task.Factory.CancellationToken, Task.Factory.CreationOptions, _eventExecutor); }
private void HandleResponseMessage(IClientMessage response) { var correlationId = response.GetCorrelationId(); ClientInvocation invocation; if (_invocations.TryRemove(correlationId, out invocation)) { if (response.GetMessageType() == Error.Type) { var error = Error.Decode(response); if (Logger.IsFinestEnabled()) { Logger.Finest("Error received from server: " + error); } var exception = ExceptionUtil.ToException(error); // retry only specific exceptions HandleInvocationException(invocation, exception); } // if this was a re-registration operation, then we will throw away the response and just store the alias else if ((invocation is ClientListenerInvocation) && (invocation.Future.IsComplete && invocation.Future.Result != null)) { var listenerInvocation = (ClientListenerInvocation)invocation; var originalRegistrationId = GetRegistrationIdFromResponse(listenerInvocation); var newRegistrationId = listenerInvocation.ResponseDecoder(response); _client.GetListenerService() .ReregisterListener(originalRegistrationId, newRegistrationId, invocation.Message.GetCorrelationId()); if (Logger.IsFinestEnabled()) { Logger.Finest(string.Format("Re-registered listener for {0} of type {1:X}", originalRegistrationId, listenerInvocation.Message.GetMessageType())); } } else { invocation.Future.Result = response; } } else { Logger.Warning("No call for correlationId: " + correlationId + ", response: " + response); } }
private void HandleResponseMessage(IClientMessage response) { var correlationId = response.GetCorrelationId(); ClientInvocation invocation; if (_invocations.TryRemove(correlationId, out invocation)) { if (response.GetMessageType() == Error.Type) { var error = Error.Decode(response); if (Logger.IsFinestEnabled()) { Logger.Finest("Error received from server: " + error); } var exception = ExceptionUtil.ToException(error); // retry only specific exceptions HandleInvocationException(invocation, exception); } else { try { invocation.Future.Result = response; } catch (InvalidOperationException e) { if (Logger.IsFinestEnabled()) { Logger.Finest("Invocation already completed:", e); } } } } else { Logger.Warning("No call for correlationId: " + correlationId + ", response: " + response); } }
private void HandleResponseMessage(IClientMessage response) { var correlationId = response.GetCorrelationId(); ClientInvocation invocation; if (_invocations.TryRemove(correlationId, out invocation)) { if (response.GetMessageType() == Error.Type) { var error = Error.Decode(response); var exception = ExceptionUtil.ToException(error); // retry only specific exceptions HandleException(invocation, exception); } // if this was a re-registration operation, then we will throw away the response and just store the alias else if (invocation is ClientListenerInvocation && invocation.Future.IsComplete && invocation.Future.Result != null) { var listenerInvocation = (ClientListenerInvocation) invocation; var originalRegistrationId = GetRegistrationIdFromResponse(listenerInvocation); var newRegistrationId = listenerInvocation.ResponseDecoder(response); _client.GetListenerService() .ReregisterListener(originalRegistrationId, newRegistrationId, invocation.Message.GetCorrelationId()); if (Logger.IsFinestEnabled()) { Logger.Finest(string.Format("Re-registered listener for {0} of type {1:X}", originalRegistrationId, listenerInvocation.Message.GetMessageType())); } } else { invocation.Future.Result = response; } } else { Logger.Warning("No call for correlationId: " + correlationId + ", response: " + response); } }