Skip to content

Instantly share code, notes, and snippets.

@rdeioris
Created February 12, 2020 16:15
Show Gist options
  • Save rdeioris/4ac673f4c5893c0cc4c2a3436e3bca8f to your computer and use it in GitHub Desktop.
Save rdeioris/4ac673f4c5893c0cc4c2a3436e3bca8f to your computer and use it in GitHub Desktop.
import socket
import struct
class Player:
def __init__(self, id, peer):
self.id = id
self.peer = peer
self.position = (0, 0, 0)
class Server:
def __init__(self, address, port):
self.address = address
self.port = port
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# self.socket.setblocking(False)
self.socket.bind((address, port))
self.players = {}
def tick(self):
try:
packet, sender = self.socket.recvfrom(16)
except:
return
player_id, x, y, z = struct.unpack('<I3f', packet)
if player_id not in self.players:
print('new player discovered with id {} peer {}'.format(
player_id, sender))
self.players[player_id] = Player(player_id, sender)
player = self.players[player_id]
player.peer = sender
player.position = (x, y, z)
packet = struct.pack('<I3f', player.id, *player.position)
for player in self.players.values():
self.socket.sendto(packet, player.peer)
def run(self):
while True:
self.tick()
Server('0.0.0.0', 5000).run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment