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(); }
private static void HandleServersList(NetIncomingMessage msg) { try { var msgDeserialized = MstSrvMsgFactory.Deserialize(msg, LunaTime.UtcNow.Ticks); //Sometimes we receive other type of unconnected messages. //Therefore we assert that the received message data is of MsReplyServersMsgData if (msgDeserialized.Data is MsReplyServersMsgData data) { NetworkServerList.Servers.Clear(); for (var i = 0; i < data.ServersCount; i++) { //Filter servers with diferent version if (data.ServerVersion[i] != LmpVersioning.CurrentVersion) { continue; } PingSystem.QueuePing(data.ExternalEndpoint[i]); NetworkServerList.Servers.TryAdd(data.ExternalEndpoint[i], new ServerInfo { Id = data.Id[i], InternalEndpoint = data.InternalEndpoint[i], ExternalEndpoint = data.ExternalEndpoint[i], Description = data.Description[i], Cheats = data.Cheats[i], ServerName = data.ServerName[i], DropControlOnExit = data.DropControlOnExit[i], MaxPlayers = data.MaxPlayers[i], WarpMode = data.WarpMode[i], TerrainQuality = data.TerrainQuality[i], PlayerCount = data.PlayerCount[i], GameMode = data.GameMode[i], ModControl = data.ModControl[i], DropControlOnExitFlight = data.DropControlOnExitFlight[i], VesselUpdatesSendMsInterval = data.VesselUpdatesSendMsInterval[i], DropControlOnVesselSwitching = data.DropControlOnVesselSwitching[i], ServerVersion = data.ServerVersion[i] }); } } } catch (Exception e) { LunaLog.LogError($"[LMP]: Invalid server list reply msg: {e}"); } }