aboutsummaryrefslogtreecommitdiff
path: root/testserver.py
diff options
context:
space:
mode:
Diffstat (limited to 'testserver.py')
-rw-r--r--testserver.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/testserver.py b/testserver.py
new file mode 100644
index 0000000..ee151ec
--- /dev/null
+++ b/testserver.py
@@ -0,0 +1,50 @@
+import asyncio
+import logging
+import random
+
+
+logging.basicConfig(level = logging.INFO, format = '{asctime} {levelname} {message}', style = '{')
+
+
+class EchoServerProtocol(asyncio.Protocol):
+ def __init__(self, loop = None):
+ self.loop = loop or asyncio.get_event_loop()
+
+ def send(self, data):
+ logging.info(f'Send: {data!r}')
+ self.transport.write(data)
+
+ def connection_made(self, transport):
+ peername = transport.get_extra_info('peername')
+ logging.info('Connection from {}'.format(peername))
+ self.transport = transport
+ self.connected = True
+ asyncio.create_task(self.pingloop())
+
+ async def pingloop(self):
+ while self.connected:
+ self.send(b'PING :' + str(random.randint(0, 10000)).encode('ascii') + b'\r\n')
+ await asyncio.sleep(10)
+
+ def data_received(self, data):
+ logging.info('Data received: {!r}'.format(data))
+
+ def connection_lost(self, exc):
+ logging.info(f'Connection to {self.transport.get_extra_info("peername")} lost')
+ self.connected = False
+
+
+async def main():
+ # Get a reference to the event loop as we plan to use
+ # low-level APIs.
+ loop = asyncio.get_running_loop()
+
+ server = await loop.create_server(
+ lambda: EchoServerProtocol(),
+ '127.0.0.1', 8888)
+
+ async with server:
+ await server.serve_forever()
+
+
+asyncio.run(main())