Exemplo n.º 1
0
 protected virtual string RegisterListener(IClientMessage registrationMessage,
                                           DecodeRegistrationResponse responseDecoder,
                                           EncodeDeregisterListenerRequest encodeDeregisterListenerRequest, DistributedEventHandler eventHandler)
 {
     return(_context.GetListenerService()
            .RegisterListener(registrationMessage, responseDecoder, encodeDeregisterListenerRequest, eventHandler));
 }
Exemplo n.º 2
0
 public bool DeregisterListener(string userRegistrationId,
                                EncodeDeregisterListenerRequest encodeDeregisterListenerRequest)
 {
     Debug.Assert(!Thread.CurrentThread.Name.Contains("eventRegistration"));
     try
     {
         return(Task <bool> .Factory.StartNew(
                    () => DeregisterListenerInternal(userRegistrationId, encodeDeregisterListenerRequest),
                    Task <bool> .Factory.CancellationToken,
                    Task <bool> .Factory.CreationOptions, _registrationScheduler).Result);
     }
     catch (Exception e)
     {
         throw ExceptionUtil.Rethrow(e);
     }
 }
Exemplo n.º 3
0
        private bool DeregisterListenerInternal(string userRegistrationId,
                                                EncodeDeregisterListenerRequest encodeDeregisterListenerRequest)
        {
            Debug.Assert(!Thread.CurrentThread.Name.Contains("eventRegistration"));

            var key = new ListenerRegistrationKey(userRegistrationId);
            ConcurrentDictionary <ClientConnection, EventRegistration> registrationMap;

            if (!_registrations.TryGetValue(key, out registrationMap))
            {
                return(false);
            }
            var successful = true;

            foreach (var registration in registrationMap.Values)
            {
                var connection = registration.ClientConnection;
                try
                {
                    var serverRegistrationId = registration.ServerRegistrationId;
                    var request = encodeDeregisterListenerRequest(serverRegistrationId);

                    var future = ((ClientInvocationService)_client.GetInvocationService())
                                 .InvokeOnConnection(request, connection);
                    ThreadUtil.GetResult(future);
                    DistributedEventHandler removed;
                    _eventHandlers.TryRemove(registration.CorrelationId, out removed);
                    EventRegistration reg;
                    registrationMap.TryRemove(connection, out reg);
                }
                catch (Exception e)
                {
                    if (connection.Live)
                    {
                        successful = false;
                        Logger.Warning(
                            string.Format("Deregistration of listener with ID  {0} has failed to address {1}",
                                          userRegistrationId, connection.GetLocalSocketAddress()), e);
                    }
                }
            }
            if (successful)
            {
                _registrations.TryRemove(key, out registrationMap);
            }
            return(successful);
        }
Exemplo n.º 4
0
        public string RegisterListener(IClientMessage registrationMessage, DecodeRegistrationResponse responseDecoder,
                                       EncodeDeregisterListenerRequest encodeDeregisterListenerRequest, DistributedEventHandler eventHandler)
        {
            Debug.Assert(!Thread.CurrentThread.Name.Contains("eventRegistration"));

            TrySyncConnectToAllConnections();
            var registrationTask = new Task <string>(() =>
            {
                var userRegistrationId = Guid.NewGuid().ToString();

                var registrationKey =
                    new ListenerRegistrationKey(userRegistrationId, registrationMessage, responseDecoder, eventHandler);

                _registrations.TryAdd(registrationKey, new ConcurrentDictionary <ClientConnection, EventRegistration>());
                var connections = _connectionManager.ActiveConnections;
                foreach (var connection in connections)
                {
                    try
                    {
                        RegisterListenerOnConnection(registrationKey, connection);
                    }
                    catch (Exception e)
                    {
                        if (connection.Live)
                        {
                            DeregisterListenerInternal(userRegistrationId, encodeDeregisterListenerRequest);
                            throw new HazelcastException("Listener cannot be added ", e);
                        }
                    }
                }
                return(userRegistrationId);
            });

            try
            {
                registrationTask.Start(_registrationScheduler);
                return(registrationTask.Result);
            }
            catch (Exception e)
            {
                throw ExceptionUtil.Rethrow(e);
            }
        }
Exemplo n.º 5
0
 protected virtual bool DeregisterListener(string userRegistrationId,
                                           EncodeDeregisterListenerRequest encodeDeregisterListenerRequest)
 {
     return(_context.GetListenerService()
            .DeregisterListener(userRegistrationId, encodeDeregisterListenerRequest));
 }