Coverage for python/lsst/sims/alertsim/broadcast/broadcast.py : 29%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# the only lines using zlib # are currently commented-out #import zlib
""" Abstract base class, with common broadcast functionalities """
""" implemented in daughter classes """ pass
""" implemented in daughter classes """ pass
""" close socket """ self.sock.close() print('closing socket', file=sys.stderr)
""" close socket and exit with code 1 (there was an issue) """ self.close() sys.exit(1)
#@staticmethod """ add 4 byte hex header at the beginning of the message; Returns a bytes object.""" print("message length %d" % (len(message))) print("%04x" % (len(message))) print("%08x" % (len(message)))
header = '%04x' % (len(message))
return header + message
""" Class for TcpIp broadcast """
""" @param [in] ip is IP address of the receiver
@param [in] port is TCP port
@param [in] header is boolean for message header
"""
self.header = header self.ip = ip self.port = port try: self._connect_socket() except socket.error as e: print(e) self.close_and_exit()
""" Tries to send the message via socket
@param [in] message is an xml VOEvent document
"""
#message = zlib.compress(message, 9) #message += "\nEOF\n" #print message try: self._send_and_receive(message) except socket.error as e: if e.errno == errno.EPIPE: self._connect_socket() self._send_and_receive(message) else: print(e) self.close_and_exit()
""" Connects to a socket """ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.ip, self.port)) print("Connected to %s at port %d" % (self.ip, self.port))
""" Sends a message and receives ack (or some other data)
@param [in] message is an xml VOEvent document
""" if self.header: message = self._add_voevent_header(message)
self.sock.send(message.encode())
data = self.sock.recv(self.BUFFER_SIZE) print("received data:", data.decode())
""" Class for multicast // to be revised """
self.multicast_group = (ip, 5032)
# Create the datagram socket self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Set a timeout so the socket does not block indefinitely when trying # to receive data. self.sock.settimeout(1)
# Set the time-to-live for messages to 1 so they do not go past the # local network segment. ttl = struct.pack('b', -128) self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)
try:
# Send data to the multicast group print('sending "%s"' % message, file=sys.stderr) sent = self.sock.sendto(message, multicast_group)
# Look for responses from all recipients while True: print('waiting to receive', file=sys.stderr) try: data, server = self.sock.recvfrom(16) except socket.timeout: print('timed out, no more responses', file=sys.stderr) break else: print('received "%s" from %s' % (data, server), file=sys.stderr)
finally: print('closing socket', file=sys.stderr) self.close_and_exit() |