Removed the need to ping the target server first. May reduce load times for high latency people

This commit is contained in:
Bob Da Ross
2021-06-16 23:45:12 -05:00
parent e9cac15a3a
commit 1a1a47d07a
5 changed files with 50 additions and 38 deletions

View File

@@ -13,7 +13,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
public class ServerPing
{
private static WorldRequest Request;
private static WorldRequest Request { get { return Transfer.WorldRequest; } }
private static Transfer Transfer;
@@ -21,7 +21,6 @@ namespace SeamlessClientPlugin.SeamlessTransfer
{
// We need to first ping the server to make sure its running and so we can get a connection
Transfer = ClientTransfer;
Request = Transfer.WorldRequest;
if (Transfer.TargetServerID == 0)
@@ -30,40 +29,24 @@ namespace SeamlessClientPlugin.SeamlessTransfer
return;
}
MyGameServerItem E = new MyGameServerItem();
E.ConnectionString = Transfer.IPAdress;
E.SteamID = Transfer.TargetServerID;
E.Name = Transfer.ServerName;
SeamlessClient.TryShow("Beginning Redirect to server: " + Transfer.TargetServerID);
MyGameService.OnPingServerResponded += PingResponded;
MyGameService.OnPingServerFailedToRespond += FailedToRespond;
MyGameService.PingServer(Transfer.IPAdress);
}
private static void PingResponded(object sender, MyGameServerItem e)
{
//If server ping was successful we need to begin the switching proccess
UnRegisterEvents();
SeamlessClient.TryShow($"{e.Name} was successfully pinged!");
SwitchServers Switcher = new SwitchServers(e, Request.DeserializeWorldData());
SwitchServers Switcher = new SwitchServers(E, Request.DeserializeWorldData());
Switcher.BeginSwitch();
// LoadServer.LoadWorldData(e, Request.DeserializeWorldData());
}
// MyGameService.OnPingServerResponded += PingResponded;
//MyGameService.OnPingServerFailedToRespond += FailedToRespond;
private static void FailedToRespond(object sender, EventArgs e)
{
// If the target server failed to respond, we need to exit/return to menu
UnRegisterEvents();
}
private static void UnRegisterEvents()
{
//Un-register ping events
MyGameService.OnPingServerResponded -= PingResponded;
MyGameService.OnPingServerFailedToRespond -= FailedToRespond;
//MyGameService.PingServer(Transfer.IPAdress);
}
}
}

View File

@@ -15,9 +15,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VRage;
using VRage.Game;
using VRage.Game.ModAPI;
using VRage.GameServices;
using VRage.Steam;
using VRage.Utils;
using VRageMath;
using VRageRender;
@@ -69,15 +71,24 @@ namespace SeamlessClientPlugin.SeamlessTransfer
MyMultiplayer.Static = Utility.CastToReflected(instance, Patches.ClientType);
MyMultiplayer.Static.ExperimentalMode = true;
// Set the new SyncLayer to the MySession.Static.SyncLayer
Patches.MySessionLayer.SetValue(MySession.Static, MyMultiplayer.Static.SyncLayer);
SeamlessClient.TryShow("Successfully set MyMultiplayer.Static");
MyHud.Chat.RegisterChat(MyMultiplayer.Static);
Sync.Clients.SetLocalSteamId(Sync.MyId, false, MyGameService.UserName);
Sync.Players.RegisterEvents();
}
private void OnJoinEvent(object sender, VRage.Network.JoinResultMsg e)
{
ForceClientConnection();
@@ -90,8 +101,11 @@ namespace SeamlessClientPlugin.SeamlessTransfer
private void ForceClientConnection()
{
// Set the new SyncLayer to the MySession.Static.SyncLayer
Patches.MySessionLayer.SetValue(MySession.Static, MyMultiplayer.Static.SyncLayer);
MyHud.Chat.RegisterChat(MyMultiplayer.Static);
MyMultiplayer.Static.OnSessionReady();
LoadConnectedClients();
LoadOnlinePlayers();
@@ -289,7 +303,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
}
//typeof(MyGuiScreenTerminal).GetMethod("CreateTabs")
MyMultiplayer.Static.OnSessionReady();
MySession.Static.LoadDataComponents();
//MyGuiSandbox.LoadData(false);
//MyGuiSandbox.AddScreen(MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.HUDScreen));
@@ -299,7 +313,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
SeamlessClient.TryShow("OnlinePlayers: " + MySession.Static.Players.GetOnlinePlayers().Count);
SeamlessClient.TryShow("Loading Complete!");
MyMultiplayer.Static.OnSessionReady();
//Recreate all controls... Will fix weird gui/paint/crap
MyGuiScreenHudSpace.Static.RecreateControls(true);
}