2

我有个问题。我用 Python(Tornado Web 服务器)编写了这部分代码:

if command == 'RESTARTNWK':
        op_group = "A3"
        op_code = "E0"
        netid = hextransform(int(nid), 16)
        packet_meta = "*%s;%s;%s;#"
        pkt_len = hextransform(0, 2)

        packet = packet_meta % (op_group, op_code, pkt_len)
        packet = packet.upper()

        op_group_hex=0xA3
        op_code_hex=0xE0

        cmdjson = packet2json(op_group_hex,op_code_hex, packet)

    mynet_type="ztc"

    print("\t\t " + packet + "\n")

    #TODO : -write command into db  
    ts = datetime.datetime.now().isoformat()
    mynet_type ="ztc" 
    self.lock_tables("write", ['confcommands'])
self.db.execute("INSERT INTO confcommands (network_id, ntype, timestamp, command) \
                              VALUES (%s,%s,%s,%s)", nid, mynet_type, ts, cmdjson)
    self.unlock_tables();

    # TODO: - open the /tmp/iztc file in append mode
    cmdfile = open('/tmp/iztc', 'a')
    #       - acquire a lock  "only for the DB case, it's easier"
    #       - write the packet 
    cmdfile.write(netid + "\t"+ mynet_type + "\t"+ ts + "\t"+  cmdjson +"\n");
    #       - release the lock "only for the DB case, it's easier"
    #       - close the file
    cmdfile.close()

    if command == 'RESTARTNWK':
        opcodegroupr = "A4"
        opcoder = "E0"


    #Code for retrieving the MAC address of the node
    como_url = "".join(['http://', options.como_address, ':', options.como_port,
                        '/', ztc_config, '?netid=', netid,
                        '&opcode_group=', opcodegroupr, 
                        '&opcode=', opcoder, '&start=-5m&end=-1s'])
    http_client = AsyncHTTPClient()
    response = yield tornado.gen.Task(http_client.fetch, como_url)

    ret = {}
    if response.error:
        ret['error'] = 'Error while retrieving unregistered sensors'
    else:
        for line in response.body.split("\n"):
            if line != "": 
                value = int(line.split(" ")[6])

    ret['response'] = value
    self.write(tornado.escape.json_encode(ret))
    self.finish()

在这段代码中,我收到了用户的重启网络命令。经过一些设置后,我将相关命令写入名为 confcommands 的 db 表中。服务器将读取此命令并将重新启动信号发送到指定的网络。

在此之后,如果一切正常,网络会重新向我发送回复。我通过对我的服务器 (como) 的 http 请求读取了此响应,并等待异步响应。

响应是由网络写入的,我必须在数据包中找到它。价值反应是第六个要素。数据包的其他信息是操作组和操作码、响应的网络以及其他信息。

然后我为用户编写响应。

我不知道这段代码是否正确......可以这样吗?结构在我看来是正确的......

谢谢大家的任何建议!

4

0 回答 0