Source code for src.TopicDataProxy

from typing import Callable

from UbiiNetworkClient import UbiiNetworkClient
from proto.topicData.topicDataRecord_pb2 import TopicDataRecord
from TopicDataBuffer import SubscriptionToken, TopicDataBuffer, SubscriptionTokenTYPE
from typing import List


[docs]class TopicDataProxy: def __init__(self, topicDataBuffer: TopicDataBuffer, networkClient: UbiiNetworkClient, node): self.topicDataBuffer: TopicDataBuffer = topicDataBuffer self.networkClient = networkClient self.node = node
[docs] def subscribeTopic(self, topic: str, callback: Callable[[TopicDataRecord], None]) -> SubscriptionToken: subscriptions = self.getTopicSubscriptionTokens(topic) if subscriptions is None or not subscriptions: self.networkClient.subscribeTopic(topic, self.onTopicDataRecord) return self.topicDataBuffer.subscribeTopic(topic, callback)
[docs] def subscribeRegex(self, regex: str, callback: Callable[[TopicDataRecord], None]) -> SubscriptionToken: subscriptions = self.getRegexSubscriptionTokens(regex) if subscriptions is None or not subscriptions: self.networkClient.subscribeRegex(regex, self.onTopicDataRecord) return self.topicDataBuffer.subscribeRegex(regex, callback)
[docs] def unsubscribe(self, token: SubscriptionToken) -> bool: bufferUnsubscribe = self.topicDataBuffer.unsubscribe(token) if bufferUnsubscribe: if token.type == SubscriptionTokenTYPE.TOPIC: subList = self.getTopicSubscriptionTokens(token.topic) if (subList is None) or (not subList): self.networkClient.unsubscribe(token.topic, self.onTopicDataRecord) elif token.type == SubscriptionTokenTYPE.REGEX: subList = self.getRegexSubscriptionTokens(token.topic) if (subList is None) or (not subList): self.networkClient.unsubscribeRegex(token.topic, self.onTopicDataRecord) return True return False
[docs] def remove(self, topic: str): self.topicDataBuffer.remove(topic)
[docs] def pull(self, topic: str) -> TopicDataRecord: return self.topicDataBuffer.pull(topic)
[docs] def getTopicSubscriptionTokens(self, topic: str) -> List[SubscriptionToken]: return self.topicDataBuffer.getTopicSubscriptionTokens(topic)
[docs] def getRegexSubscriptionTokens(self, regex: str) -> List[SubscriptionToken]: return self.topicDataBuffer.getRegexSubscriptionTokens(regex)
[docs] def onTopicDataRecord(self, record: TopicDataRecord): self.topicDataBuffer.publish(record)
[docs] def setPublishFrequency(self, frequency): self.networkClient.setPublishFrequency(frequency)
[docs] def stopNode(self): self.networkClient.stopNode()