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); } } }
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); }
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)); } }
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); }