Advertisement
Guest User

Untitled

a guest
Jan 11th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1.  
  2.  
  3. from flask import *
  4. import socket
  5. from json import *
  6. from threading import Thread
  7. from random import randint
  8.  
  9. data_size = 1024
  10. port = 9090
  11. ip = '127.0.0.1'
  12. listens = 10
  13. app = Flask(__name__)
  14.  
  15. def send_message(message):
  16. try:
  17. for i in Users:
  18. Users[i].conn.send(json.dumps({"message": message}).encode('utf-8'))
  19. except Exception:
  20. pass
  21.  
  22. class User():
  23. def __init__(self):
  24. self.__name = ""
  25. self.__login = ""
  26. self.__password = ""
  27. self.conn = None
  28.  
  29. def __init__(self, name, login, password):
  30. self.__name = name
  31. self.__login = login
  32. self.__password = password
  33. self.__isActive = True
  34.  
  35. def get_name(self):
  36. return self.__name
  37.  
  38. def get_login(self):
  39. return self.__login
  40.  
  41. def get_password(self):
  42. return self.__password
  43.  
  44. class getting_message(Thread):
  45. def __init__(self, conn, login):
  46. Thread.__init__(self)
  47. self.conn = conn
  48. self.login = login
  49.  
  50.  
  51. def run(self):
  52. while True:
  53. try:
  54. data = self.conn.recv(data_size)
  55. print(data)
  56. data = json.loads(data.decode('utf-8'))
  57. if data['type'] == 'message_chat':
  58. send_message(data['message'])
  59. except JSONDecodeError:
  60. pass
  61.  
  62. class take_login(Thread):
  63. def __init__(self, conn):
  64. Thread.__init__(self)
  65. self.conn = conn
  66. self.login = ''
  67.  
  68. def run(self):
  69. while True:
  70. try:
  71. data = self.conn.recv(data_size)
  72. #print(data)
  73. data = json.loads(data.decode('utf-8'))['login']
  74. if data in Users:
  75. print('here')
  76. self.login = data
  77. Users[data].conn = self.conn
  78. break
  79. except JSONDecodeError:
  80. pass
  81. gm = getting_message(self.conn, self.login)
  82. gm.start()
  83.  
  84.  
  85.  
  86.  
  87. class finding_connections(Thread):
  88. def __init__(self, sock):
  89. Thread.__init__(self)
  90. self.sock = sock
  91.  
  92. def run(self):
  93. while True:
  94. try:
  95. conn, addr = sock.accept()
  96. tl = take_login(conn)
  97. #print(addr, "here")
  98. tl.start()
  99. except Exception:
  100. pass
  101.  
  102.  
  103. Users = dict()
  104.  
  105. sock = socket.socket()
  106. sock.bind((ip, port + 1))
  107. sock.listen(listens)
  108. fc = finding_connections(sock)
  109. fc.start()
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116. class Room(Thread):
  117. def __init__(self, RoomName, RoomPassword, login):
  118. Thread.__init__(self)
  119. self.__RoomName = RoomName
  120. self.__RoomPassword = RoomPassword
  121. self.__Players = [Users[login]]
  122. self.__id = randint(0, 9999999)
  123.  
  124. def get_id(self):
  125. return self.__id
  126.  
  127. def get_players(self):
  128. return self.__Players
  129.  
  130. def add_players(self, login):
  131. self.__Players.append(Users[login])
  132.  
  133. def run(self):
  134. conn, addr = sock.accept()
  135.  
  136. while True:
  137. try:
  138. data = conn.recv(1024)
  139. conn.send(data + "hui".encode('utf-8'))
  140. except Exception as inst:
  141. pass
  142.  
  143. Rooms = dict()
  144.  
  145. @app.route('/registration', methods=['GET'])
  146. def registration():
  147. try:
  148. login = request.values['login']
  149. name = request.values.get('name')
  150. password = request.values.get('password')
  151. print(login)
  152. if login in Users:
  153. return json.dumps({"status": False, "error": "Login has already in use"})
  154. user = User(name, login, password)
  155. Users[login] = user
  156. return json.dumps({"status": True})
  157. except Exception:
  158. return json.dumps({"status": False, "error": "something error"})
  159.  
  160.  
  161.  
  162. @app.route('/authorization', methods=['GET'])
  163. def authorization():
  164. try:
  165. login = request.values['login']
  166. password = request.values['password']
  167. if login not in Users:
  168. return json.dumps({"status": False, "error": "User not exist"})
  169. '''if Users[login].get_isActive():
  170. return json.dumps({"status": False, "error": "Accaunt has already in use"})'''
  171. if Users[login].get_password() != password:
  172. return json.dumps({"status": False, "error": "incorrect password"})
  173. return json.dumps({"status": True})
  174. except:
  175. return json.dumps({"status": False, "error": "something error"})
  176.  
  177. @app.route('/CreateRoom', methods=['GET'])
  178. def CreateRoom():
  179. try:
  180. login = request.values['login']
  181. RoomName = request.values['RoomName']
  182. RoomPassword = request.values['password']
  183. room = Room(RoomName, RoomPassword, login)
  184. Rooms[room.get_id()] = room
  185. room.start()
  186. return json.dumps({"status": True, "RoomID": room.get_id()})
  187. except:
  188. return json.dumps({"status": False, "error": "something error"})
  189.  
  190. @app.route('/ConnectToRoom', methods=['GET'])
  191. def ConnectToRoom():
  192. try:
  193. login = request.values['login']
  194. RoomID = int(request.values['RoomID'])
  195. print(Rooms)
  196. if RoomID in Rooms:
  197. Rooms[RoomID].add_players(login)
  198. return json.dumps({"status" : True})
  199. else:
  200. return json.dumps({"status": False, "error": "Room with this ID not exist"})
  201. except Exception:
  202. return json.dumps({"status": False, "error": "something error"})
  203.  
  204. @app.route('/GetPlayersInRoom', methods=['GET'])
  205. def GetPlayersInRoom():
  206. try:
  207. RoomID = int(request.values['RoomID'])
  208. d = dict()
  209. d["status"] = True
  210. d["players"] = []
  211. if RoomID in Rooms:
  212. for i in Rooms[RoomID].get_players():
  213. d["players"].append(i.get_login())
  214. return json.dumps(d)
  215. else:
  216. return json.dumps({"status": False, "error": "Room with this ID not exist"})
  217. except Exception:
  218. return json.dumps({"status": False, "error": "something error"})
  219.  
  220.  
  221. if __name__ == '__main__':
  222. app.run(host=ip, port=port)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement