Advertisement
Guest User

Untitled

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