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
|
#!/usr/bin/env python
from __future__ import print_function
from circuits import Component
from circuits.web.servers import Server
from circuits.web.controllers import Controller
from circuits.net.sockets import close, write
from circuits.web.websockets import WebSocketClient, WebSocketsDispatcher
from .helpers import urlopen
class Echo(Component):
channel = "wsserver"
def init(self):
self.clients = []
def connect(self, sock, host, port):
self.clients.append(sock)
print("WebSocket Client Connected:", host, port)
self.fire(write(sock, "Welcome {0:s}:{1:d}".format(host, port)))
def disconnect(self, sock):
self.clients.remove(sock)
def read(self, sock, data):
self.fire(write(sock, "Received: " + data))
class Root(Controller):
def index(self):
return "Hello World!"
class Client(Component):
channel = "ws"
def init(self, *args, **kwargs):
self.response = None
def read(self, data):
self.response = data
def test(manager, watcher, webapp):
server = Server(0).register(manager)
watcher.wait("ready")
echo = Echo().register(server)
Root().register(server)
watcher.wait("registered", channel="wsserver")
f = urlopen(webapp.server.http.base)
s = f.read()
assert s == b"Hello World!"
watcher.clear()
WebSocketsDispatcher("/websocket").register(server)
watcher.wait("registered", channel="web")
uri = "ws://{0:s}:{1:d}/websocket".format(server.host, server.port)
WebSocketClient(uri).register(manager)
client = Client().register(manager)
watcher.wait("registered", channel="wsclient")
watcher.wait("connected", channel="wsclient")
assert len(echo.clients) == 1
watcher.wait("read", channel="ws")
assert client.response.startswith("Welcome")
watcher.clear()
client.fire(write("Hello!"), "ws")
watcher.wait("read", channel="ws")
assert client.response == "Received: Hello!"
f = urlopen(webapp.server.http.base)
s = f.read()
assert s == b"Hello World!"
assert len(echo.clients) == 1
client.fire(close(), "ws")
watcher.wait("disconnect", channel="wsserver")
assert len(echo.clients) == 0
client.unregister()
watcher.wait("unregistered")
watcher.clear()
server.unregister()
watcher.wait("unregistered")
|