aboutsummaryrefslogtreecommitdiff
path: root/src_py/hatter/server.py
diff options
context:
space:
mode:
authorbozo.kopic <bozo.kopic@gmail.com>2017-08-16 15:11:21 +0200
committerbozo.kopic <bozo.kopic@gmail.com>2017-08-16 15:11:21 +0200
commit28446d95471e74de364b53c3f24d6182fddac0e0 (patch)
tree5cf96e6d26a8e27aef74464c6a0a3b0ab191ffff /src_py/hatter/server.py
parent1b6052d7e74d90806650ff09153c581e7ae851eb (diff)
backend
Diffstat (limited to 'src_py/hatter/server.py')
-rw-r--r--src_py/hatter/server.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/src_py/hatter/server.py b/src_py/hatter/server.py
new file mode 100644
index 0000000..894d101
--- /dev/null
+++ b/src_py/hatter/server.py
@@ -0,0 +1,46 @@
+import asyncio
+import aiohttp.web
+
+
+async def create_web_server(backend, host, port, webhook_path, web_path):
+ srv = WebServer()
+ srv._backend = backend
+ srv._app = aiohttp.web.Application()
+ srv._app.router.add_route(
+ 'GET', '/', lambda req: aiohttp.web.HTTPFound('/index.html'))
+ srv._app.router.add_route('*', '/ws', srv._ws_handler)
+ srv._app.router.add_route('POST', webhook_path, srv._webhook_handler)
+ srv._app.router.add_static('/', web_path)
+ srv._app_handler = srv._app.make_handler()
+ srv._srv = await asyncio.get_event_loop().create_server(
+ srv._app_handler, host=host, port=port)
+ return srv
+
+
+class WebServer:
+
+ async def async_close(self):
+ self._srv.close()
+ await self._srv.wait_closed()
+ await self._app.shutdown()
+ await self._app_handler.finish_connections(0)
+ await self._app.cleanup()
+
+ async def _ws_handler(self, request):
+ ws = aiohttp.web.WebSocketResponse()
+ await ws.prepare(request)
+ client = Client(self._backend, ws)
+ await client.run()
+ return ws
+
+ async def _webhook_handler(self, request):
+ pass
+
+
+class Client:
+
+ def __init__(self, backend, ws):
+ pass
+
+ async def run(self):
+ pass