コード例 #1
0
 protected virtual string RegisterListener(IClientMessage registrationMessage,
                                           DecodeRegistrationResponse responseDecoder,
                                           EncodeDeregisterListenerRequest encodeDeregisterListenerRequest, DistributedEventHandler eventHandler)
 {
     return(_context.GetListenerService()
            .RegisterListener(registrationMessage, responseDecoder, encodeDeregisterListenerRequest, eventHandler));
 }
コード例 #2
0
 public ListenerRegistrationKey(string userRegistrationId, IClientMessage registrationRequest = null,
                                DecodeRegistrationResponse responseDecoder = null, DistributedEventHandler eventHandler = null)
 {
     UserRegistrationId  = userRegistrationId;
     RegistrationRequest = registrationRequest;
     ResponseDecoder     = responseDecoder;
     EventHandler        = eventHandler;
 }
コード例 #3
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);
            }
        }