public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
                                 DecodeStartListenerResponse responseDecoder, ClientConnection connection)
     : base(message, connection)
 {
     _responseDecoder = responseDecoder;
     _handler         = handler;
 }
 public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
                                 DecodeStartListenerResponse responseDecoder, Address address)
     : base(message, address)
 {
     _responseDecoder = responseDecoder;
     _handler         = handler;
 }
 public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
                                 DecodeStartListenerResponse responseDecoder, string memberUuid)
     : base(message, memberUuid)
 {
     _responseDecoder = responseDecoder;
     _handler         = handler;
 }
 public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder, string memberUuid)
     : base(message, memberUuid)
 {
     _responseDecoder = responseDecoder;
     _handler = handler;
 }
 public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder, Address address)
     : base(message, address)
 {
     _responseDecoder = responseDecoder;
     _handler = handler;
 }
 public ClientListenerInvocation(IClientMessage message, DistributedEventHandler handler,
    DecodeStartListenerResponse responseDecoder, ClientConnection connection)
     : base(message, connection)
 {
     _responseDecoder = responseDecoder;
     _handler = handler;
 }
示例#7
0
        private void AddInvalidateListener()
        {
            try
            {
                IClientMessage          request = null;
                DistributedEventHandler handler = null;
                if (cacheType == ClientNearCacheType.Map)
                {
                    request = MapAddNearCacheEntryListenerCodec.EncodeRequest(mapName, false, (int)EntryEventType.All, false);

                    handler = message =>
                    {
                        MapAddNearCacheEntryListenerCodec.AbstractEventHandler.Handle(message,
                                                                                      (key, value, oldValue, mergingValue, type, uuid, entries) =>
                        {
                            CacheRecord removed;
                            cache.TryRemove(key, out removed);
                        });
                    };
                }
                else
                {
                    throw new NotImplementedException("Near cache is not available for this type of data structure");
                }

                registrationId = context.GetListenerService().StartListening(request,
                                                                             handler, m => MapAddNearCacheEntryListenerCodec.DecodeResponse(m).response);
            }
            catch (Exception e)
            {
                Logger.Severe("-----------------\n Near Cache is not initialized!!! \n-----------------", e);
            }
        }
示例#8
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);
     }
 }
示例#9
0
        public string AddDistributedObjectListener(IDistributedObjectListener listener)
        {
            var isSmart = _client.GetClientConfig().GetNetworkConfig().IsSmartRouting();
            var request = ClientAddDistributedObjectListenerCodec.EncodeRequest(isSmart);
            var context = new ClientContext(_client.GetSerializationService(), _client.GetClientClusterService(),
                                            _client.GetClientPartitionService(), _client.GetInvocationService(), _client.GetClientExecutionService(),
                                            _client.GetListenerService(), _client.GetNearCacheManager(), this, _client.GetClientConfig());
            DistributedEventHandler eventHandler = delegate(IClientMessage message)
            {
                ClientAddDistributedObjectListenerCodec.EventHandler.HandleEvent(message, (name, serviceName, eventType) =>
                {
                    var _event = new LazyDistributedObjectEvent(eventType, serviceName, name, this);
                    switch (eventType)
                    {
                    case DistributedObjectEvent.EventType.Created:
                        listener.DistributedObjectCreated(_event);
                        break;

                    case DistributedObjectEvent.EventType.Destroyed:
                        listener.DistributedObjectDestroyed(_event);
                        break;

                    default:
                        Logger.Warning(string.Format("Undefined DistributedObjectListener event type received: {0} !!!",
                                                     eventType));
                        break;
                    }
                });
            };

            return(context.GetListenerService().RegisterListener(request,
                                                                 m => ClientAddDistributedObjectListenerCodec.DecodeResponse(m).response,
                                                                 ClientRemoveDistributedObjectListenerCodec.EncodeRequest, eventHandler));
        }
 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 IFuture <IClientMessage> InvokeListenerOnConnection(IClientMessage request,
                                                                   DistributedEventHandler handler, DecodeStartListenerResponse responseDecoder, ClientConnection connection)
        {
            var clientInvocation = new ClientListenerInvocation(request, handler, responseDecoder, connection);

            Send(connection, clientInvocation);
            return(clientInvocation.Future);
        }
        public override IFuture<IClientMessage> InvokeListenerOnKeyOwner(IClientMessage request, object key, DistributedEventHandler handler,
            DecodeStartListenerResponse responseDecoder)
        {
            var partitionService = (ClientPartitionService)Client.GetClientPartitionService();
            var partitionId = partitionService.GetPartitionId(key);

            return SendToOwner(new ClientListenerInvocation(request, handler, responseDecoder, partitionId));
        }
        public IFuture <IClientMessage> InvokeListenerOnConnection(IClientMessage request,
                                                                   DistributedEventHandler eventHandler, ClientConnection connection)
        {
            var clientInvocation = new ClientInvocation(request, connection, eventHandler);

            InvokeInternal(clientInvocation, null, connection);
            return(clientInvocation.Future);
        }
 public ListenerRegistrationKey(string userRegistrationId, IClientMessage registrationRequest = null,
                                DecodeRegistrationResponse responseDecoder = null, DistributedEventHandler eventHandler = null)
 {
     UserRegistrationId  = userRegistrationId;
     RegistrationRequest = registrationRequest;
     ResponseDecoder     = responseDecoder;
     EventHandler        = eventHandler;
 }
 public override IFuture<IClientMessage> InvokeListenerOnPartition(IClientMessage request, int partitionId,
     DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder)
 {
     var partitionService = (ClientPartitionService) Client.GetClientPartitionService();
     var owner = partitionService.GetPartitionOwner(partitionId);
     return Invoke(new ClientListenerInvocation(request, handler, responseDecoder, partitionId), owner);
 }
        public override IFuture <IClientMessage> InvokeListenerOnKeyOwner(IClientMessage request, object key,
                                                                          DistributedEventHandler handler,
                                                                          DecodeStartListenerResponse responseDecoder)
        {
            var partitionService = (ClientPartitionService)Client.GetClientPartitionService();
            var partitionId      = partitionService.GetPartitionId(key);

            return(SendToOwner(new ClientListenerInvocation(request, handler, responseDecoder, partitionId)));
        }
示例#17
0
        public override IFuture <IClientMessage> InvokeListenerOnPartition(IClientMessage request, int partitionId,
                                                                           DistributedEventHandler handler,
                                                                           DecodeStartListenerResponse responseDecoder)
        {
            var partitionService = (ClientPartitionService)Client.GetClientPartitionService();
            var owner            = partitionService.GetPartitionOwner(partitionId);

            return(Invoke(new ClientListenerInvocation(request, handler, responseDecoder, partitionId), owner));
        }
        public virtual string AddMessageListener(Action <Message <T> > listener)
        {
            var request = TopicAddMessageListenerCodec.EncodeRequest(GetName(), false);
            DistributedEventHandler handler = m => TopicAddMessageListenerCodec.AbstractEventHandler.Handle(m,
                                                                                                            (item, time, uuid) => HandleMessageListener(item, time, uuid, listener));

            return(Listen(request, m => TopicAddMessageListenerCodec.DecodeResponse(m).response,
                          GetKey(), handler));
        }
示例#19
0
 public ListenerRegistration(Guid userRegistrationId, ClientMessage registrationRequest = null,
                             DecodeRegisterResponse decodeRegisterResponse = null, EncodeDeregisterRequest encodeDeregisterRequest = null,
                             DistributedEventHandler eventHandler          = null)
 {
     UserRegistrationId      = userRegistrationId;
     RegistrationRequest     = registrationRequest;
     EncodeDeregisterRequest = encodeDeregisterRequest;
     DecodeRegisterResponse  = decodeRegisterResponse;
     EventHandler            = eventHandler;
 }
示例#20
0
        public override string AddItemListener(IItemListener <T> listener, bool includeValue)
        {
            var request = ListAddListenerCodec.EncodeRequest(GetName(), includeValue, false);

            DistributedEventHandler handler = message => ListAddListenerCodec.AbstractEventHandler.Handle(message,
                                                                                                          ((item, uuid, type) => { HandleItemListener(item, uuid, (ItemEventType)type, listener, includeValue); }));

            return(Listen(request,
                          m => ListAddListenerCodec.DecodeResponse(m).response, GetPartitionKey(), handler));
        }
示例#21
0
 public ListenerRegistration(string userRegistrationId, IClientMessage registrationRequest = null,
                             DecodeRegisterResponse decodeRegisterResponse = null, EncodeDeregisterRequest encodeDeregisterRequest = null,
                             DistributedEventHandler eventHandler          = null)
 {
     UserRegistrationId      = userRegistrationId;
     RegistrationRequest     = registrationRequest;
     EncodeDeregisterRequest = encodeDeregisterRequest;
     DecodeRegisterResponse  = decodeRegisterResponse;
     EventHandler            = eventHandler;
     ConnectionRegistrations = new ConcurrentDictionary <ClientConnection, EventRegistration>();
 }
示例#22
0
 public virtual string AddMessageListener(Action<Message<T>> listener)
 {
     var request = TopicAddMessageListenerCodec.EncodeRequest(GetName(), IsSmart());
     DistributedEventHandler handler = m =>
         TopicAddMessageListenerCodec.EventHandler.HandleEvent(m,
             (item, time, uuid) =>
             {
                 HandleMessageListener(item, time, uuid, listener);
             });
     return RegisterListener(request, m => TopicAddMessageListenerCodec.DecodeResponse(m).response,
         id => TopicRemoveMessageListenerCodec.EncodeRequest(GetName(), id), handler);
 }
        public virtual string AddEntryListener(IEntryListener <K, V> listener, bool includeValue)
        {
            var request = MultiMapAddEntryListenerCodec.EncodeRequest(GetName(), includeValue, false);

            DistributedEventHandler handler =
                eventData => MultiMapAddEntryListenerCodec.AbstractEventHandler.Handle(eventData,
                                                                                       (key, value, oldValue, mergingValue, type, uuid, entries) =>
                                                                                       OnEntryEvent(key, value, oldValue, mergingValue, (EntryEventType)type, uuid, entries, includeValue, listener)
                                                                                       );

            return(Listen(request, message => MultiMapAddEntryListenerCodec.DecodeResponse(message).response, handler));
        }
        public override string AddItemListener(IItemListener <T> listener, bool includeValue)
        {
            var request = SetAddListenerCodec.EncodeRequest(GetName(), includeValue, IsSmart());

            DistributedEventHandler handler = message => SetAddListenerCodec.EventHandler.HandleEvent(message,
                                                                                                      (item, uuid, type) =>
            {
                HandleItemListener(item, uuid, (ItemEventType)type, listener, includeValue);
            });

            return(RegisterListener(request, m => SetAddListenerCodec.DecodeResponse(m).response,
                                    id => SetRemoveListenerCodec.EncodeRequest(GetName(), id), handler));
        }
示例#25
0
        public string AddEntryListener(IEntryListener <TKey, TValue> listener, bool includeValue)
        {
            var listenerFlags = GetListenerFlags(listener);
            var request       = MapAddEntryListenerCodec.EncodeRequest(GetName(), includeValue, listenerFlags, false);
            DistributedEventHandler handler =
                eventData => MapAddEntryListenerCodec.AbstractEventHandler.Handle(eventData,
                                                                                  (key, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key, value, oldValue, mergingValue, type, uuid, entries, includeValue, listener);
            });

            return(Listen(request, message => MapAddEntryListenerCodec.DecodeResponse(message).response, handler));
        }
示例#26
0
        internal void ListenMembershipEvents(Address ownerConnectionAddress)
        {
            if (Logger.IsFinestEnabled())
            {
                Logger.Finest("Starting to listen for membership events from " + ownerConnectionAddress);
            }
            _initialListFetched = new ManualResetEventSlim();
            try
            {
                var clientMessage = ClientAddMembershipListenerCodec.EncodeRequest(false);
                DistributedEventHandler handler = m => ClientAddMembershipListenerCodec.EventHandler
                                                  .HandleEvent(m, HandleMember, HandleMemberCollection, HandleMemberAttributeChange);

                try
                {
                    var connection = _connectionManager.GetConnection(ownerConnectionAddress);
                    if (connection == null)
                    {
                        throw new InvalidOperationException(
                                  "Can not load initial members list because owner connection is null. Address "
                                  + ownerConnectionAddress);
                    }
                    var invocationService = (ClientInvocationService)_client.GetInvocationService();
                    var future            = invocationService.InvokeListenerOnConnection(clientMessage, handler, connection);
                    var response          = ThreadUtil.GetResult(future);
                    //registration id is ignored as this listener will never be removed
                    var registirationId = ClientAddMembershipListenerCodec.DecodeResponse(response).response;
                    WaitInitialMemberListFetched();
                }
                catch (Exception e)
                {
                    throw ExceptionUtil.Rethrow(e);
                }
            }
            catch (Exception e)
            {
                if (_client.GetLifecycleService().IsRunning())
                {
                    if (Logger.IsFinestEnabled())
                    {
                        Logger.Warning("Error while registering to cluster events! -> " + ownerConnectionAddress, e);
                    }
                    else
                    {
                        Logger.Warning("Error while registering to cluster events! -> " + ownerConnectionAddress +
                                       ", Error: " + e);
                    }
                }
            }
        }
示例#27
0
        public Guid AddItemListener(IItemListener <T> listener, bool includeValue)
        {
            var request = QueueAddListenerCodec.EncodeRequest(Name, includeValue, IsSmart());

            DistributedEventHandler handler = m =>
                                              QueueAddListenerCodec.EventHandler.HandleEvent(m,
                                                                                             (item, uuid, type) =>
            {
                HandleItemListener(item, uuid, (ItemEventType)type, listener, includeValue);
            });

            return(RegisterListener(request, m => QueueAddListenerCodec.DecodeResponse(m).Response,
                                    id => QueueRemoveListenerCodec.EncodeRequest(Name, id), handler));
        }
        public string AddEntryListener(IEntryListener <K, V> listener, IPredicate <K, V> predicate, bool includeValue)
        {
            var predicateData = ToData(predicate);
            var flags         = GetListenerFlags(listener);
            var request       = MapAddEntryListenerWithPredicateCodec.EncodeRequest(GetName(), predicateData, includeValue, flags, false);
            DistributedEventHandler handler =
                eventData => MapAddEntryListenerWithPredicateCodec.AbstractEventHandler.Handle(eventData,
                                                                                               (key, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key, value, oldValue, mergingValue, type, uuid, entries, includeValue, listener);
            });

            return(Listen(request, message => MapAddEntryListenerWithPredicateCodec.DecodeResponse(message).response, null,
                          handler));
        }
示例#29
0
        public Guid AddEntryListener(MapListener listener, bool includeValue)
        {
            var listenerAdapter = EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, Client.SerializationService);

            var listenerFlags = (int)listenerAdapter.ListenerFlags;
            var request       = MapAddEntryListenerCodec.EncodeRequest(Name, includeValue, listenerFlags, IsSmart());
            DistributedEventHandler handler = eventData => MapAddEntryListenerCodec.EventHandler.HandleEvent(eventData,
                                                                                                             (key, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key, value, oldValue, mergingValue, type, uuid, entries, listenerAdapter);
            });

            return(RegisterListener(request, message => MapAddEntryListenerCodec.DecodeResponse(message).Response,
                                    id => MapRemoveEntryListenerCodec.EncodeRequest(Name, id), handler));
        }
        public virtual string AddEntryListener(IEntryListener <TKey, TValue> listener, TKey key, bool includeValue)
        {
            var keyData = ToData(key);
            var request = MultiMapAddEntryListenerToKeyCodec.EncodeRequest(GetName(), keyData, includeValue, IsSmart());

            DistributedEventHandler handler =
                eventData => MultiMapAddEntryListenerToKeyCodec.AbstractEventHandler.Handle(eventData,
                                                                                            (thekey, value, oldValue, mergingValue, type, uuid, entries) =>
                                                                                            OnEntryEvent(thekey, value, oldValue, mergingValue, (EntryEventType)type, uuid, entries,
                                                                                                         includeValue, listener)
                                                                                            );

            return(RegisterListener(request, message => MultiMapAddEntryListenerToKeyCodec.DecodeResponse(message).response,
                                    id => MultiMapRemoveEntryListenerCodec.EncodeRequest(GetName(), id), handler));
        }
 public Invocation(ClientMessage request, Guid?targetUuid = null, int partitionId                      = -1,
                   Connection boundConnection             = null, DistributedEventHandler eventHandler = null, string objectName = null)
 {
     Request         = request;
     TargetUuid      = targetUuid;
     PartitionId     = partitionId;
     BoundConnection = boundConnection;
     EventHandler    = eventHandler;
     ObjectName      = objectName;
     Future          = new SettableFuture <ClientMessage>();
     StartTimeMillis = Clock.CurrentTimeMillis();
     if (PartitionId != -1)
     {
         Request.PartitionId = PartitionId;
     }
 }
示例#32
0
        public string AddEntryListener(MapListener listener, TKey key, bool includeValue)
        {
            var keyData         = ToData(key);
            var listenerAdapter =
                EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, GetContext().GetSerializationService());

            var listenerFlags = (int)listenerAdapter.ListenerFlags;
            var request       = MapAddEntryListenerToKeyCodec.EncodeRequest(GetName(), keyData, includeValue, listenerFlags, IsSmart());
            DistributedEventHandler handler = eventData => MapAddEntryListenerToKeyCodec.EventHandler.HandleEvent(eventData,
                                                                                                                  (key_, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key_, value, oldValue, mergingValue, type, uuid, entries, listenerAdapter);
            });

            return(RegisterListener(request, message => MapAddEntryListenerToKeyCodec.DecodeResponse(message).response,
                                    id => MapRemoveEntryListenerCodec.EncodeRequest(GetName(), id), handler));
        }
示例#33
0
        public virtual string AddEntryListener(IEntryListener <TKey, TValue> listener, bool includeValue)
        {
            var listenerAdapter =
                EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, GetContext().GetSerializationService());

            var request = MultiMapAddEntryListenerCodec.EncodeRequest(GetName(), includeValue, IsSmart());

            DistributedEventHandler handler =
                eventData => MultiMapAddEntryListenerCodec.EventHandler.HandleEvent(eventData,
                                                                                    (key, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key, value, oldValue, mergingValue, type, uuid, entries, listenerAdapter);
            });

            return(RegisterListener(request, message => MultiMapAddEntryListenerCodec.DecodeResponse(message).response,
                                    id => MultiMapRemoveEntryListenerCodec.EncodeRequest(GetName(), id), handler));
        }
        public virtual Guid AddEntryListener(IEntryListener <TKey, TValue> listener, TKey key, bool includeValue)
        {
            var listenerAdapter =
                EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, Client.SerializationService);

            var keyData = ToData(key);
            var request = MultiMapAddEntryListenerToKeyCodec.EncodeRequest(Name, keyData, includeValue, IsSmart());

            DistributedEventHandler handler =
                eventData => MultiMapAddEntryListenerToKeyCodec.EventHandler.HandleEvent(eventData,
                                                                                         (k, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(k, value, oldValue, mergingValue, type, uuid, entries, listenerAdapter);
            });

            return(RegisterListener(request, message => MultiMapAddEntryListenerToKeyCodec.DecodeResponse(message).Response,
                                    id => MultiMapRemoveEntryListenerCodec.EncodeRequest(Name, id), handler));
        }
        public string AddEntryListener(IEntryListener <TKey, TValue> listener, IPredicate predicate,
                                       TKey key,
                                       bool includeValue)
        {
            var keyData       = ToData(key);
            var predicateData = ToData(predicate);
            var flags         = GetListenerFlags(listener);
            var request       = MapAddEntryListenerToKeyWithPredicateCodec.EncodeRequest(GetName(), keyData, predicateData,
                                                                                         includeValue, flags, IsSmart());
            DistributedEventHandler handler =
                eventData => MapAddEntryListenerToKeyWithPredicateCodec.AbstractEventHandler.Handle(eventData,
                                                                                                    (k, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(k, value, oldValue, mergingValue, type, uuid, entries, includeValue, listener);
            });

            return(RegisterListener(request, message => MapAddEntryListenerCodec.DecodeResponse(message).response,
                                    id => MapRemoveEntryListenerCodec.EncodeRequest(GetName(), id), handler));
        }
示例#36
0
        public string AddEntryListener(IEntryListener <TKey, TValue> listener, IPredicate predicate)
        {
            var predicateData   = ToData(predicate);
            var listenerAdapter =
                EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, GetContext().GetSerializationService());

            var request =
                ReplicatedMapAddEntryListenerWithPredicateCodec.EncodeRequest(GetName(), predicateData, IsSmart());
            DistributedEventHandler handler =
                eventData => ReplicatedMapAddEntryListenerWithPredicateCodec.EventHandler.HandleEvent(eventData,
                                                                                                      (k, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(k, value, oldValue, mergingValue, type, uuid, entries, listenerAdapter);
            });

            return(RegisterListener(request,
                                    message => ReplicatedMapAddEntryListenerWithPredicateCodec.DecodeResponse(message).response,
                                    id => ReplicatedMapRemoveEntryListenerCodec.EncodeRequest(GetName(), id), handler));
        }
 public abstract IFuture<IClientMessage> InvokeListenerOnKeyOwner(IClientMessage request, object key,
     DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder);
 public abstract IFuture<IClientMessage> InvokeListenerOnTarget(IClientMessage request, Address target,
     DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder);
 public IFuture<IClientMessage> InvokeListenerOnConnection(IClientMessage request,
     DistributedEventHandler handler, DecodeStartListenerResponse responseDecoder, ClientConnection connection)
 {
     var clientInvocation = new ClientListenerInvocation(request, handler, responseDecoder, connection);
     Send(connection, clientInvocation);
     return clientInvocation.Future;
 }
 public override IFuture<IClientMessage> InvokeListenerOnTarget(IClientMessage request, Address target,
     DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder)
 {
     return Invoke(new ClientListenerInvocation(request, handler, responseDecoder, target), target);
 }
 public abstract IFuture<IClientMessage> InvokeListenerOnPartition(IClientMessage request, int partitionId,
     DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder);
 public override IFuture<IClientMessage> InvokeListenerOnRandomTarget(IClientMessage request, DistributedEventHandler handler,
     DecodeStartListenerResponse responseDecoder)
 {
     return SendToOwner(new ClientListenerInvocation(request, handler, responseDecoder));
 }