コード例 #1
0
ファイル: udptester.py プロジェクト: TejaKommineni/Mercury
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)
コード例 #2
0
 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
コード例 #3
0
 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))
コード例 #4
0
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
コード例 #5
0
 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
コード例 #6
0
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
コード例 #7
0
 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
コード例 #8
0
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
コード例 #9
0
 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
コード例 #10
0
 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))
コード例 #11
0
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
コード例 #12
0
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
コード例 #13
0
 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
コード例 #14
0
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)
コード例 #15
0
 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))
コード例 #16
0
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))