fixes for nexus v3
This commit is contained in:
@@ -1,77 +1,67 @@
|
||||
using ProtoBuf;
|
||||
using Sandbox.Engine.Networking;
|
||||
using Sandbox.Game.World;
|
||||
using Sandbox.ModAPI;
|
||||
using SeamlessClientPlugin.SeamlessTransfer;
|
||||
using SeamlessClientPlugin.Utilities;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SeamlessClientPlugin.Messages
|
||||
namespace SeamlessClientPlugin.Messages;
|
||||
|
||||
public enum ClientMessageType
|
||||
{
|
||||
public enum ClientMessageType
|
||||
{
|
||||
FirstJoin,
|
||||
TransferServer,
|
||||
OnlinePlayers,
|
||||
}
|
||||
|
||||
|
||||
[ProtoContract]
|
||||
public class ClientMessage
|
||||
{
|
||||
[ProtoMember(1)]
|
||||
public ClientMessageType MessageType;
|
||||
[ProtoMember(2)]
|
||||
public byte[] MessageData;
|
||||
[ProtoMember(3)]
|
||||
public long IdentityID;
|
||||
[ProtoMember(4)]
|
||||
public ulong SteamID;
|
||||
[ProtoMember(5)]
|
||||
public string PluginVersion = "0";
|
||||
|
||||
public ClientMessage(ClientMessageType Type)
|
||||
{
|
||||
MessageType = Type;
|
||||
|
||||
if (MyAPIGateway.Multiplayer != null && !MyAPIGateway.Multiplayer.IsServer)
|
||||
{
|
||||
if (MyAPIGateway.Session.LocalHumanPlayer == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IdentityID = MySession.Static?.LocalHumanPlayer?.Identity?.IdentityId ?? 0;
|
||||
SteamID = MySession.Static?.LocalHumanPlayer?.Id.SteamId ?? 0;
|
||||
PluginVersion = SeamlessClient.Version;
|
||||
}
|
||||
}
|
||||
|
||||
public ClientMessage() { }
|
||||
|
||||
public void SerializeData<T>(T Data)
|
||||
{
|
||||
MessageData = Utility.Serialize(Data);
|
||||
}
|
||||
|
||||
|
||||
public Transfer GetTransferData()
|
||||
{
|
||||
if (MessageData == null)
|
||||
return default(Transfer);
|
||||
|
||||
return Utility.Deserialize<Transfer>(MessageData);
|
||||
|
||||
}
|
||||
|
||||
public OnlinePlayersMessage GetOnlinePlayers()
|
||||
{
|
||||
if (MessageData == null)
|
||||
return default(OnlinePlayersMessage);
|
||||
|
||||
|
||||
OnlinePlayersMessage msg = Utility.Deserialize<OnlinePlayersMessage>(MessageData);
|
||||
return msg;
|
||||
}
|
||||
|
||||
}
|
||||
FirstJoin,
|
||||
TransferServer,
|
||||
OnlinePlayers
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class ClientMessage
|
||||
{
|
||||
[ProtoMember(1)] public ClientMessageType MessageType;
|
||||
|
||||
[ProtoMember(2)] public byte[] MessageData;
|
||||
|
||||
[ProtoMember(3)] public long IdentityId;
|
||||
|
||||
[ProtoMember(4)] public ulong SteamId;
|
||||
|
||||
[ProtoMember(5)] public string PluginVersion = "0";
|
||||
|
||||
[ProtoMember(6)] public string NexusVersion;
|
||||
|
||||
public ClientMessage(ClientMessageType type)
|
||||
{
|
||||
MessageType = type;
|
||||
|
||||
IdentityId = MySession.Static?.LocalHumanPlayer?.Identity?.IdentityId ?? 0;
|
||||
SteamId = MyGameService.UserId;
|
||||
PluginVersion = SeamlessClient.Version;
|
||||
}
|
||||
|
||||
public ClientMessage()
|
||||
{
|
||||
}
|
||||
|
||||
public void SerializeData<T>(T data)
|
||||
{
|
||||
MessageData = Utility.Serialize(data);
|
||||
}
|
||||
|
||||
|
||||
public Transfer GetTransferData()
|
||||
{
|
||||
if (MessageData == null)
|
||||
return null;
|
||||
|
||||
return Utility.Deserialize<Transfer>(MessageData);
|
||||
}
|
||||
|
||||
public OnlinePlayersMessage GetOnlinePlayers()
|
||||
{
|
||||
if (MessageData == null)
|
||||
return null;
|
||||
|
||||
|
||||
var msg = Utility.Deserialize<OnlinePlayersMessage>(MessageData);
|
||||
return msg;
|
||||
}
|
||||
}
|
@@ -1,73 +1,48 @@
|
||||
using ProtoBuf;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SeamlessClientPlugin.Messages
|
||||
namespace SeamlessClientPlugin.Messages;
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlinePlayersMessage
|
||||
{
|
||||
[ProtoMember(12)] public int CurrentServerId;
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlinePlayersMessage
|
||||
{
|
||||
[ProtoMember(10)]
|
||||
public List<OnlineServer> OnlineServers = new List<OnlineServer>();
|
||||
|
||||
[ProtoMember(12)]
|
||||
public int currentServerID;
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlineServer
|
||||
{
|
||||
|
||||
[ProtoMember(2)]
|
||||
public List<OnlinePlayer> Players = new List<OnlinePlayer>();
|
||||
|
||||
[ProtoMember(3)]
|
||||
public bool ServerRunning = false;
|
||||
|
||||
[ProtoMember(10)]
|
||||
public int ServerID;
|
||||
|
||||
[ProtoMember(11)]
|
||||
public string ServerName;
|
||||
|
||||
public OnlineServer() { }
|
||||
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlinePlayer
|
||||
{
|
||||
[ProtoMember(1)]
|
||||
public string PlayerName;
|
||||
|
||||
[ProtoMember(2)]
|
||||
public ulong SteamID;
|
||||
|
||||
[ProtoMember(3)]
|
||||
public long IdentityID;
|
||||
|
||||
[ProtoMember(4)]
|
||||
public int OnServer;
|
||||
|
||||
public OnlinePlayer(string PlayerName, ulong SteamID, long IdentityID, int OnServer)
|
||||
{
|
||||
this.PlayerName = PlayerName;
|
||||
this.SteamID = SteamID;
|
||||
this.IdentityID = IdentityID;
|
||||
this.OnServer = OnServer;
|
||||
}
|
||||
|
||||
|
||||
public OnlinePlayer() { }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
[ProtoMember(10)] public List<OnlineServer> OnlineServers = [];
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlineServer
|
||||
{
|
||||
[ProtoMember(2)] public List<OnlinePlayer> Players = [];
|
||||
|
||||
[ProtoMember(10)] public int ServerId;
|
||||
|
||||
[ProtoMember(11)] public string ServerName;
|
||||
|
||||
[ProtoMember(3)] public bool ServerRunning = false;
|
||||
}
|
||||
|
||||
[ProtoContract]
|
||||
public class OnlinePlayer
|
||||
{
|
||||
[ProtoMember(3)] public long IdentityId;
|
||||
|
||||
[ProtoMember(4)] public int OnServer;
|
||||
|
||||
[ProtoMember(1)] public string PlayerName;
|
||||
|
||||
[ProtoMember(2)] public ulong SteamId;
|
||||
|
||||
public OnlinePlayer(string playerName, ulong steamId, long identityId, int onServer)
|
||||
{
|
||||
this.PlayerName = playerName;
|
||||
this.SteamId = steamId;
|
||||
this.IdentityId = identityId;
|
||||
this.OnServer = onServer;
|
||||
}
|
||||
|
||||
|
||||
public OnlinePlayer()
|
||||
{
|
||||
}
|
||||
}
|
@@ -1,63 +1,33 @@
|
||||
using ProtoBuf;
|
||||
using Sandbox;
|
||||
using Sandbox.Engine.Multiplayer;
|
||||
using Sandbox.Engine.Networking;
|
||||
using Sandbox.Game.Entities;
|
||||
using Sandbox.Game.Gui;
|
||||
using Sandbox.Game.Multiplayer;
|
||||
using Sandbox.Game.World;
|
||||
using Sandbox.Graphics.GUI;
|
||||
using Sandbox.ModAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using VRage;
|
||||
using VRage.Game;
|
||||
using VRage.GameServices;
|
||||
using VRage.Network;
|
||||
using VRage.Steam;
|
||||
using VRage.Utils;
|
||||
using VRageMath;
|
||||
|
||||
namespace SeamlessClientPlugin.Messages
|
||||
namespace SeamlessClientPlugin.Messages;
|
||||
|
||||
[ProtoContract]
|
||||
public class Transfer
|
||||
{
|
||||
[ProtoMember(2)] public string IpAdress;
|
||||
|
||||
[ProtoContract]
|
||||
public class Transfer
|
||||
[ProtoMember(7)] public string PlayerName;
|
||||
|
||||
[ProtoMember(9)] public MyObjectBuilder_Toolbar PlayerToolbar;
|
||||
|
||||
[ProtoMember(10)] public string ServerName;
|
||||
|
||||
[ProtoMember(1)] public ulong TargetServerId;
|
||||
|
||||
[ProtoMember(6)] public WorldRequest WorldRequest;
|
||||
|
||||
public Transfer(ulong serverId, string ipAdress)
|
||||
{
|
||||
[ProtoMember(1)]
|
||||
public ulong TargetServerID;
|
||||
[ProtoMember(2)]
|
||||
public string IPAdress;
|
||||
[ProtoMember(6)]
|
||||
public WorldRequest WorldRequest;
|
||||
[ProtoMember(7)]
|
||||
public string PlayerName;
|
||||
[ProtoMember(9)]
|
||||
public MyObjectBuilder_Toolbar PlayerToolbar;
|
||||
|
||||
[ProtoMember(10)]
|
||||
public string ServerName;
|
||||
|
||||
public Transfer(ulong ServerID, string IPAdress)
|
||||
{
|
||||
/* This is only called serverside
|
||||
*/
|
||||
|
||||
this.IPAdress = IPAdress;
|
||||
TargetServerID = ServerID;
|
||||
}
|
||||
|
||||
public Transfer() { }
|
||||
|
||||
|
||||
|
||||
|
||||
/* This is only called serverside
|
||||
*/
|
||||
|
||||
this.IpAdress = ipAdress;
|
||||
TargetServerId = serverId;
|
||||
}
|
||||
}
|
||||
|
||||
public Transfer()
|
||||
{
|
||||
}
|
||||
}
|
@@ -1,72 +1,55 @@
|
||||
using NLog;
|
||||
using System.Reflection;
|
||||
using NLog;
|
||||
using ProtoBuf;
|
||||
using Sandbox.Engine.Multiplayer;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using VRage.Game;
|
||||
using VRage.ObjectBuilders;
|
||||
using VRage.ObjectBuilders.Private;
|
||||
|
||||
namespace SeamlessClientPlugin.Messages
|
||||
namespace SeamlessClientPlugin.Messages;
|
||||
|
||||
[ProtoContract]
|
||||
public class WorldRequest
|
||||
{
|
||||
[ProtoContract]
|
||||
public class WorldRequest
|
||||
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[ProtoMember(5)] public MyObjectBuilder_Gps GpsCollection;
|
||||
|
||||
[ProtoMember(2)] public long IdentityId;
|
||||
|
||||
[ProtoMember(1)] public ulong PlayerId;
|
||||
|
||||
[ProtoMember(3)] public string PlayerName;
|
||||
|
||||
[ProtoMember(4)] public byte[] WorldData;
|
||||
|
||||
public WorldRequest(ulong playerId, long playerIdentity, string name)
|
||||
{
|
||||
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
[ProtoMember(1)]
|
||||
public ulong PlayerID;
|
||||
[ProtoMember(2)]
|
||||
public long IdentityID;
|
||||
[ProtoMember(3)]
|
||||
public string PlayerName;
|
||||
[ProtoMember(4)]
|
||||
public byte[] WorldData;
|
||||
|
||||
[ProtoMember(5)]
|
||||
public MyObjectBuilder_Gps gpsCollection;
|
||||
|
||||
public WorldRequest(ulong PlayerID,long PlayerIdentity, string Name)
|
||||
{
|
||||
this.PlayerID = PlayerID;
|
||||
this.PlayerName = Name;
|
||||
this.IdentityID = PlayerIdentity;
|
||||
}
|
||||
|
||||
public WorldRequest() { }
|
||||
|
||||
public void SerializeWorldData(MyObjectBuilder_World WorldData)
|
||||
{
|
||||
MethodInfo CleanupData = typeof(MyMultiplayerServerBase).GetMethod("CleanUpData", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[3]
|
||||
{
|
||||
typeof(MyObjectBuilder_World),
|
||||
typeof(ulong),
|
||||
typeof(long),
|
||||
}, null);
|
||||
object[] Data = new object[] { WorldData, PlayerID, IdentityID };
|
||||
CleanupData.Invoke(null, Data);
|
||||
WorldData = (MyObjectBuilder_World)Data[0];
|
||||
using (MemoryStream memoryStream = new MemoryStream())
|
||||
{
|
||||
MyObjectBuilderSerializer.SerializeXML(memoryStream, WorldData, MyObjectBuilderSerializer.XmlCompression.Gzip);
|
||||
this.WorldData = memoryStream.ToArray();
|
||||
Log.Warn("Successfully Converted World");
|
||||
}
|
||||
}
|
||||
|
||||
public MyObjectBuilder_World DeserializeWorldData()
|
||||
{
|
||||
MyObjectBuilderSerializer.DeserializeGZippedXML<MyObjectBuilder_World>(new MemoryStream(WorldData), out var objectBuilder);
|
||||
objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityID, gpsCollection);
|
||||
|
||||
|
||||
|
||||
return objectBuilder;
|
||||
}
|
||||
|
||||
this.PlayerId = playerId;
|
||||
PlayerName = name;
|
||||
IdentityId = playerIdentity;
|
||||
}
|
||||
}
|
||||
|
||||
public WorldRequest()
|
||||
{
|
||||
}
|
||||
|
||||
public void SerializeWorldData(MyObjectBuilder_World worldData)
|
||||
{
|
||||
MyMultiplayerServerBase.CleanUpData(worldData, PlayerId, IdentityId);
|
||||
using var memoryStream = new MemoryStream();
|
||||
MyObjectBuilderSerializerKeen.SerializeXML(memoryStream, worldData,
|
||||
MyObjectBuilderSerializerKeen.XmlCompression.Gzip);
|
||||
WorldData = memoryStream.ToArray();
|
||||
Log.Warn("Successfully Converted World");
|
||||
}
|
||||
|
||||
public MyObjectBuilder_World DeserializeWorldData()
|
||||
{
|
||||
MyObjectBuilderSerializerKeen.DeserializeGZippedXML<MyObjectBuilder_World>(new MemoryStream(WorldData),
|
||||
out var objectBuilder);
|
||||
objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityId, GpsCollection);
|
||||
|
||||
|
||||
return objectBuilder;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user