summaryrefslogtreecommitdiff
path: root/weechat_notify_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'weechat_notify_server.py')
-rwxr-xr-xweechat_notify_server.py116
1 files changed, 116 insertions, 0 deletions
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 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import json
5import SocketServer
6import os
7import sys
8
9from multiprocessing import Process, Queue
10
11import cherrypy
12
13import settings
14
15
16class CustomSocketServer(SocketServer.TCPServer):
17
18 def __init__(self, server_address, RequestHandlerClass, queue):
19 SocketServer.TCPServer.__init__(self,
20 server_address,
21 RequestHandlerClass)
22 self.queue = queue
23
24
25class MyTCPHandler(SocketServer.StreamRequestHandler):
26 """
27 The RequestHandler class for our server.
28
29 It is instantiated once per connection to the server, and must
30 override the handle() method to implement communication to the
31 client.
32 """
33
34 def handle(self):
35
36 data = self.rfile.readline().strip()
37
38 if self.server.queue.qsize() > 3:
39 self.server.queue.get()
40
41 self.server.queue.put(data)
42 #print(self.data)
43
44
45class WebNotifyServer(object):
46
47 def __init__(self, queue):
48 self.queue = queue
49
50 @cherrypy.expose
51 def notifications(self):
52
53 entry_list = list()
54
55 while not self.queue.empty():
56 entry_list.append(self.queue.get(False))
57
58 #print (json.dumps(entry_list, sort_keys=True, indent=4))
59 return json.dumps(entry_list)
60
61
62def socket_server(queue):
63
64 try:
65 server = CustomSocketServer((settings.SOCKET_SERVER_HOST,
66 settings.SOCKET_SERVER_PORT),
67 MyTCPHandler,
68 queue)
69 server.serve_forever()
70
71 except Exception as e:
72 sys.stderr.write("SocketServer error: {0}".format(e))
73 sys.exit(1)
74
75 sys.exit(0)
76
77
78
79def web_server(queue):
80
81 cherrypy.config.update({
82 'server.socket_host': settings.WEB_SERVER_HOST,
83 'server.socket_port': settings.WEB_SERVER_PORT,
84 'server.ssl_module': 'pyopenssl',
85 'server.ssl_certificate': settings.WEB_SERVER_CERT,
86 'server.ssl_private_key': settings.WEB_SERVER_KEY,
87 })
88
89 try:
90
91 cherrypy.quickstart(WebNotifyServer(queue))
92
93 except Exception as e:
94 sys.stderr.write("WebServer error: {0}".format(e))
95 sys.exit(1)
96
97 sys.exit(0)
98
99
100def main():
101
102 q = Queue()
103
104 socket_server_process = Process(target=socket_server, args=(q,))
105 web_server_process = Process(target=web_server, args=(q,))
106
107 web_server_process.start()
108 socket_server_process.start()
109
110 socket_server_process.join()
111 web_server_process.join()
112
113 sys.exit(0)
114
115if __name__ == "__main__":
116 main()