public bool Register(string connectionId, Action <string[]> onChanged) { ConcurrentDictionary <string, IDisposable> dict; if (!Listeners.TryGetValue(typeof(TDomainObject), out dict)) { dict = new ConcurrentDictionary <string, IDisposable>(); if (!Listeners.TryAdd(typeof(TDomainObject), dict)) { return(false); } } var name = typeof(TDomainObject).FullName; var listener = ChangeNotification.Track <TDomainObject>().Subscribe(kv => onChanged(kv.Key)); if (!dict.TryAdd(connectionId, listener)) { listener.Dispose(); } else { ConcurrentBag <Type> bag; if (!Connections.TryGetValue(connectionId, out bag)) { bag = new ConcurrentBag <Type>(); Connections.TryAdd(connectionId, bag); } bag.Add(typeof(TDomainObject)); } return(true); }
public async Task SendAsync(MessageRequest msg, Func <MessageResponse, bool?> callback, TimeSpan?timeout = null) { var callbackStruct = new MessageCallback { TaskCompleter = new TaskCompletionSource <bool>(), Expires = Clock.Now.Add(timeout ?? TimeSpan.FromMinutes(1)), Callback = callback }; Listeners.TryAdd(msg.Id, callbackStruct); await SendAsync(msg); await callbackStruct.TaskCompleter.Task; }
public bool Register(string connectionId, Type type, string specificationJson, Action <string> onMatched) { Func <TDomainObject, bool> isMatched; try { ISpecification <TDomainObject> specification = (ISpecification <TDomainObject>)Newtonsoft.Json.JsonConvert.DeserializeObject(specificationJson, type); isMatched = specification.IsSatisfied.Compile(); } catch { return(false); } ConcurrentDictionary <string, IDisposable> dict; if (!Listeners.TryGetValue(typeof(TDomainObject), out dict)) { dict = new ConcurrentDictionary <string, IDisposable>(); if (!Listeners.TryAdd(typeof(TDomainObject), dict)) { return(false); } } var name = typeof(TDomainObject).FullName; var listener = ChangeNotification.Track <TDomainObject>().Subscribe(kv => { foreach (var v in kv.Value.Value) { if (isMatched(v)) { onMatched(v.URI); } } }); if (!dict.TryAdd(connectionId, listener)) { listener.Dispose(); } else { ConcurrentBag <Type> bag; if (!Connections.TryGetValue(connectionId, out bag)) { bag = new ConcurrentBag <Type>(); Connections.TryAdd(connectionId, bag); } bag.Add(typeof(TDomainObject)); } return(true); }
private Boolean setupListeners() { authListener = new AuthentificationListener(); channelListener = new ChannelListener(); if (!Listeners.TryAdd(typeof(LoginResponsePacket), authListener)) { return(false); } if (!Listeners.TryAdd(typeof(WelcomePacket), authListener)) { return(false); } if (!Listeners.TryAdd(typeof(RegisterResponsePacket), authListener)) { return(false); } if (!Listeners.TryAdd(typeof(LoginTokenResponsePacket), authListener)) { return(false); } if (!Listeners.TryAdd(typeof(GetChannelResponsePacket), channelListener)) { return(false); } if (!Listeners.TryAdd(typeof(MessagePacket), channelListener)) { return(false); } if (!Listeners.TryAdd(typeof(PresencePacket), channelListener)) { return(false); } if (!Listeners.TryAdd(typeof(RenameChannelResponsePacket), channelListener)) { return(false); } if (!Listeners.TryAdd(typeof(CreateChannelResponsePacket), channelListener)) { return(false); } if (!Listeners.TryAdd(typeof(DeleteChannelResponsePacket), channelListener)) { return(false); } return(true); }
private Boolean setupListeners() { AuthentificationListener auth = new AuthentificationListener(); ChannelListener channelsListener = new ChannelListener(); if (!Listeners.TryAdd(typeof(LoginPacket), auth)) { return(false); } if (!Listeners.TryAdd(typeof(WelcomePacket), auth)) { return(false); } if (!Listeners.TryAdd(typeof(RegisterPacket), auth)) { return(false); } if (!Listeners.TryAdd(typeof(LoginTokenPacket), auth)) { return(false); } if (!Listeners.TryAdd(typeof(GetChannelPacket), channelsListener)) { return(false); } if (!Listeners.TryAdd(typeof(NewMessagePacket), channelsListener)) { return(false); } if (!Listeners.TryAdd(typeof(RenameChannelPacket), channelsListener)) { return(false); } if (!Listeners.TryAdd(typeof(CreateChannelPacket), channelsListener)) { return(false); } if (!Listeners.TryAdd(typeof(DeleteChannelPacket), channelsListener)) { return(false); } return(true); }
private void AddListener(IEventListener listener, Type eventType) { var dlist = new List <IEventListener>(); if (Listeners.TryGetValue(eventType, out dlist)) { if (!dlist.Contains(listener)) { dlist.Add(listener); } } else { dlist = new List <IEventListener> { listener }; Listeners.TryAdd(eventType, dlist); } }