示例#1
0
        public void StartListeningTo(string topicName, string recordKey, string fieldName, int topicId)
        {
            // Ensure we only listen to the topic once - this allows clients to call
            // us multiple times
            lock (_lockObject)
            {
                // Add the recordKey/fieldName to topicId mapping and start subscribing
                var topicFieldKey = new TopicKey(recordKey, fieldName);

                if (!_topicNameToTopicId.ContainsKey(topicFieldKey))
                {
                    var newTopicList = new List <int>();
                    _topicNameToTopicId.Add(topicFieldKey, newTopicList);
                }
                var topicIds = _topicNameToTopicId[topicFieldKey];
                topicIds.Add(topicId);

                if (!_topicIdToTopicName.ContainsKey(topicId))
                {
                    _topicIdToTopicName.Add(topicId, topicFieldKey);
                }

                if (_listeningToTopics.Contains(topicName))
                {
                    return;
                }
                if (CreateTopicListener(topicName))
                {
                    _listeningToTopics.Add(topicName);
                }
            }
        }
示例#2
0
        private void RegisterGenericChange(string fieldName, string fieldValue)
        {
            var topicFieldKey = new TopicKey(fieldName, fieldName);

            if (!_topicNameToTopicId.ContainsKey(topicFieldKey))
            {
                return;
            }
            var topicId = _topicNameToTopicId[topicFieldKey];

            // remove incase it is already present
            UpdateChangedTopic(topicId, fieldValue);
        }
示例#3
0
        private void AddAdminFieldUpdates(string topicKey, IDictionary <string, string> parsedMessage)
        {
            var accountPair = "account=" + parsedMessage["account"];

            foreach (var fieldName in _accountAdminFields)
            {
                var recordKey = BuildPositionLookupKey(accountPair, fieldName);

                var topicFieldKey = new TopicKey(recordKey, fieldName);

                if (!_topicNameToTopicId.ContainsKey(topicFieldKey))
                {
                    continue;
                }
                var topicId = _topicNameToTopicId[topicFieldKey];
                // remove incase it is already present
                UpdateChangedTopic(topicId, LookupValue(topicKey, fieldName));
            }
        }
示例#4
0
        private void RegisterChange(string topicKey, IDictionary <string, string> parsedMessage)
        {
            // for each topic and record, add them to the list of changed topics
            lock (_lockObject)
            {
                foreach (var fieldName in parsedMessage.Keys)
                {
                    var topicFieldKey = new TopicKey(topicKey, fieldName);

                    if (!_topicNameToTopicId.ContainsKey(topicFieldKey))
                    {
                        continue;
                    }
                    var topicId = _topicNameToTopicId[topicFieldKey];
                    // remove incase it is already present
                    UpdateChangedTopic(topicId, parsedMessage[fieldName]);
                }
            }
            // add in the admin fields
            AddAdminFieldUpdates(topicKey, parsedMessage);
        }