-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtibrvlisten.py
124 lines (89 loc) · 2.95 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
109
110
111
112
113
114
115
116
117
118
119
120
121
##
# tibrvlisten.py
# rewrite TIBRV example: tibrvlisten.c
#
# LAST MODIFIED: V1.0 2016-12-22 ARIEN [email protected]
#
import sys, signal
import getopt
from pytibrv.api import *
from pytibrv.status import *
from pytibrv.events import *
from pytibrv.msg import *
from pytibrv.tport import *
from pytibrv.queue import *
# Module Variables
_running = True # set to False when Ctrl-C
def signal_proc(signal, frame):
global _running
_running = False
print()
print('CRTL-C PRESSED')
def usage():
print('TIBRV Listener : tibrvlisten.py')
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):
err, send_subject = tibrvMsg_GetSendSubject(msg)
err, reply_subject = tibrvMsg_GetReplySubject(msg)
err, theString = tibrvMsg_ConvertToString(msg)
err, localTime, gmtTime = tibrvMsg_GetCurrentTimeString()
if reply_subject is not None:
print("{} ({}): subject={}, reply={}, message={}".format(
localTime, gmtTime, send_subject, reply_subject, theString));
else:
print("{} ({}): subject={}, message={}".format(
localTime, gmtTime, send_subject, theString));
# 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_GetText(err)))
sys.exit(1)
err, tx = tibrvTransport_Create(service, network, daemon)
if err != TIBRV_OK:
print('{}: Failed to initialize transport: {}'.format('', progname, tibrvStatus_GetText(err)))
sys.exit(1)
tibrvTransport_SetDescription(tx, progname)
print("tibrvlisten: Listening to subject {}".format(subj))
err, lst = tibrvEvent_CreateListener(TIBRV_DEFAULT_QUEUE, my_callback, tx, subj, None)
if err != TIBRV_OK:
print('{}: Error {} listening to {}'.format('', progname, tibrvStatus_GetText(err), subj))
sys.exit(2)
# Set Signal Handler for Ctrl-C
signal.signal(signal.SIGINT, signal_proc)
global _running
while _running:
tibrvQueue_TimedDispatch(TIBRV_DEFAULT_QUEUE, 0.5)
tibrvEvent_Destroy(lst)
tibrvTransport_Destroy(tx)
tibrv_Close()
sys.exit(0)
return
if __name__ == "__main__":
main(sys.argv)