-
Notifications
You must be signed in to change notification settings - Fork 1
/
tigris_stomper.py
124 lines (87 loc) · 3.37 KB
/
tigris_stomper.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
122
123
import logging
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from twisted.internet.protocol import Protocol, ReconnectingClientFactory
import stomper
stomper.utils.log_init(logging.DEBUG)
class StompProtocol(Protocol, stomper.Engine):
def __init__(self, channel='', message='', username='', password=''):
stomper.Engine.__init__(self)
self.channel = channel
self.message = message
self.username = username
self.password = password
self.counter = 1
self.log = logging.getLogger("sender")
def connected(self, msg):
"""Once I've connected I want to subscribe to my the message queue.
"""
stomper.Engine.connected(self, msg)
self.log.info("Connected: session %s. Begining say hello." % msg['headers']['session'])
# lc = LoopingCall(self.send)
# lc.start(1)
self.send("WHY HELLO!")
f = stomper.Frame()
f.unpack(stomper.subscribe(self.channel))
# ActiveMQ specific headers:
#
# prevent the messages we send comming back to us.
f.headers['activemq.noLocal'] = 'true'
return f.pack()
def ack(self, msg):
"""Processes the received message. I don't need to
generate an ack message.
"""
self.log.info("SENDER - received: %s " % msg['body'])
return stomper.NO_REPONSE_NEEDED
def send(self, msg):
"""Send out a hello message periodically.
"""
self.log.info("Saying hello (%d)." % self.counter)
f = stomper.Frame()
f.unpack(stomper.send(self.channel, self.message))
self.counter += 1
# ActiveMQ specific headers:
#
#f.headers['persistent'] = 'true'
self.transport.write(f.pack())
self.transport.loseConnection()
def connectionMade(self):
"""Register with stomp server.
"""
cmd = stomper.connect(self.username, self.password)
self.transport.write(cmd)
def dataReceived(self, data):
"""Data received, react to it and respond if needed.
"""
msg = stomper.unpack_frame(data)
returned = self.react(msg)
if returned:
self.transport.write(returned)
class StompClientFactory(ReconnectingClientFactory):
# Will be set up before the factory is created.
username, password, message = '', '', ''
def buildProtocol(self, addr):
return StompProtocol(self.channel, self.message, self.username, self.password)
def clientConnectionLost(self, connector, reason):
"""Lost connection
"""
print 'Lost connection. Reason:', reason
reactor.stop()
def clientConnectionFailed(self, connector, reason):
"""Connection failed
"""
print 'Connection failed. Reason:', reason
ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
reactor.stop()
def start(game_id, host='localhost', port=61613, username='', password=''):
"""Start twisted event loop and the fun should begin...
"""
StompClientFactory.username = username
StompClientFactory.password = password
StompClientFactory.message = 'message'
StompClientFactory.channel = '/home/cjh/' + game_id
reactor.connectTCP(host, port, StompClientFactory())
reactor.run()
if __name__ == '__main__':
start('hmmm')