Advertisement
Guest User

Untitled

a guest
May 30th, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import tornado.ioloop
  4. import tornado.web
  5. from toredis import Client
  6.  
  7. import sockjs.tornado
  8. from util.utils import AESCipher
  9. from util.coin_api import config
  10.  
  11. import run_celery
  12.  
  13.  
  14. class RouterConnection(sockjs.tornado.SockJSConnection):
  15. participants = set()
  16. user_id = None
  17. user_type = None
  18.  
  19. def on_open(self, info):
  20. # Send that someone joined
  21. print '-----'
  22. self.broadcast(self.participants, "Someone joined.")
  23.  
  24. # Add client to the clients list
  25. self.participants.add(self)
  26.  
  27. def on_message(self, row_message):
  28. message = json.loads(row_message)
  29. data = message['data']
  30. data_type = message['type']
  31. if data_type == 'auth':
  32. # Проверить на существование пользователя
  33. aes = AESCipher()
  34. token = aes.decrypt(data['token']).split('_')
  35. self.user_id = int(token[0])
  36. self.user_type = token[1]
  37. self.email = token[2]
  38. elif data_type == 'new_credit_wallet':
  39. if self.user_id:
  40. self.send_all_managers(message)
  41. message['type'] = 'notify'
  42. data = {
  43. 'html': u'<a href="/admin/credits/%s/">Новая кредитная заявка №%s</a>' %
  44. (data['wallet_id'], data['wallet_id']),
  45. 'text': '',
  46. 'type': 'success',
  47. 'element': '.bottom-left',
  48. 'fadeOut': False,
  49. 'delay': 0
  50. }
  51. message['data'] = data
  52. self.send_all_managers(message)
  53. elif data_type == 'new_withdraw':
  54. if self.user_id:
  55. self.send_all_managers(message)
  56. message['type'] = 'notify'
  57. data = {
  58. 'html': u'<a href="/admin/withdraw/%s/">Новая заявка на вывод №%s</a>' %
  59. (data['withdraw_id'], data['withdraw_id']),
  60. 'text': '',
  61. 'type': 'success',
  62. 'element': '.bottom-left',
  63. 'fadeOut': False,
  64. 'delay': 0
  65. }
  66. message['data'] = data
  67. self.send_all_managers(message)
  68. elif data_type in ['manager_change_credit', 'manager_change_withdraw']:
  69. if self.user_id:
  70. self.send_all_managers(message)
  71.  
  72. def on_close(self):
  73. self.participants.remove(self)
  74.  
  75. def send_all_managers(self, message):
  76. managers = [x for x in self.participants if (x.user_type != 'client' and x.user_id and x.user_id != self.user_id)]
  77. self.broadcast(managers, message)
  78.  
  79.  
  80. def rate_change(message):
  81. if message[0] == 'message':
  82. rate = message[2]
  83. data = {
  84. 'type': 'rate_change',
  85. 'data': json.loads(rate)
  86. }
  87. for client in RouterConnection.participants:
  88. client.broadcast(RouterConnection.participants, data)
  89. break
  90.  
  91.  
  92. def redis_event(message):
  93. if message[0] == 'message':
  94. message_dict = json.loads(message[2])
  95. new_msg = {}
  96. try:
  97. new_msg['type'] = message_dict['event']
  98. except KeyError:
  99. pass
  100. if new_msg:
  101. if new_msg['type'] == 'notify':
  102. data = {
  103. 'text': message_dict['event_text'],
  104. 'event_id': message_dict['event_id'],
  105. 'type': message_dict['event_type'],
  106. 'element': '.bottom-left',
  107. 'fadeOut': False,
  108. 'delay': 0
  109. }
  110. new_msg['data'] = data
  111. send_client_email = True
  112. for participant in RouterConnection.participants:
  113. if participant.user_id == message_dict['cid']:
  114. if new_msg:
  115. participant.send(new_msg)
  116. participant.send({'type': message_dict['chaplin_event'], 'data': message_dict})
  117. if send_client_email:
  118. if 'event_text' in message_dict:
  119. email_message = u"""
  120. %s\n
  121. """ % (message_dict['event_text'])
  122. send_email(
  123. {
  124. 'email': message_dict['user_email'],
  125. 'theme': u'Уведомление LarkBank',
  126. 'message': email_message
  127. }
  128. )
  129.  
  130.  
  131. def send_email(mail):
  132. pass
  133. # run_celery.send_email.apply_async((mail['email'], mail['theme'], mail['message']))
  134.  
  135. if __name__ == "__main__":
  136. import logging
  137. logging.getLogger().setLevel(logging.DEBUG)
  138.  
  139. # 1. Create chat router
  140. ChatRouter = sockjs.tornado.SockJSRouter(RouterConnection, '/sock')
  141.  
  142. # 2. Create Tornado application
  143. app = tornado.web.Application(ChatRouter.urls)
  144.  
  145. # 3. Make Tornado app listen on port 8083
  146. try:
  147. address = config.LOCAL_ADDRESS
  148. except AttributeError:
  149. address = '127.0.0.1'
  150. app.listen(port=8083, address=address)
  151.  
  152. # 4. Start IOLoop
  153. client = Client()
  154. client.connect()
  155. client.subscribe("redis_event", callback=redis_event)
  156.  
  157. client_rate = Client()
  158. client_rate.connect()
  159. client_rate.subscribe("rate_change", callback=rate_change)
  160.  
  161. tornado.ioloop.IOLoop.instance().start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement