From 3fcb4d9fbcc80b7bb2669eb03f838bb15fa9d5c6 Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Fri, 25 Jan 2013 21:54:44 +0100 Subject: Some mess added --- weechat_notify_server.py | 116 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 weechat_notify_server.py (limited to 'weechat_notify_server.py') diff --git a/weechat_notify_server.py b/weechat_notify_server.py new file mode 100755 index 0000000..35d4f42 --- /dev/null +++ b/weechat_notify_server.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import json +import SocketServer +import os +import sys + +from multiprocessing import Process, Queue + +import cherrypy + +import settings + + +class CustomSocketServer(SocketServer.TCPServer): + + def __init__(self, server_address, RequestHandlerClass, queue): + SocketServer.TCPServer.__init__(self, + server_address, + RequestHandlerClass) + self.queue = queue + + +class MyTCPHandler(SocketServer.StreamRequestHandler): + """ + The RequestHandler class for our server. + + It is instantiated once per connection to the server, and must + override the handle() method to implement communication to the + client. + """ + + def handle(self): + + data = self.rfile.readline().strip() + + if self.server.queue.qsize() > 3: + self.server.queue.get() + + self.server.queue.put(data) + #print(self.data) + + +class WebNotifyServer(object): + + def __init__(self, queue): + self.queue = queue + + @cherrypy.expose + def notifications(self): + + entry_list = list() + + while not self.queue.empty(): + entry_list.append(self.queue.get(False)) + + #print (json.dumps(entry_list, sort_keys=True, indent=4)) + return json.dumps(entry_list) + + +def socket_server(queue): + + try: + server = CustomSocketServer((settings.SOCKET_SERVER_HOST, + settings.SOCKET_SERVER_PORT), + MyTCPHandler, + queue) + server.serve_forever() + + except Exception as e: + sys.stderr.write("SocketServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + + +def web_server(queue): + + cherrypy.config.update({ + 'server.socket_host': settings.WEB_SERVER_HOST, + 'server.socket_port': settings.WEB_SERVER_PORT, + 'server.ssl_module': 'pyopenssl', + 'server.ssl_certificate': settings.WEB_SERVER_CERT, + 'server.ssl_private_key': settings.WEB_SERVER_KEY, + }) + + try: + + cherrypy.quickstart(WebNotifyServer(queue)) + + except Exception as e: + sys.stderr.write("WebServer error: {0}".format(e)) + sys.exit(1) + + sys.exit(0) + + +def main(): + + q = Queue() + + socket_server_process = Process(target=socket_server, args=(q,)) + web_server_process = Process(target=web_server, args=(q,)) + + web_server_process.start() + socket_server_process.start() + + socket_server_process.join() + web_server_process.join() + + sys.exit(0) + +if __name__ == "__main__": + main() -- cgit v1.3