Beispiel #1
0
 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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
            }
        }
 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);
 }