-
Notifications
You must be signed in to change notification settings - Fork 0
/
commander_register.py
96 lines (69 loc) · 2.72 KB
/
commander_register.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import sys
import time
import argparse
import traceback
import os
from pyndn import Interest
from pyndn import Name
from pyndn import Face
class Consumer(object):
'''Hello World consumer'''
def __init__(self, gatewayprefix, newprefix, chatroom):
self.gatewayprefix = Name(gatewayprefix)
self.newprefix = str(Name(newprefix))
self.chatroom = str(Name(chatroom))
self.parameter = self.newprefix +"|"+ self.chatroom
self.outstanding = dict()
self.isDone = False
self.face = Face("127.0.0.1")
def run(self):
os.system("nlsrc advertise " + self.newprefix)
os.system("nlsrc advertise " + self.chatroom)
try:
self._sendNextInterest(self.gatewayprefix)
while not self.isDone:
self.face.processEvents()
time.sleep(0.01)
except RuntimeError as e:
print "ERROR: %s" % e
def _sendNextInterest(self, name):
interest = Interest(name)
uri = name.toUri()
interest.setApplicationParameters(self.parameter)
interest.setInterestLifetimeMilliseconds(4000)
interest.setMustBeFresh(True)
if uri not in self.outstanding:
self.outstanding[uri] = 1
self.face.expressInterest(interest, self._onData, self._onTimeout)
print "Sent Interest for %s" % uri
print interest
def _onData(self, interest, data):
payload = data.getContent()
name = data.getName()
print "Received response from gateway: ", payload.toRawStr()
del self.outstanding[name.toUri()]
self.isDone = True
def _onTimeout(self, interest):
name = interest.getName()
uri = name.toUri()
print "TIMEOUT #%d: %s" % (self.outstanding[uri], uri)
self.outstanding[uri] += 1
if self.outstanding[uri] <= 1000:
self._sendNextInterest(name)
else:
self.isDone = True
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Parse command line args to register new prefix')
parser.add_argument("-u", "--uri", required=True, help='gateway prefix')
parser.add_argument("-p", "--prefix", required=True, help='multicast prefix to register')
parser.add_argument("-c", "--chatroom", required=True, help='chat channel prefix')
args = parser.parse_args()
try:
uri = args.uri
prefix = args.prefix
chatroom = args.chatroom
Consumer(uri,prefix,chatroom).run()
except:
traceback.print_exc(file=sys.stdout)
print "Error parsing command line arguments"
sys.exit(1)