public IWampTopic CreateTopicByUri(string topicUri, bool persistent) { WampTopic wampTopic = CreateWampTopic(topicUri, persistent); IDictionary <string, WampTopic> casted = mTopicUriToSubject; casted.Add(topicUri, wampTopic); RaiseTopicCreated(wampTopic); return(wampTopic); }
private WampTopic CreateWampTopic(string topicUri, bool persistent) { WampTopic topic = new WampTopic(topicUri, persistent); // Non persistent topics die when they are empty :) if (!persistent) { topic.TopicEmpty += OnTopicEmpty; } long subscriptionId = mSubscriptionIdToTopic.Add(topic); topic.SubscriptionId = subscriptionId; return(topic); }
private void OnTopicEmpty(object sender, EventArgs e) { lock (mLock) { WampTopic topic = sender as WampTopic; if (!topic.HasSubscribers) { topic.TopicEmpty -= OnTopicEmpty; topic.Dispose(); mSubscriptionIdToTopic.TryRemoveExact(topic.SubscriptionId, topic); if (mTopicUriToSubject.TryRemoveExact(topic.TopicUri, topic)) { RaiseTopicRemoved(topic); } } } }
public IWampTopic GetOrCreateTopicByUri(string topicUri) { // Pretty ugly. bool created = false; WampTopic result = mTopicUriToSubject.GetOrAdd(topicUri, key => { WampTopic topic = CreateWampTopic(topicUri, false); created = true; return(topic); }); if (created) { RaiseTopicCreated(result); } return(result); }