using ProtoBuf; using Sandbox.Engine.Networking; using Sandbox.Game.World; using Sandbox.ModAPI; using SeamlessClientPlugin.Utilities; namespace SeamlessClientPlugin.Messages; 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"; [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 data) { MessageData = Utility.Serialize(data); } public Transfer GetTransferData() { if (MessageData == null) return null; return Utility.Deserialize(MessageData); } public OnlinePlayersMessage GetOnlinePlayers() { if (MessageData == null) return null; var msg = Utility.Deserialize(MessageData); return msg; } }