forked from barmalei/zebkit
/
startup.py
executable file
·130 lines (101 loc) · 3.92 KB
/
startup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
from __future__ import with_statement
import os, xmlrpclib, datetime, sys, SocketServer
sys.path.insert(0, os.path.join(os.path.normpath(os.path.dirname(os.path.abspath(sys.argv[0]))), 'lib'))
from DocXMLRPCServer import DocXMLRPCServer, DocXMLRPCRequestHandler
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
from SimpleHTTPServer import SimpleHTTPRequestHandler
from SocketServer import TCPServer
from threading import Thread
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCRequestHandler
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCDispatcher
class XRPCRequestHandler(DocXMLRPCRequestHandler, SimpleHTTPRequestHandler):
rpc_paths = ('/xrpc',)
# Implementing HTTP handshake
def do_OPTIONS(self):
self.send_response(200)
self.send_header("Access-Control-Allow-Methods", "POST,GET,OPTIONS")
self.send_header("Access-Control-Allow-Headers", "Content-Type")
self.send_header("Content-length", "0")
self.end_headers()
# work as HTTP server if GET
def do_GET(self):
# return "!!!!"
return SimpleHTTPRequestHandler.do_GET(self)
# Part of HTTP handshake
def end_headers(self):
self.send_header("Access-Control-Allow-Origin", "*")
DocXMLRPCRequestHandler.end_headers(self)
class JRPCRequestHandler(SimpleJSONRPCRequestHandler, SimpleHTTPRequestHandler):
rpc_paths = ('/jrpc')
# Implementing HTTP handshake
def do_OPTIONS(self):
self.send_response(200)
self.send_header("Access-Control-Allow-Methods", "POST,GET,OPTIONS")
self.send_header("Access-Control-Allow-Headers", "Content-Type")
self.send_header("Content-length", "0")
self.end_headers()
# work as HTTP server if GET
def do_GET(self):
return SimpleHTTPRequestHandler.do_GET(self)
# Part of HTTP handshake
def end_headers(self):
self.send_header("Access-Control-Allow-Origin", "*")
SimpleJSONRPCRequestHandler.end_headers(self)
class JRPCServer(TCPServer, SimpleJSONRPCDispatcher):
def __init__(self, addr=("localhost", 8080)):
self.logRequests = False
SimpleJSONRPCDispatcher.__init__(self, encoding=None)
TCPServer.__init__(self, addr, JRPCRequestHandler)
def summ(a, b):
print("%d + %d" % (a, b))
return a + b
def echo(s):
print("echo %s" % s)
return s
def fault(s):
raise "Exception"
def wdate(s):
raise "Exception"
def struct(s1, s2):
r = {};
print(s1);
r["a"] = s1
r["b"] = [s1, s2]
r["c"] = True
print(r);
return r
def arr():
return [ 1, [2, 3], [ "ABC", [ {"k":"MMM"} ], True ], [] ]
def reg_srv_methods(server):
server.register_function(summ, "summ")
server.register_function(echo, "echo")
server.register_function(fault, "fault")
server.register_function(struct, "struct")
server.register_function(arr, "arr")
def START(host = "localhost", port = 8080):
class AsyncDocXMLRPCServer(SocketServer.ThreadingMixIn, DocXMLRPCServer): pass
class AsyncJRPCServer(SocketServer.ThreadingMixIn, JRPCServer): pass
server1 = DocXMLRPCServer((host, port), XRPCRequestHandler)
# server2 = JRPCServer((host, port + 1))
# reg_srv_methods(server1);
# reg_srv_methods(server2);
# class ST(Thread):
# def __init__(self, server, msg):
# Thread.__init__(self);
# self.daemon = True
# self.server = server
# self.msg = msg
# self.start()
# def run(self):
# self.server.serve_forever()
print("Start Zebra demo HTTP Server %s:%d" % (host, port))
server1.serve_forever()
# ST(server1, "Start XML-RPC Server %s:%d" % (host, port))
# print("Start JSON-RPC Server %s:%d" % (host, port + 1))
# server2.serve_forever()
if __name__ == '__main__':
START()
#START(host="10.26.214.170")
#START(host="192.168.1.16")
#START("192.168.178.11")