Files
addon/mediaserver/WebSocket.py
alfa_addon_10 6318ef0850 - moved elements to compatibility with mediaserver.
- adapted files to mediaserver.
- added mediaserver banner images.
- added mediaserver code.
2017-08-12 23:06:13 +02:00

90 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# HTTPServer
# ------------------------------------------------------------
import os
import random
import traceback
from threading import Thread
import WebSocketServer
from core import jsontools as json
from platformcode import config, platformtools, logger
class HandleWebSocket(WebSocketServer.WebSocket):
def handleMessage(self):
try:
if self.data:
json_message = json.load(str(self.data))
if "request" in json_message:
t = Thread(target=run, args=[self.controller, json_message["request"].encode("utf8")], name=self.ID)
t.setDaemon(True)
t.start()
elif "data" in json_message:
if type(json_message["data"]["result"]) == unicode:
json_message["data"]["result"] = json_message["data"]["result"].encode("utf8")
self.controller.data = json_message["data"]
except:
logger.error(traceback.format_exc())
show_error_message(traceback.format_exc())
def handleConnected(self):
try:
self.ID = "%032x" % (random.getrandbits(128))
from platformcode.controllers.html import html
self.controller = html(self, self.ID)
self.server.fnc_info()
except:
logger.error(traceback.format_exc())
self.close()
def handleClose(self):
self.controller.__del__()
del self.controller
self.server.fnc_info()
port = config.get_setting("websocket.port")
server = WebSocketServer.SimpleWebSocketServer("", int(port), HandleWebSocket)
def start(fnc_info):
server.fnc_info = fnc_info
Thread(target=server.serveforever).start()
def stop():
server.close()
def run(controller, path):
try:
controller.run(path)
except:
logger.error(traceback.format_exc())
show_error_message(traceback.format_exc())
def show_error_message(err_info):
from core import scrapertools
patron = 'File "' + os.path.join(config.get_runtime_path(), "channels", "").replace("\\", "\\\\") + '([^.]+)\.py"'
canal = scrapertools.find_single_match(err_info, patron)
if canal:
platformtools.dialog_ok(
"Se ha producido un error en el canal " + canal,
"Esto puede ser devido a varias razones: \n \
- El servidor no está disponible, o no esta respondiendo.\n \
- Cambios en el diseño de la web.\n \
- Etc...\n \
Comprueba el log para ver mas detalles del error.")
else:
platformtools.dialog_ok(
"Se ha producido un error en Alfa",
"Comprueba el log para ver mas detalles del error.")