You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fetapi/webinterface.py

66 lines
2.2 KiB
Python

from bottle import route, get, static_file, run
from bottle.ext.websocket import GeventWebSocketServer
from bottle.ext.websocket import websocket
from os.path import join as pathjoin
from statemachine import InitState, RegisteringState, IdleState, SchelltState, AcceptingState, CallTerminatingState, ForgottenState, BusyBeepingState, CallRunningState, WecktState, ConnectingState, DialingState
import threading
import json
class FeTapWeb():
def __init__(self, config, statemachine_controller):
self.config = config
self.controller = statemachine_controller
self.config = {"host": "0.0.0.0", "port": 8080}
self.websockets = []
route("/")(self.root)
get("/ws", apply=[websocket])(self.ws_connect)
route('/<path:path>')(self.statics)
pass
def root(self):
return "<h1>Hello world!</h1>"
def on_event(self, state, event, evargs, evkwargs):
if event == "incoming_call":
remote_number = self.controller.phone.get_remote_number()
self.send_event({"event": "incoming_call", "data": {"from": remote_number}})
elif event == "nummernschalter_input":
self.send_event({"event": "num_entered", "data": {"number": int(evargs[0])}})
else:
pass
print(state, event, evargs, evkwargs)
def on_transition(self, ostate, nstate, event, evargs, evkwargs):
state_name = nstate.__class__.__name__
data = {"state": state_name}
self.send_event(data)
print(ostate, nstate, event, evargs, evkwargs)
def send_event(self, js_event):
data = json.dumps(js_event)
for ws in self.websockets:
ws.send(data)
def ws_connect(self, ws):
self.websockets.append(ws)
while True:
data = ws.receive()
if data != None:
print(data)
else:
break
self.websockets.remove(ws)
def statics(self, path):
return static_file(path, root="./webinterface")
def start(self):
self.__running = True
w = threading.Thread(target=self.__webthread)
w.start()
def __webthread(self):
run(host=self.config["host"], port=self.config["port"], server=GeventWebSocketServer)