-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.py
98 lines (67 loc) · 2.79 KB
/
client.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
###############################################################################
##
## Copyright (C) 2013 Tavendo GmbH
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
###############################################################################
from autobahn.twisted.websocket import WebSocketClientFactory, \
WebSocketClientProtocol
class EchoClientProtocol(WebSocketClientProtocol):
"""
Example WebSocket client protocol. This is where you define your
application
specific protocol and logic.
"""
def sendHello(self):
self.sendMessage("Hello, world!".encode('utf8'))
def onOpen(self):
self.sendHello()
def onMessage(self, payload, isBinary):
if not isBinary:
print("Text message received: {}".format(payload.decode('utf8')))
self.factory.reactor.callLater(1, self.sendHello)
class EchoClientFactory(WebSocketClientFactory):
"""
Example WebSocket client factory. This creates a new instance of our
protocol
when the client connects to the server.
"""
protocol = EchoClientProtocol
if __name__ == '__main__':
import sys, argparse
from twisted.python import log
from twisted.internet.endpoints import clientFromString
## parse command line arguments
##
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--debug", action = "store_true", help = "Enable debug output.")
parser.add_argument("--websocket", default = "tcp:localhost:9000", help = 'WebSocket client Twisted endpoint descriptor, e.g. "tcp:localhost:9000" or "unix:/tmp/mywebsocket".')
parser.add_argument("--wsurl", default = "ws://localhost:9000", help = 'WebSocket URL (must suit the endpoint), e.g. "ws://localhost:9000".')
args = parser.parse_args()
## start Twisted logging to stdout
##
log.startLogging(sys.stdout)
## we use an Autobahn utility to import the "best" available Twisted reactor
##
from autobahn.twisted.choosereactor import install_reactor
reactor = install_reactor()
print("Running on reactor {}".format(reactor))
## start a WebSocket client
##
wsfactory = EchoClientFactory(args.wsurl, debug = args.debug)
wsclient = clientFromString(reactor, "tcp:localhost:8080")
wsclient.connect(wsfactory)
## now enter the Twisted reactor loop
##
reactor.run()