public MasterServer(string host, ushort port)
        {
            server = new TCPServer(2048);
            server.Connect(host, port);
            server.textMessageReceived += MessageReceived;

            IsRunning            = true;
            server.disconnected += (sender) =>
            {
                IsRunning = false;
            };

            server.playerDisconnected += (player, sender) =>
            {
                for (int i = 0; i < hosts.Count; i++)
                {
                    if (hosts[i].Player == player)
                    {
                        Log($"Host [{hosts[i].Address}] on port [{hosts[i].Port}] with name [{hosts[i].Name}] removed");
                        hosts.RemoveAt(i);
                        return;
                    }
                }
            };

            Task.Queue(() =>
            {
                while (server.IsBound)
                {
                    server.SendAll(server.GeneratePing());
                    Thread.Sleep(PING_INTERVAL);
                }
            }, PING_INTERVAL);
        }