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 --- bins_server.py | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100755 bins_server.py (limited to 'bins_server.py') diff --git a/bins_server.py b/bins_server.py new file mode 100755 index 0000000..68ccb74 --- /dev/null +++ b/bins_server.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import argparse +import getpass +import json +import os +import sys + +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(): + + parser = argparse.ArgumentParser(description='The following options are available') + + + parser.add_argument('-d', + action='store_true', + dest='daemonize', + default=False, + help='daemonize the server process') + + parser.add_argument('-H', '--hostname', + metavar='HOSTNAME', + type=str, + dest='hostname', + default='127.0.0.1', + help="Server IP / hostname") + + parser.add_argument('-P', '--port', + metavar='PORT', + type=int, + dest='port', + default='9998', + help="Server port") + + parser.add_argument('-p', '--password', + metavar='PASSWORD', + type=str, + dest='password', + help="Access password for the BOINS server") + + parser.add_argument('-v', '--version', + action='version', + version='%(prog)s {0}'.format(__VERSION__), + help='display program-version and exit') + + + + sys.exit(0) + +if __name__ == "__main__": + main() -- cgit v1.3