public static void RunEvents() { int eventCount = events.Count; for (int i = 0; i < eventCount; i++) { try { if (events[0] == null) { continue; } DataBite p = events[0].data; ClientData client = events[0].client; if (!client.client.Connected) { if (p.VarName == "Disconnect") { RemoveClient(client, p.StringData); } events.RemoveAt(0); continue; } if (p.VarName == "connectToRoom") { //look for a room avalible with the room code in p.gameID and connect the user to it if avalible if (rooms.ContainsKey(p.StringData)) { if (!rooms[p.StringData].Full) { rooms[p.StringData].AddClient(client); client.gameCode = p.StringData; SendPacket(new DataBite() { IsEvent = true, VarName = "RoomJoin", GameID = p.StringData, UserID = rooms[p.StringData].ClientID(client) }, client); events.RemoveAt(0); continue; } } SendPacket(new DataBite() { IsEvent = true, VarName = "RoomJoinFailed" }, client); } else if (p.VarName == "newRoom") { //create a new room with a new ID and connect user to the room string newRoomCode = RoomCodeGenerator(); ServerRoom room = new ServerRoom(); room.AddClient(client); rooms.Add(newRoomCode, room); client.gameCode = newRoomCode; Console.WriteLine("New room:" + newRoomCode); SendPacket(new DataBite() { IsEvent = true, VarName = "RoomHost", GameID = newRoomCode, UserID = rooms[newRoomCode].ClientID(client) }, client); } else if (p.VarName == "serverDisconnect") { SendPacket(new DataBite() { IsEvent = true, VarName = "ServerDisconnect" }, client); RemoveClient(client, "Closed by client"); } else if (p.VarName == "PingCheck") { SendPacket(new DataBite() { IsEvent = true, VarName = "PingCheck" }, client); } else { if (rooms.ContainsKey(p.GameID)) { rooms[p.GameID].SendDataToRoom(p, client); } } } catch (ObjectDisposedException e) { Console.WriteLine("ode"); Console.WriteLine(e.Message); } catch (NullReferenceException e) { Console.WriteLine("nre"); Console.WriteLine(e.Message); } events.RemoveAt(0); } }