def main(*args): config = configparser.ConfigParser() config.read(CONFFILE) config_logger(string.upper(config['Logging']['loglevel'])) udpi = udpiface.AdapterUDPInterface() udpi.configure(config) udpi.bind() while True: udpmsg = udpi.get_msg() if udpmsg: cli_msg = udpmsg[0] cli_addr = udpmsg[1] logger.info("Received message from [%s:%d]" % (cli_addr[0], cli_addr[1])) inmsg = mercury_pb2.MercuryMessage() inmsg.ParseFromString(cli_msg) #if hasattr(inmsg, "session_msg"): # for attr in inmsg.session_msg.attributes: # print "%s: %s" % (attr.key, attr.val) logger.info("\n" + str(inmsg)) outmsg = mercury_pb2.MercuryMessage() outmsg.uuid = str(uuid.uuid4()) outmsg.type = mercury_pb2.MercuryMessage.AD_SESS outmsg.src_addr.type = mercury_pb2.MercuryMessage.ADAPTER outmsg.dst_addr.type = inmsg.src_addr.type outmsg.dst_addr.cli_id = inmsg.src_addr.cli_id outmsg.session_msg.id = inmsg.session_msg.id outmsg.session_msg.type = mercury_pb2.SessionMsg.HB newattr = outmsg.session_msg.attributes.add() newattr.key = "response" newattr.val = "This is your response..." udpi.send_msg(cli_addr[0], cli_addr[1], outmsg.SerializeToString()) time.sleep(1)
def _mk_broker_msg(self, topic): msg = mproto.MercuryMessage() #msg.uuid = str(uuid.uuid4()) msg.type = mproto.MercuryMessage.PUB_CLI msg.src_addr.type = mproto.MercuryMessage.PUBSUB msg.pubsub_msg.topic = topic return msg
def process_udp_msg(self, ev): udpmsg = self.udpi.get_msg() (addr, port) = udpmsg[1] pmsg = mproto.MercuryMessage() pmsg.ParseFromString(udpmsg[0]) cli_id = pmsg.src_addr.cli_id if pmsg.type == mproto.MercuryMessage.CLI_SESS: # Store address mapping for client and process. caddr = uc.ClientAddress(cli_id, addr, port) self.cliaddrs.add(cli_id, caddr) self.clitracker.process_sess_mesg(pmsg) elif pmsg.type == mproto.MercuryMessage.APP_CLI: # Store address mapping for client and process - sim client. caddr = uc.ClientAddress(cli_id, addr, port, dummy=True) self.cliaddrs.add(cli_id, caddr) self.clitracker.process_sess_mesg(pmsg) elif pmsg.type == mproto.MercuryMessage.CLI_PUB: if self.clitracker.check_session(pmsg): self.send_pubsub_cli_msg(pmsg) else: self.cliaddrs.delete(cli_id) else: self.logger.warning( "Unexpected UDP message: Type: %s, Client address: %s:%s" % (pmsg.type, addr, port))
def _mk_subscr_msg(topic): msg = mercury_pb2.MercuryMessage() msg.uuid = str(uuid.uuid4()) msg.type = mercury_pb2.MercuryMessage.CLI_SUBSCR msg.src_addr.type = mercury_pb2.MercuryMessage.APP msg.src_addr.app_id = int(app_id) msg.dst_addr.type = mercury_pb2.MercuryMessage.PUBSUB msg.pubsub_msg.topic = topic return msg
def _mk_adapter_cli_sess_msg(self, cli_id, sess_id, msg_type): msg = mproto.MercuryMessage() msg.uuid = str(uuid.uuid4()) msg.type = mproto.MercuryMessage.AD_SESS msg.src_addr.type = mproto.MercuryMessage.ADAPTER msg.dst_addr.type = mproto.MercuryMessage.CLIENT msg.dst_addr.cli_id = cli_id msg.session_msg.id = sess_id msg.session_msg.type = msg_type return msg
def process_incoming(): while True: # receive data from client (data, addr) d = s.recvfrom(65535) reply = d[0] addr = d[1] inmsg = mercury_pb2.MercuryMessage() inmsg.ParseFromString(reply) print 'Message received:\n%s' % inmsg
def generate_msg(self, topic, msg, id, x, y): outmsg = mercury_pb2.MercuryMessage() outmsg.uuid = str(uuid.uuid4()) outmsg.type = mercury_pb2.MercuryMessage.CLI_PUB outmsg.src_addr.type = mercury_pb2.MercuryMessage.CLIENT outmsg.src_addr.cli_id = id outmsg.dst_addr.type = mercury_pb2.MercuryMessage.PUBSUB outmsg.pubsub_msg.topic = topic psm.add_msg_attr(outmsg, psm.SAFETY.ATTRIBUTES.X_LOC, x) psm.add_msg_attr(outmsg, psm.SAFETY.ATTRIBUTES.Y_LOC, y) return outmsg
def _mk_safety_msg(topic): msg = mercury_pb2.MercuryMessage() msg.uuid = str(uuid.uuid4()) msg.type = mercury_pb2.MercuryMessage.CLI_PUB msg.src_addr.type = mercury_pb2.MercuryMessage.APP msg.src_addr.app_id = int(app_id) msg.dst_addr.type = mercury_pb2.MercuryMessage.CLIENT msg.pubsub_msg.topic = topic _add_pubsub_msg_attr(msg, psm.SAFETY.ATTRIBUTES.X_LOC, 1) _add_pubsub_msg_attr(msg, psm.SAFETY.ATTRIBUTES.Y_LOC, 1) _add_pubsub_msg_attr(msg, psm.SAFETY.ATTRIBUTES.RADIUS, 5) return msg
def _mk_init_msg(self): msg = mproto.MercuryMessage() msg.uuid = str(uuid.uuid4()) msg.type = mproto.MercuryMessage.CLI_SESS msg.src_addr.type = mproto.MercuryMessage.CLIENT msg.src_addr.cli_id = int(self.client.cli_id) msg.dst_addr.type = mproto.MercuryMessage.ADAPTER msg.session_msg.type = mproto.SessionMsg.INIT sm.add_msg_attr(msg, sm.CLIREP.X_LOC, self.x_location) sm.add_msg_attr(msg, sm.CLIREP.Y_LOC, self.y_location) sm.add_msg_attr(msg, sm.CLIREP.DIRECTION, self.direction) sm.add_msg_attr(msg, sm.CLIREP.SPEED, self.speed) return msg
def udp_recv_simulator(self): evhandler = evh.EventHandler() while True: evhandler.wait() while evhandler.hasevents(): ev = evhandler.pop() vehicle_id = int(ev.evdata) vehicle = self.vehicles[vehicle_id] udpmsg = vehicle.get_msg() pmsg = mercury_pb2.MercuryMessage() pmsg.ParseFromString(udpmsg[0]) print "Simulator received a UDP msg for vehicle %d:\n%s" % \ (vehicle_id, str(pmsg))
def _mk_adapter_echo_msg(): global tsattr global sqattr msg = mercury_pb2.MercuryMessage() msg.uuid = fuuid msg.type = mercury_pb2.MercuryMessage.APP_CLI msg.src_addr.type = mercury_pb2.MercuryMessage.APP msg.src_addr.app_id = int(app_id) msg.dst_addr.type = mercury_pb2.MercuryMessage.CLIENT msg.appcli_msg.type = psm.UTILITY.TYPES.ECHO_ADAPTER _add_appcli_msg_attr(msg, psm.UTILITY.ATTRIBUTES.APP_ID, app_id) tsattr = _add_appcli_msg_attr(msg, psm.UTILITY.ATTRIBUTES.ECHO_STAMP, 0) sqattr = _add_appcli_msg_attr(msg, "Seq_Num", 0) return msg
def _mk_broker_echo_msg(): global tsattr global sqattr msg = mercury_pb2.MercuryMessage() msg.uuid = fuuid msg.type = mercury_pb2.MercuryMessage.CLI_PUB msg.src_addr.type = mercury_pb2.MercuryMessage.APP msg.src_addr.app_id = int(app_id) msg.dst_addr.type = mercury_pb2.MercuryMessage.CLIENT msg.pubsub_msg.topic = psm.UTILITY.TYPES.ECHO _add_pubsub_msg_attr(msg, psm.UTILITY.ATTRIBUTES.APP_ID, app_id) tsattr = _add_pubsub_msg_attr(msg, psm.UTILITY.ATTRIBUTES.ECHO_STAMP, 0) sqattr = _add_pubsub_msg_attr(msg, "Seq_Num", 0) return msg
def generate_report(self, id, x, y, speed): outmsg = mercury_pb2.MercuryMessage() outmsg.uuid = str(uuid.uuid4()) outmsg.type = mercury_pb2.MercuryMessage.APP_CLI outmsg.src_addr.type = mercury_pb2.MercuryMessage.CLIENT outmsg.src_addr.cli_id = id outmsg.dst_addr.type = mercury_pb2.MercuryMessage.ADAPTER outmsg.session_msg.type = mercury_pb2.SessionMsg.CLIREP outmsg.session_msg.id = 0 sm.add_msg_attr(outmsg, sm.CLIREP.X_LOC, x) sm.add_msg_attr(outmsg, sm.CLIREP.Y_LOC, y) sm.add_msg_attr(outmsg, sm.CLIREP.DIRECTION, 0) sm.add_msg_attr(outmsg, sm.CLIREP.SPEED, speed) return outmsg
def process_incoming(): inmsg = mercury_pb2.MercuryMessage() while True: # receive data from client (data, addr) udpmsg = s.recvfrom(65535) now = time.time() inmsg.ParseFromString(udpmsg[0]) tdiff = None if inmsg.type == mercury_pb2.MercuryMessage.PUB_CLI: tdiff = now - float( psm.get_msg_attr(inmsg, psm.UTILITY.ATTRIBUTES.ECHO_STAMP)) elif inmsg.type == mercury_pb2.MercuryMessage.CLI_APP: pstamp = float( acm.get_msg_attr(inmsg, psm.UTILITY.ATTRIBUTES.ECHO_STAMP)) tdiff = now - pstamp else: print "Unknown message type!" timings.append(tdiff)
def process_udp_msg(self, ev): udpmsg = self.udpi.get_msg() (addr, port) = udpmsg[1] pmsg = mproto.MercuryMessage() pmsg.ParseFromString(udpmsg[0]) if pmsg.type == mproto.MercuryMessage.AD_SESS: self.session.process_adapter_msg(pmsg) elif pmsg.type == mproto.MercuryMessage.PUB_CLI: self.appi.process_pubsub(pmsg) elif pmsg.type in (mproto.MercuryMessage.APP_CLI, mproto.MercuryMessage.CLI_PUB, mproto.MercuryMessage.CLI_SUBSCR, mproto.MercuryMessage.CLI_UNSUB): app_id = pmsg.src_addr.app_id self.apps[app_id] = (addr, port) self.appi.process_app_msg(pmsg) else: self.logger.warning("Unexpected UDP message: Type: %s, Client address: %s:%s" % (pmsg.type, addr, port))
else: cli_id = 1234567890 port = 8888 def _add_sess_msg_attr(msg, key, val): attr = msg.session_msg.attributes.add() attr.key = key attr.val = str(val) while (1): msg = raw_input('Enter message to send : ') outmsg = mercury_pb2.MercuryMessage() outmsg.uuid = str(uuid.uuid4()) outmsg.type = mercury_pb2.MercuryMessage.APP_CLI outmsg.src_addr.type = mercury_pb2.MercuryMessage.CLIENT outmsg.src_addr.cli_id = int(cli_id) outmsg.dst_addr.type = mercury_pb2.MercuryMessage.ADAPTER outmsg.session_msg.id = 0 outmsg.session_msg.type = mercury_pb2.SessionMsg.CLIREP _add_sess_msg_attr(outmsg, sm.CLIREP.X_LOC, 1234) _add_sess_msg_attr(outmsg, sm.CLIREP.Y_LOC, 5467) _add_sess_msg_attr(outmsg, sm.CLIREP.DIRECTION, 360) _add_sess_msg_attr(outmsg, sm.CLIREP.SPEED, 60) try: #Set the whole string s.sendto(outmsg.SerializeToString(), (host, port))