Advertisement
Guest User

Untitled

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