private static Guid ReadSubscribeResponse(ClientMessage responseMessage, object state)
        {
            var sstate = ToSafeState <MapSubscriptionState>(state);

            return(sstate.Mode switch
            {
                0 => MapAddEntryListenerCodec.DecodeResponse(responseMessage).Response,
                1 => MapAddEntryListenerToKeyCodec.DecodeResponse(responseMessage).Response,
                2 => MapAddEntryListenerWithPredicateCodec.DecodeResponse(responseMessage).Response,
                3 => MapAddEntryListenerToKeyWithPredicateCodec.DecodeResponse(responseMessage).Response,
                _ => throw new NotSupportedException()
            });
        public string AddEntryListener(IEntryListener <K, V> listener, K keyK, bool includeValue)
        {
            var keyData = ToData(keyK);
            var flags   = GetListenerFlags(listener);
            var request = MapAddEntryListenerToKeyCodec.EncodeRequest(GetName(), keyData, includeValue, flags, false);
            DistributedEventHandler handler =
                eventData => MapAddEntryListenerToKeyCodec.AbstractEventHandler.Handle(eventData,
                                                                                       (key, value, oldValue, mergingValue, type, uuid, entries) =>
            {
                OnEntryEvent(key, value, oldValue, mergingValue, type, uuid, entries, includeValue, listener);
            });

            return(Listen(request, message => MapAddEntryListenerToKeyCodec.DecodeResponse(message).response, keyData,
                          handler));
        }
예제 #3
0
        public Guid AddEntryListener(MapListener listener, TKey key, bool includeValue)
        {
            var keyData         = ToData(key);
            var listenerAdapter = EntryListenerAdapter <TKey, TValue> .CreateAdapter(listener, Client.SerializationService);

            var listenerFlags = (int)listenerAdapter.ListenerFlags;
            var request       = MapAddEntryListenerToKeyCodec.EncodeRequest(Name, 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(Name, id), handler));
        }