protected virtual string RegisterListener(IClientMessage registrationMessage, DecodeRegistrationResponse responseDecoder, EncodeDeregisterListenerRequest encodeDeregisterListenerRequest, DistributedEventHandler eventHandler) { return(_context.GetListenerService() .RegisterListener(registrationMessage, responseDecoder, encodeDeregisterListenerRequest, eventHandler)); }
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); } }
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); }
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); } }
protected virtual bool DeregisterListener(string userRegistrationId, EncodeDeregisterListenerRequest encodeDeregisterListenerRequest) { return(_context.GetListenerService() .DeregisterListener(userRegistrationId, encodeDeregisterListenerRequest)); }