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 要求でこの応答を読み取り、非同期応答を待ちます。

応答がネットワークによって書き込まれる場合、パケット内でこれを見つける必要があります。値応答は 6 番目の要素です。パケットのその他の情報は、opgroup と opcode、応答元のネットワーク、およびその他の情報です。

次に、ユーザーへの応答を書きます。

このコードが正しいかどうかわかりません... これで動作しますか? 構造は私には正しいようです....

提案をありがとうございました!

4

0 に答える 0