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 WebInitState(InitState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebRegisteringState(RegisteringState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebIdleState(IdleState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebSchelltState(SchelltState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebAcceptingState(AcceptingState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebCallTerminatingState(CallTerminatingState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebForgottenState(ForgottenState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebBusyBeepingState(BusyBeepingState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebCallRunningState(CallRunningState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebWecktState(WecktState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebConnectingState(ConnectingState): def __init__(self, web): self.web = web super().__init__(web.controller) class WebDialingState(DialingState): def __init__(self, web): self.web = web super().__init__(web.controller) def on_nummernschalter_input(self, num): super().on_nummernschalter_input(num) self.web.send_event({"event": "num_entered", "data": {"number": int(num)}}) 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('/')(self.statics) pass def root(self): return "

Hello world!

" def publish_status(self): state_name = self.controller.state.__class__.__name__ new_state = eval("Web" + state_name)(self) self.controller.state = new_state data = {"state": state_name} data = json.dumps(data) for ws in self.websockets: ws.send(data) 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)