Beispiel #1
0
	def listen(self):
		while self.run:
			#read socket, write socket, exception socket
			rsocket, wsocket, xsocket = select.select([self.conn], [], [], 0)
			#print incoming messages
			#print(str(len(rsocket)))
			for sock in rsocket:
				data,addr = self.conn.recvfrom(1024)
				if data:
					#print(">>",data.decode())
					try:
						packet = udp_packet.UdpPacket()
						packet.ParseFromString(data)

						if packet.type == 1:
							gs = udp_packet.UdpPacket.GameState()
							gs.ParseFromString(data)


							self.window.fill((0,0,0))
							for k in gs.kweks:
								#print(k.name)
								#print("PPPPPPPPPPPPPos x:",k,position.x,"y:",k.position.y)
								if k.id == self.player.id:
									self.player.CopyFrom(k)
								pygame.draw.rect(self.window,(255,0,0),(k.position.x,k.position.y,k.dimension.width,k.dimension.height))
							pygame.display.update()
					except:
						print(data.decode())
Beispiel #2
0
def otherTurnDrawListener(sock, canvas):
    global addrList
    udpPacket = udp.UdpPacket()
    while timer > 0 and not winner:
        try:
            data, addr = sock.recvfrom(1024)
            udpPacket.ParseFromString(data)
            if udpPacket.type == udp.UdpPacket.DRAW:
                drawPacket = udp.UdpPacket.DrawPacket()
                drawPacket.ParseFromString(data)
                userDraw(canvas, drawPacket.x, drawPacket.y, drawPacket.color,
                         drawPacket.width, drawPacket.start,
                         drawPacket.clear)  # for GUI
                broadcast(sock, drawPacket)
        except:
            pass
Beispiel #3
0
def gameStart(sock, player, canvas):
  global objectToDraw, turn, ipAddressPort, turnPacket, drawFlag, gametime, timer
  udpPacket = udp.UdpPacket()
  turnPacket = udp.UdpPacket.TurnPacket()

  while True:
    data, addr = sock.recvfrom(1024)
    udpPacket.ParseFromString(data)
    if udpPacket.type == udp.UdpPacket.TURN:
      canvas.delete("all")
      ix = None
      iy = None
      turnPacket.ParseFromString(data)
      printScores(turnPacket.scores)
      turn = turnPacket.player
      objectToDraw = turnPacket.object
      if turn == player:
        drawFlag = True
        turnLabel['text'] = "Your turn!"
        wordarea.configure(state="normal")
        wordarea.delete(1.0, tk.END)
        wordarea.insert(tk.END, "DRAW THIS: \n" + objectToDraw)
        wordarea.configure(state="disabled")
        time.sleep(3)
        myTurnListener(sock, canvas)
      else:
        turnLabel['text'] = turn.name + "'s turn!"
        wordarea.configure(state="normal")
        wordarea.delete(1.0, tk.END)
        wordarea.insert(tk.END, "GUESS THE DRAWING!")
        wordarea.configure(state="disabled")
        time.sleep(3)
        othersTurn(sock, canvas, player)
      turn = None
    elif udpPacket.type == udp.UdpPacket.DRAW:
      drawPacket = udp.UdpPacket.DrawPacket()
      drawPacket.ParseFromString(data)
      userDraw(canvas, drawPacket.x, drawPacket.y, drawPacket.color, drawPacket.width, drawPacket.start, drawPacket.clear)
    elif udpPacket.type == udp.UdpPacket.TIME:
      timePacket = udp.UdpPacket.TimePacket()
      timePacket.ParseFromString(data)
      timer = timePacket.time
      gametime['text'] = timer
    elif udpPacket.type == udp.UdpPacket.ENDGAME:
      endgamePacket = udp.UdpPacket.EndgamePacket()
      endgamePacket.ParseFromString(data)
      showGameWinner(endgamePacket.winner) # TODO for GUI (show winner + exit button); passes player name (string); close all windows then exit()
Beispiel #4
0
def winnerListen(sock):
  global timer, winner, gametime
  udpPacket = udp.UdpPacket()
  while True:
    data, addr = sock.recvfrom(1024)
    udpPacket.ParseFromString(data)
    if udpPacket.type == udp.UdpPacket.WINNER:
      winnerPacket = udp.UdpPacket.WinnerPacket()
      winnerPacket.ParseFromString(data)
      winner = winnerPacket.player
      break
    elif udpPacket.type == udp.UdpPacket.TIME:
      timePacket = udp.UdpPacket.TimePacket()
      timePacket.ParseFromString(data)
      timer = timePacket.time
      gametime['text'] = timer
    elif udpPacket.type == udp.UdpPacket.TIMEOUT:
      break
Beispiel #5
0
def otherTurnListener(sock, canvas):
  global winner, timer, gametime
  udpPacket = udp.UdpPacket()
  while True:
    data, addr = sock.recvfrom(1024)
    udpPacket.ParseFromString(data)
    if udpPacket.type == udp.UdpPacket.TIME:
      timePacket = udp.UdpPacket.TimePacket()
      timePacket.ParseFromString(data)
      timer = timePacket.time
      gametime['text'] = timer
    elif udpPacket.type == udp.UdpPacket.DRAW:
      drawPacket = udp.UdpPacket.DrawPacket()
      drawPacket.ParseFromString(data)
      userDraw(canvas, drawPacket.x, drawPacket.y, drawPacket.color, drawPacket.width, drawPacket.start, drawPacket.clear) # for GUI
    elif udpPacket.type == udp.UdpPacket.WINNER:
      winnerPacket = udp.UdpPacket.WinnerPacket()
      winnerPacket.ParseFromString(data)
      winner = winnerPacket.player
      break
    elif udpPacket.type == udp.UdpPacket.TIMEOUT:
      break
Beispiel #6
0
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Bind the socket to the port
server_address = (host,port)
sock.bind(server_address)
print("Server running.")
count = 0
while True:
	#start receiving messages
	data, address = sock.recvfrom(4096)

	if data:
		# create generic UDP Packet
		if address not in adrs:
			# add address to list of clients
			adrs.append(address)
		try:
			packet = udp_packet.UdpPacket()
			packet.ParseFromString(data)

			handlePacket(sock,address,packet)
		except:
			print(";-->",data.decode())
			sendback = "From " + str(address) + ": " + data.decode()
			for a in adrs:
				sock.sendto(sendback.encode(),a)
			if data.decode() == "q":
				break;

sock.close()