-
Notifications
You must be signed in to change notification settings - Fork 7
/
tibrvlisten.py
111 lines (77 loc) · 2.42 KB
/
tibrvlisten.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
97
98
99
100
101
102
103
104
105
106
107
108
##
# tibrvlisten.py
# rewrite TIBRV example: tibrvlisten.c
# using Python Object Model
#
# LAST MODIFIED: V1.0 2016-12-22 ARIEN arien.chen@gmail.com
#
import sys
import getopt
from pytibrv.events import *
def usage() :
print()
print("tibrvlisten.py [--service service] [--network network]")
print(" [--daemon daemon] <subject> ")
print()
sys.exit(1)
def get_params(argv):
try:
opts, args = getopt.getopt(argv, '', ['service=', 'network=', 'daemon='])
except getopt.GetoptError:
usage()
service = None
network = None
daemon = None
for opt, arg in opts:
if opt == '--service':
service = arg
elif opt == '--network':
network = arg
elif opt == '--daemon':
daemon = arg
else:
usage()
if len(args) != 1:
usage()
return service, network, daemon, args[0]
def my_callback(event, msg, closure):
localTime, gmtTime = TibrvMsg.nowString()
if msg.replySubject is not None:
print("{} ({}): subject={}, reply={}, message={}".format(
localTime, gmtTime, msg.sendSubject, msg.replySubject, str(msg)));
else:
print("{} ({}): subject={}, message={}".format(
localTime, gmtTime, msg.sendSubject, str(msg)));
# MAIN PROGRAM
def main(argv):
progname = argv[0]
service, network, daemon, subj = get_params(argv[1:])
err = Tibrv.open()
if err != TIBRV_OK:
print('{}: Failed to open TIB/RV: {}'.format('', progname, TibrvStatus.text(err)))
sys.exit(1);
tx = TibrvTx()
err = tx.create(service, network, daemon)
if err != TIBRV_OK:
print('{}: Failed to initialize transport: {}'.format('', progname, TibrvStatus.text(err)))
sys.exit(1)
tx.description = progname
print("tibrvlisten: Listening to subject {}".format(subj))
def_que = TibrvQueue()
listener = TibrvListener()
err = listener.create(def_que, TibrvMsgCallback(my_callback), tx, subj, None)
if err != TIBRV_OK:
print('{}: Error {} listening to {}'.format('', progname, TibrvStatus.text(err), subj))
sys.exit(2)
while def_que.dispatch() == TIBRV_OK:
pass
# In Linux/OSX
# CTRL-C will not interrupt the process
# CTRL-\ (SIGQUIT) would work
del listener
del tx
Tibrv.close()
sys.exit(0)
return
if __name__ == "__main__":
main(sys.argv)