#coding:utf-8html
import os.pathweb
import tornado.httpserverjson
import tornado.webwebsocket
import tornado.ioloopapp
import tornado.optionssocket
import tornado.httpclienttornado
import tornado.websocketoop
import jsonpost
import hashliburl
import urllib
TOKEN_KEY = 'aadccww'
class IndexHandler(tornado.web.RequestHandler):
def get(self):
#self.write('hello world!')
self.render('index.html')
def post(self):
type = self.get_argument('type')
class MasterHandler(tornado.web.RequestHandler):
def post(self):
response_body = {
'code' : 0,
'msg' : 'success'
}
type = self.get_argument('type')
message = self.get_argument('message')
token = self.get_argument('token')
m2 = hashlib.md5()
md5_str = "|".join((type,message,TOKEN_KEY))
try:
m2.update(md5_str)
except TypeError:
m2.update(md5_str.encode('utf8'))
sign = m2.hexdigest()
if token != sign:
response_body['code'] = 10001
response_body['msg'] = 'token failed'
self.write(response_body)
return
#push to clients
message = json.loads(message)
cid = str(message['cid'])
SocketHandler.send_to_all({'type':type,'message':message,'cid':cid})
self.write(response_body)
class SocketHandler(tornado.websocket.WebSocketHandler):
"""docstring for SocketHandler"""
clients = set()
def check_origin(self, origin):
parsed_origin = urllib.parse.urlparse(origin)
return parsed_origin.netloc.endswith(".xxxx.org")
def send_to_all(message):
if isinstance(message,dict):
message_str = json.dumps(message)
else:
message_str = message
print(message_str)
for c in SocketHandler.clients:
if c.get_argument('cid') == message['cid']:
c.write_message(message_str)
def open(self):
self.write_message(json.dumps({
'type': 'sys',
'message': 'Welcome to WebSocket',
'cid':self.get_argument('cid')
}))
SocketHandler.send_to_all({
'type': 'sys',
'message': str(id(self)) + ' has joined',
'cid':self.get_argument('cid')
})
SocketHandler.clients.add(self)
def on_close(self):
SocketHandler.clients.remove(self)
def on_message(self, message):
#SocketHandler.send_to_all({
# 'type': 'comment',
# 'message': message,
# 'cid':self.get_argument('cid')
#})
pass
##MAIN
if __name__ == '__main__':
app = tornado.web.Application(
handlers=[
(r"/", IndexHandler),
(r"/master", MasterHandler),
(r"/live", SocketHandler),
],
debug = True,
template_path = os.path.join(os.path.dirname(__file__), "templates"),
static_path = os.path.join(os.path.dirname(__file__), "static")
)
app.listen(8000)
tornado.ioloop.IOLoop.instance().start()