void StartUdpServer() { //create a new server Console.WriteLine("Listening to clients"); // Thread to listen for incomming messages udpListener = new UdpListener(new IPEndPoint(IPAddress.Any, 9601)); Thread listenerThread = new Thread(() => udpListener.Listen()); listenerThread.Start(); // Thread to process the incomming messages (Since network is faster than actual execution of code) HandleData handleData = new HandleData(gameControlCenter); Thread handleDataThread = new Thread(() => handleData.subscribeToEvent(udpListener)); handleDataThread.Start(); // Thread to broadcast gamestate to all players in a fixed interval Broadcaster broadCaster = new Broadcaster(gameControlCenter); Thread broadcasterThread = new Thread(() => broadCaster.BroadcastGameState()); broadcasterThread.Start(); }