def newConnection(self, sock): #accept connection connsocket, address = sock.accept() #let the client identify itself user = self.receiveDataSet(connsocket) user = player_pb2.Player() #if username is already taken if user.name in [usr.name for usr in self.peers.values()]: #connection denied self.sendDataSet(connsocket, [tcp_packet_pb2.TcpPacket.ChatPacket().message]) #close connection connsocket.shutdown(socket.SHUT_RDWR) connsocket.close() return #connection confirmed self.sendDataSet(connsocket, [tcp_packet_pb2.TcpPacket.ChatPacket().message]) #store connected client in connections self.connections.append(connsocket) #dictionary with some info on the users self.peers[connsocket] = user #notify peers print(address[0] + " connected") tcp_packet_pb2.TcpPacket.ChatPacket().message = "server > " + user.name + " (" + address[0] + ") joined the chat" log_msg = tcp_packet_pb2.TcpPacket.ChatPacket().message self.transmit(user.channel, log_msg)
def getName(): # Get player name global player, playerList, packetListener, udpSock, gameListener, addrList player = play.Player(name=hname.get()) hostPage.withdraw() # Connect to lobby & get player id player = connectToLobby(sock, player, lobbyId) # Get player list playerList = getPlayerList(sock) addrList = [] nextPort = 1235 # Listen for messages packetListener = threading.Thread(target=receivePackets, args=(sock, player), daemon=True) packetListener.start() # UDP Connection udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpSock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) udpSock.settimeout(0.1) gameListener = threading.Thread(target=gameStart, args=(udpSock, player, canvas), daemon=True) gameListener.start() root.deiconify()
def __init__(self, usr): SERVER = "192.168.202.128" #"202.92.144.45" PORT = 80 #protocol buffer user self.user = player_pb2.Player() self.user.name = usr self.host = SERVER self.port = PORT #inet streaming socket self.csocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.csocket.connect((self.host, self.port)) #let server know who we are self.sendDataSet([self.user]) #server aknowledge connection? response = self.receiveDataSet(self.csocket) response = protobuf.getMsg(response) if response == "n": print("connection refused by server") exit() #thread to handle incoming data threading.Thread(target=self.listen).start() #thread to send data threading.Thread(target=self.send).start()
def getPlayer(): global player, lobby_id, msg, playerList, packetListener, data, max_p player = play.Player(name=playername.get()) lobby_id = CreateLobbyPacket(sock) labelID['text'] = "LOBBY ID:" + lobby_id mainPage.withdraw() player = ConnectPacket(sock, player, lobby_id) playerList = PlayerListPacket() packetListener = threading.Thread(target=RecvPacket, args=(sock, player), daemon=True) packetListener.start()
def getPlayer(): global player, lobby_id, msg, playerList, packetListener, data player = play.Player(name=playername.get()) lobby_id = lobid.get() labelID['text'] = "LOBBY ID:" + lobby_id mainPage.withdraw( ) #Removes the window from the screen, without destroying it. player = ConnectPacket(sock, player, lobby_id) playerList = PlayerListPacket() packetListener = threading.Thread(target=RecvPacket, args=(sock, player), daemon=True) packetListener.start()
def serialize(self, data): player = player_pb2.Player() player.name = data["name"] player.licence = data["licence"] player.woman = data["gender"] == 'W' single = player.results.add() single.sport = 'single' single.points = data["single"]["point"] single.position = data["single"]["rank"] double = player.results.add() double.sport = 'double' double.points = data["double"]["point"] double.position = data["double"]["rank"] mx = player.results.add() mx.sport = 'mx' mx.points = data["mx"]["point"] mx.position = data["mx"]["rank"] return b64encode(player.SerializeToString())
def getName(): # Get player name global player, playerList, packetListener, udpSock, gameListener, lobbyId, portPacket player = play.Player( name = hname.get() ) lobbyId = the_id.get() labelID['text'] = "LOBBY ID: " + lobbyId hostPage.withdraw() # Connect to lobby & get player id player = connectToLobby(sock, player, lobbyId) # Get player list playerList = getPlayerList(sock) # Listen for messages packetListener = threading.Thread(target=receivePackets, args=(sock, player), daemon=True) packetListener.start() # UDP Connection udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) portPacket = udp.UdpPacket.PortPacket(type=udp.UdpPacket.PORT) udpSock.sendto(portPacket.SerializeToString(), ('206.189.47.94', 13000)) gameListener = threading.Thread(target=gameStart, args=(udpSock, player, canvas), daemon=True) gameListener.start() root.deiconify()
HOST = '202.92.144.45' PORT = 80 def Menu(): print("[1] - Create Lobby") print("[2] - Connect") print("[3] - Disconnect") x = input("choice: ") return x choice = Menu() if choice == "1": host = player_pb2.Player() # create object of player host.name = "ganoya" host.id = "1" createLobby = tcp_packet_pb2.TcpPacket.CreateLobbyPacket() # create object create lobby createLobby.type = tcp_packet_pb2.TcpPacket.CREATE_LOBBY createLobby.max_players = 4 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST,PORT)) s.sendall(createLobby.SerializeToString()) data = s.recv(1024) createLobby.ParseFromString(data) print(createLobby) elif choice == "2": client = player_pb2.Player() # create object of player
"woman": False, "single": { "pts": 882.0, "pos": 387 }, "double": { "pts": 1000.0, "pos": 369 }, "mx": { "pts": 667.0, "pos": 464 } } player = player_pb2.Player() player.name = data["name"] player.licence = data["licence"] player.woman = data["woman"] single = player.results.add() single.sport = 'single' single.points = data["single"]["pts"] single.position = data["single"]["pos"] double = player.results.add() double.sport = 'double' double.points = data["single"]["pts"] double.position = data["single"]["pos"] mx = player.results.add() mx.sport = 'mx' mx.points = data["single"]["pts"] mx.position = data["single"]["pos"]
def main(): lobby_id = "AB2L" # custom lobby # Socket to be used sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((SERVER, PORT)) player_list_packet = tcp_packet.PlayerListPacket() player_list_packet.type = tcp_packet.PLAYER_LIST send_to_server(sock, player_list_packet) player_list = player_list_packet.player_list no_of_players = len(player_list) # ----------If custom lobby won't be used -------- # if no_of_players == 0: # # Send a lobby packet # lobby_packet = tcp_packet.CreateLobbyPacket() # lobby_packet.type = tcp_packet.CREATE_LOBBY # lobby_packet.max_players = 3 # lobby_id = send_to_server(sock, lobby_packet) # returns lobby id # lobby_id = str(lobby_id) # print("Lobby id: " + lobby_id) # print("Server can hold up to " + str(lobby_packet.max_players) + " players.") # if lobby_id == -1: # print("No lobby has been created.") # return # Create a client ('host' is just the first player to connect) name = raw_input("Enter name: ") client = player_pb2.Player() client.name = name # Connect now the client to server connect_to_server(client, lobby_id) # Create chat packet chat_packet = tcp_packet.ChatPacket() chat_packet.type = tcp_packet.CHAT chat_packet.player.name = client.name while True: received = sock.recv(1024) print(received) message = raw_input(name + ": ") chat_packet.message = message send_to_server(sock, chat_packet) if (message == "bye"): print(player_list) disconnect_packet = tcp_packet.DisconnectPacket() disconnect_packet.player.name = name disconnect_packet.update = tcp_packet.DisconnectPacket.NORMAL return sock.close()
import player_pb2 PB_FILE_PATH = 'player.pb' JSON_FILE_PATH = 'player.json' players = player_pb2.Players() player1 = player_pb2.Player() player1.id = '1' player1.name = '1' for i in range(10): player1.scores.append(i) player2 = player_pb2.Player() player2.id = '1' player2.name = '1' for i in range(10, 20): player2.scores.append(i) players.players.append(player1) players.players.append(player2) # 以二进制形式保存 f = open(PB_FILE_PATH, "wb") f.write(players.SerializeToString()) f.close() # 读players players = player_pb2.Players() f = open(PB_FILE_PATH, "rb") players.ParseFromString(f.read()) f.close() from google.protobuf.json_format import MessageToJson # 关键 json = MessageToJson(players)