public static void IntroduceToServer(long currentEntryId)
        {
            var token       = RandomString(10);
            var ownEndpoint = new IPEndPoint(LunaNetUtils.GetMyAddress(), NetworkMain.Config.Port);

            LunaLog.Log($"[LMP]: Sending NAT introduction to server. Token: {token}");

            var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <MsIntroductionMsgData>();

            msgData.Id               = currentEntryId;
            msgData.Token            = token;
            msgData.InternalEndpoint = Common.StringFromEndpoint(ownEndpoint);
            var introduceMsg = MstSrvMsgFactory.CreateNew <MainMstSrvMsg>(msgData);

            foreach (var masterServer in MasterServerEndpoints.Values.ToArray())
            {
                try
                {
                    var lidgrenMsg = masterServer.CreateMessage((int)introduceMsg.GetMessageSize());
                    introduceMsg.Serialize(lidgrenMsg);

                    masterServer.SendMessage(lidgrenMsg, introduceMsg.NetDeliveryMethod);
                    masterServer.FlushSendQueue();
                }
                catch (Exception e)
                {
                    LunaLog.LogError($"[LMP]: Error connecting to server: {e}");
                }
            }

            introduceMsg.Recycle();
        }
        public static void RequestServerList(NetClient masterServer)
        {
            var msgData    = NetworkMain.CliMsgFactory.CreateNewMessageData <MsRequestServersMsgData>();
            var requestMsg = MstSrvMsgFactory.CreateNew <MainMstSrvMsg>(msgData);

            var lidgrenMsg = masterServer.CreateMessage(requestMsg.GetMessageSize());

            requestMsg.Serialize(lidgrenMsg);

            masterServer.SendMessage(lidgrenMsg, requestMsg.NetDeliveryMethod);
            masterServer.FlushSendQueue();

            requestMsg.Recycle();
        }