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);
            }
        }