私は問題があります。コードのこの部分は 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、応答元のネットワーク、およびその他の情報です。
次に、ユーザーへの応答を書きます。
このコードが正しいかどうかわかりません... これで動作しますか? 構造は私には正しいようです....
提案をありがとうございました!