'''
Created on Sep 18, 2020
@author: esdev
'''
import zmq
import logging
from slacm.port import UniPort
from slacm.exceptions import PortOperationError
[docs]
class SubscriberPort(UniPort):
'''
Subscriber port
'''
def __init__(self, parent, name, spec):
super().__init__(parent,name,spec)
self.logger.info('SubscriberPort.__init__(%s)',name)
self.instName = self.parent.name + '.' + self.name
# parentActor = parentComponent.parent
[docs]
def setup(self,owner,disco):
self.owner = owner
self.socket = self.context.socket(zmq.SUB)
self.socket.setsockopt_string(zmq.SUBSCRIBE, '')
if not self.isLocalPort:
self.host = self.netInfo.globalHost
else:
self.host = self.netInfo.localHost
[docs]
def finalize(self,disco):
key = self.formKey()
value = disco.get(key)
if value is not None:
endPoint = "tcp://" + value
self.socket.connect(endPoint)
else:
self.logger.warning(f'SubscriberPort.finalize() {self.instName}: source port lookup failed')
[docs]
def inSocket(self):
return True
[docs]
def send_pyobj(self,msg):
raise PortOperationError("attempt to send_pyobj() through a subscriber port")
[docs]
def send(self,msg):
raise PortOperationError("attempt to send() through a subscriber port")