http endpoint for web client

main
sidekek 4 years ago
parent a53931d994
commit 5abbe15a6c
  1. 27
      server/http_server.py
  2. 2
      server/manager_server.py
  3. 26
      server/server.py

@ -0,0 +1,27 @@
from aiohttp import web
import asyncio
import time
import alarm
import json
class http_endpoint:
def __init__(self, server):
self.parent = server
self.app = web.Application()
self.app.add_routes([web.get("/r/tasks", self.rtasks),
web.get("/w/task", self.wtasks)])
async def rtasks(self, request):
resp = []
for task in self.parent.tasks:
resp.append({"name":task.name, "time":task.time})
return web.Response(text=json.dumps(resp))
async def wtasks(self, request):
name = request.query.get("name")
try:
tim = float(request.query.get("time"))
except:
return web.Response(status=422, text="400 bad arg")
if name == "": name = "unnamed"
if tim == 0.0: tim = time.time()
self.parent.tasks.append(alarm.alarm(tim, name))
self.rtasks(request)
return web.Response(text="done")

@ -1,4 +1,4 @@
import server
s = server.server("192.168.1.2", 1337)
s = server.server("0.0.0.0", 1337)
s.run()

@ -3,6 +3,9 @@ import client
import threading
import time
import alarm
import http_server
import asyncio
from aiohttp import web
class server:
def __init__(self, address, port):
@ -10,6 +13,7 @@ class server:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((address, port))
self.sock.listen()
self.tasks = []
def __del__(self):
for c in self.clients:
del c
@ -17,13 +21,20 @@ class server:
t = threading.Thread(target=self.handle_connections, args=())
t.start()
ta = alarm.alarm(time.time() + 30)
he = http_server.http_endpoint(self)
runner = web.AppRunner(he.app)
het = threading.Thread(target=self.launch_http_server, args=(runner,))
het.start()
self.tasks.append(alarm.alarm(time.time() + 30))
while True:
time.sleep(10)
if ta.check():
for c in self.clients:
c.sock.sendall("STA".encode("ASCII"))
for task in self.tasks:
if task.check():
for c in self.clients:
c.sock.sendall("STA".encode("ASCII"))
def handle_connections(self):
while True:
(client_sock, address) = self.sock.accept()
@ -34,3 +45,10 @@ class server:
t = threading.Thread(target=c.run, args=())
t.start()
def launch_http_server(self, app_runner):
event_loop = asyncio.new_event_loop()
asyncio.set_event_loop(event_loop)
event_loop.run_until_complete(app_runner.setup())
endpoint = web.TCPSite(app_runner, "0.0.0.0", 8080)
event_loop.run_until_complete(endpoint.start())
event_loop.run_forever()

Loading…
Cancel
Save