-
Notifications
You must be signed in to change notification settings - Fork 0
/
Server.py
57 lines (40 loc) · 1.48 KB
/
Server.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
__author__ = 'thachnguyen'
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.web.websockets import WebSocketsProtocolWrapper, WebSocketsResource, lookupProtocolForFactory
from twisted.web.server import Site
from twisted.internet import reactor
TCP_PORT = 6000
WEBSOCKET_PORT = 6060
HTTP_PORT = 6080
class serverProtocol(LineReceiver):
def __init__(self, factory):
self.factory = factory
def dataReceived(self, data):
print data
for web_client in self.factory.Webclients:
web_client.sendLine(data)
self.sendLine(data)
def connectionMade(self):
if isinstance(self.transport, WebSocketsProtocolWrapper):
self.factory.Webclients.append(self) # Add Web client to Clients param
class serverFactoryProtocol(Factory):
service = None
Webclients = []
def buildProtocol(self, addr):
print "Connect from client: ", addr
return serverProtocol(self)
def run():
factory = serverFactoryProtocol()
reactor.listenTCP(TCP_PORT, factory)
# Config HTTP
from http import app
from twisted.web.wsgi import WSGIResource
resource = WSGIResource(reactor, reactor.getThreadPool(), app)
reactor.listenTCP(HTTP_PORT, Site(resource))
# Config Websocket
ws_resource = WebSocketsResource(lookupProtocolForFactory(factory))
reactor.listenTCP(WEBSOCKET_PORT, Site(ws_resource))
reactor.run()
if __name__ == '__main__':
run()