summaryrefslogtreecommitdiff
path: root/bins_server.py
diff options
context:
space:
mode:
authorSimeon Simeonov2013-01-25 21:54:44 +0100
committerSimeon Simeonov2013-01-25 21:54:44 +0100
commit3fcb4d9fbcc80b7bb2669eb03f838bb15fa9d5c6 (patch)
tree564af611e2d925eb4cf4e781885ce154a712b984 /bins_server.py
parent5c2becae337ea7e2bcebec2912e4626d853b16aa (diff)
Some mess added
Diffstat (limited to 'bins_server.py')
-rwxr-xr-xbins_server.py140
1 files changed, 140 insertions, 0 deletions
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 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import argparse
5import getpass
6import json
7import os
8import sys
9
10import cherrypy
11
12import settings
13
14
15class CustomSocketServer(SocketServer.TCPServer):
16
17 def __init__(self, server_address, RequestHandlerClass, queue):
18 SocketServer.TCPServer.__init__(self,
19 server_address,
20 RequestHandlerClass)
21 self.queue = queue
22
23
24class MyTCPHandler(SocketServer.StreamRequestHandler):
25 """
26 The RequestHandler class for our server.
27
28 It is instantiated once per connection to the server, and must
29 override the handle() method to implement communication to the
30 client.
31 """
32
33 def handle(self):
34
35 data = self.rfile.readline().strip()
36
37 if self.server.queue.qsize() > 3:
38 self.server.queue.get()
39
40 self.server.queue.put(data)
41 #print(self.data)
42
43
44class WebNotifyServer(object):
45
46 def __init__(self, queue):
47 self.queue = queue
48
49 @cherrypy.expose
50 def notifications(self):
51
52 entry_list = list()
53
54 while not self.queue.empty():
55 entry_list.append(self.queue.get(False))
56
57 #print (json.dumps(entry_list, sort_keys=True, indent=4))
58 return json.dumps(entry_list)
59
60
61def socket_server(queue):
62
63 try:
64 server = CustomSocketServer((settings.SOCKET_SERVER_HOST,
65 settings.SOCKET_SERVER_PORT),
66 MyTCPHandler,
67 queue)
68 server.serve_forever()
69
70 except Exception as e:
71 sys.stderr.write("SocketServer error: {0}".format(e))
72 sys.exit(1)
73
74 sys.exit(0)
75
76
77
78def web_server(queue):
79
80 cherrypy.config.update({
81 'server.socket_host': settings.WEB_SERVER_HOST,
82 'server.socket_port': settings.WEB_SERVER_PORT,
83 'server.ssl_module': 'pyopenssl',
84 'server.ssl_certificate': settings.WEB_SERVER_CERT,
85 'server.ssl_private_key': settings.WEB_SERVER_KEY,
86 })
87
88 try:
89
90 cherrypy.quickstart(WebNotifyServer(queue))
91
92 except Exception as e:
93 sys.stderr.write("WebServer error: {0}".format(e))
94 sys.exit(1)
95
96 sys.exit(0)
97
98
99def main():
100
101 parser = argparse.ArgumentParser(description='The following options are available')
102
103
104 parser.add_argument('-d',
105 action='store_true',
106 dest='daemonize',
107 default=False,
108 help='daemonize the server process')
109
110 parser.add_argument('-H', '--hostname',
111 metavar='HOSTNAME',
112 type=str,
113 dest='hostname',
114 default='127.0.0.1',
115 help="Server IP / hostname")
116
117 parser.add_argument('-P', '--port',
118 metavar='PORT',
119 type=int,
120 dest='port',
121 default='9998',
122 help="Server port")
123
124 parser.add_argument('-p', '--password',
125 metavar='PASSWORD',
126 type=str,
127 dest='password',
128 help="Access password for the BOINS server")
129
130 parser.add_argument('-v', '--version',
131 action='version',
132 version='%(prog)s {0}'.format(__VERSION__),
133 help='display program-version and exit')
134
135
136
137 sys.exit(0)
138
139if __name__ == "__main__":
140 main()