Skip to content

Commit 8f9f9d5

Browse files
author
TAKANO Mitsuhiro
committed
add example from obsolete repository's test
msgpack-rpc/msgpack-rpc@9b0fe02
1 parent c8e720d commit 8f9f9d5

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

example/echoserver.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
"""Echo service.
5+
This server doesn't use msgpackrpc.server.
6+
"""
7+
8+
import SocketServer
9+
from msgpack import packs, Unpacker
10+
11+
class EchoHandler(SocketServer.BaseRequestHandler):
12+
13+
def handle(self):
14+
unpacker = Unpacker()
15+
16+
while 1:
17+
data = self.request.recv(4096)
18+
if len(data) == 0:
19+
break
20+
unpacker.feed(data)
21+
for msg in unpacker:
22+
print msg
23+
assert len(msg) == 4
24+
assert msg[0] == 0
25+
assert msg[2] == "echo"
26+
sdata = packs((1, msg[1], None, msg[-1]))
27+
self.request.sendall(sdata)
28+
29+
def serve_background(server, daemon=False):
30+
import threading
31+
t = threading.Thread(target=server.serve_forever)
32+
t.setDaemon(daemon)
33+
t.start()
34+
35+
def serve(daemon=False):
36+
"""Serve echo server in background on localhost.
37+
This returns (server, port). port is number in integer.
38+
39+
To stop, use ``server.shutdown()``
40+
"""
41+
for port in xrange(9000, 10000):
42+
try:
43+
server = SocketServer.TCPServer(('localhost', port), EchoHandler)
44+
serve_background(server, daemon)
45+
return server, port
46+
except Exception:
47+
pass
48+
49+
if __name__ == '__main__':
50+
port = serve(False)
51+
print "Serving on localhost:%d\n" % (port,)

example/test_client.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
from msgpackrpc.client import *
5+
from msgpackrpc.transport import tcp
6+
7+
import echoserver
8+
9+
SERVER = PORT = None
10+
11+
def setup():
12+
global SERVER, PORT
13+
SERVER, PORT = echoserver.serve()
14+
15+
def teardown():
16+
global SERVER, PORT
17+
SERVER.shutdown()
18+
SERVER = PORT = None
19+
20+
def test_client():
21+
client = Client(tcp.TCPTransport, ('localhost', PORT), {})
22+
23+
f1 = client.send_request('echo', 'foo')
24+
f2 = client.send_request('echo', 'bar')
25+
f3 = client.send_request('echo', 'baz')
26+
27+
assert f2.result() == 'bar'
28+
assert f1.result() == 'foo'
29+
assert f3.result() == 'baz'
30+
31+
if __name__ == '__main__':
32+
setup()
33+
test_client()
34+
teardown()

0 commit comments

Comments
 (0)