From 84538e16e250d6a90c40f061ed2257675270a183 Mon Sep 17 00:00:00 2001 From: Aaro Varis Date: Tue, 25 Feb 2025 13:04:07 +0200 Subject: [PATCH] revert --- BoneSync/BoneSync.csproj | 42 ++++---------- BoneSync/MelonLoaderMod.cs | 3 +- .../Networking/LobbyManager/LobbyManager.cs | 6 +- .../LobbyManager/SteamLobbyManager.cs | 58 +++++++------------ .../Networking/Messages/NetworkMessage.cs | 26 +++++---- BoneSync/Networking/Packet.cs | 37 +++--------- .../Networking/Transport/SteamTransport.cs | 50 +++++----------- .../Networking/Transport/TransportBase.cs | 3 +- BoneSync/packages.config | 4 +- .../Facepunch.Steamworks.Win64.csproj | 10 +--- testEnvironments.json | 17 ------ 11 files changed, 84 insertions(+), 172 deletions(-) delete mode 100644 testEnvironments.json diff --git a/BoneSync/BoneSync.csproj b/BoneSync/BoneSync.csproj index 6dee43f..0555f47 100644 --- a/BoneSync/BoneSync.csproj +++ b/BoneSync/BoneSync.csproj @@ -40,38 +40,24 @@ ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stationeers\MelonLoader\MelonLoader.dll - False ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.TestPlatform.CoreUtilities.dll - False ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.TestPlatform.PlatformAbstractions.dll - False ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll - False - - - ..\packages\MSTest.TestFramework.3.8.2\lib\net462\Microsoft.VisualStudio.TestPlatform.TestFramework.dll - False - - - ..\packages\MSTest.TestFramework.3.8.2\lib\net462\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll - False ..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll - False ..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll - False @@ -81,24 +67,16 @@ - False - ..\..\..\..\.nuget\packages\xunit.abstractions\2.0.3\lib\net35\xunit.abstractions.dll - False + ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll - False - ..\..\..\..\.nuget\packages\xunit.assert\2.9.3\lib\netstandard1.1\xunit.assert.dll - False + ..\packages\xunit.assert.2.9.3\lib\netstandard1.1\xunit.assert.dll - False - ..\..\..\..\.nuget\packages\xunit.extensibility.core\2.9.3\lib\net452\xunit.core.dll - False + ..\packages\xunit.extensibility.core.2.9.3\lib\net452\xunit.core.dll - False - ..\..\..\..\.nuget\packages\xunit.extensibility.execution\2.9.3\lib\net452\xunit.execution.desktop.dll - False + ..\packages\xunit.extensibility.execution.2.9.3\lib\net452\xunit.execution.desktop.dll @@ -114,17 +92,19 @@ + - + + {0289f09e-d594-46a9-96a7-b0f31f5d97b0} + Facepunch.Steamworks.Win64 + - - - - + + diff --git a/BoneSync/MelonLoaderMod.cs b/BoneSync/MelonLoaderMod.cs index 30933a1..5365064 100644 --- a/BoneSync/MelonLoaderMod.cs +++ b/BoneSync/MelonLoaderMod.cs @@ -25,7 +25,8 @@ namespace BoneSync SteamLobbyManager steamLobbyManager = new SteamLobbyManager(); lobby = steamLobbyManager; - transport = new SteamTransport(); + transport = new SteamTransport(steamLobbyManager); + } diff --git a/BoneSync/Networking/LobbyManager/LobbyManager.cs b/BoneSync/Networking/LobbyManager/LobbyManager.cs index 098157c..a42d18a 100644 --- a/BoneSync/Networking/LobbyManager/LobbyManager.cs +++ b/BoneSync/Networking/LobbyManager/LobbyManager.cs @@ -11,11 +11,15 @@ namespace BoneSync.Networking.LobbyManager { public abstract class LobbyManager { - public abstract ulong[] GetPeers(); public abstract ulong GetLobbyId(); public abstract ulong GetHostId(); public abstract ulong GetLocalId(); + public virtual void CreateLobby() + { + + } + public virtual void Initialize() { diff --git a/BoneSync/Networking/LobbyManager/SteamLobbyManager.cs b/BoneSync/Networking/LobbyManager/SteamLobbyManager.cs index 5afd397..216db29 100644 --- a/BoneSync/Networking/LobbyManager/SteamLobbyManager.cs +++ b/BoneSync/Networking/LobbyManager/SteamLobbyManager.cs @@ -10,52 +10,36 @@ namespace BoneSync.Networking.LobbyManager { internal class SteamLobbyManager : LobbyManager { - private Lobby _lobbyInstance; - public Friend[] LobbyMembers + public SteamId[] Peers; + private Lobby lobbyInstance; + + public override ulong GetLocalId() { - get; - private set; + return SteamClient.SteamId.Value; } - public SteamId[] steamIds + public override ulong GetHostId() { - get; - private set; + return lobbyInstance.Owner.Id; + } + public override ulong GetLobbyId() + { + return lobbyInstance.Id; + } + public override void CreateLobby() + { + } - public override ulong[] GetPeers() => steamIds.Select(x => x.Value).ToArray(); - public override ulong GetLocalId() => SteamClient.SteamId.Value; - public override ulong GetHostId() => _lobbyInstance.Owner.Id.Value; - public override ulong GetLobbyId() => _lobbyInstance.Id.Value; - - private void UpdateLobbyData() + public SteamId? getPeerFromId(ulong id) { - LobbyMembers = _lobbyInstance.Members.ToArray(); - steamIds = LobbyMembers.Select(x => x.Id).ToArray(); - } - public override void Initialize() - { - SteamMatchmaking.OnLobbyCreated += (Result result, Lobby lobby) => + foreach (SteamId peer in Peers) { - _lobbyInstance = lobby; - UpdateLobbyData(); - }; - SteamMatchmaking.OnLobbyEntered += (Lobby lobby) => - { - _lobbyInstance = lobby; - UpdateLobbyData(); - }; - SteamMatchmaking.OnLobbyMemberLeave += (Lobby lobby, Friend friend) => - { - if (friend.Id == SteamClient.SteamId) + if (peer.Value == id) { - _lobbyInstance = new Lobby(); + return peer; } - UpdateLobbyData(); - }; - SteamMatchmaking.OnLobbyMemberJoined += (Lobby lobby, Friend friend) => - { - UpdateLobbyData(); - }; + } + return null; } } diff --git a/BoneSync/Networking/Messages/NetworkMessage.cs b/BoneSync/Networking/Messages/NetworkMessage.cs index b426714..cf085c4 100644 --- a/BoneSync/Networking/Messages/NetworkMessage.cs +++ b/BoneSync/Networking/Messages/NetworkMessage.cs @@ -22,7 +22,7 @@ namespace BoneSync.Networking.Messages public abstract class NetworkMessage { - private static bool PacketTypesRegistered => PacketTypeMap.Count > 0; + private static bool _packetTypesRegistered = false; internal static Dictionary PacketTypeMap = new Dictionary(); @@ -34,26 +34,25 @@ namespace BoneSync.Networking.Messages public PacketType GetPacketType() { - RegisterPacketTypes(); if (_packetType == PacketType.Unknown) { - string typeName = GetType().Name; - KeyValuePair found = PacketTypeMap.FirstOrDefault(x => x.Value.Name == typeName); - if (found.Value == null) + Type type = GetType(); + _packetType = PacketTypeMap.FirstOrDefault(x => x.Value == type).Key; + if (_packetType == PacketType.Unknown) { - throw new Exception("Cannot find packetType for " + typeName); + throw new Exception("Cannot find packetType for " + type.Name); } - _packetType = found.Key; } return _packetType; } public static void RegisterPacketTypes() { - if (PacketTypesRegistered) + if (_packetTypesRegistered) { return; } + _packetTypesRegistered = true; Assembly assembly = Assembly.GetExecutingAssembly(); Type[] types = assembly.GetTypes(); foreach (Type type in types) @@ -62,7 +61,7 @@ namespace BoneSync.Networking.Messages if (type.IsSubclassOf(typeof(NetworkMessage))) { PacketType? packetType = type.GetCustomAttributesData().Where(x => x.AttributeType == typeof(PacketTypeAttribute)).Select(x => (PacketType)x.ConstructorArguments[0].Value).FirstOrDefault(); - PacketTypeMap[packetType.Value] = type; + PacketTypeMap.Add((PacketType)packetType, type); } } } @@ -76,7 +75,12 @@ namespace BoneSync.Networking.Messages } Type type = PacketTypeMap[packet.Info.packetType]; // get the constructor that takes a Packet - ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(Packet) }) ?? throw new Exception("No constructor found for type " + type.Name); + ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(Packet) }); + // create an instance of the class + if (constructor == null) + { + throw new Exception("No constructor found for type " + type.Name); + } NetworkMessage networkMessage = (NetworkMessage)constructor.Invoke(new object[] { packet }); return networkMessage; } @@ -91,7 +95,7 @@ namespace BoneSync.Networking.Messages } public void Broadcast() { - Send(TransportBase.BORADCAST_ID); + Send(0); } public void Send(ulong receiverId) { diff --git a/BoneSync/Networking/Packet.cs b/BoneSync/Networking/Packet.cs index 87b3946..4a55bd4 100644 --- a/BoneSync/Networking/Packet.cs +++ b/BoneSync/Networking/Packet.cs @@ -1,5 +1,4 @@ -using BoneSync.Networking.Messages; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -34,6 +33,7 @@ namespace BoneSync.Networking private PacketInfo _packetInfo; private byte[] _dataBytes; + private PacketInfo packetInfo; public Packet(PacketInfo packetInfo, byte[] data) { @@ -45,34 +45,21 @@ namespace BoneSync.Networking { ByteEncoder byteEncoder = new ByteEncoder(); byteEncoder.WriteBytes(bytes); - - int packetType = byteEncoder.ReadInt(); - int id = byteEncoder.ReadInt(); - ulong senderId = byteEncoder.ReadUlong(); - ulong receiverId = byteEncoder.ReadUlong(); - - PacketInfo packetInfo = new PacketInfo(id, senderId, receiverId, (PacketType)packetType); + PacketInfo packetInfo = new PacketInfo(byteEncoder.ReadInt(), byteEncoder.ReadUlong(), byteEncoder.ReadUlong(), (PacketType)byteEncoder.ReadInt()); return new Packet(packetInfo, byteEncoder.ToArray()); } public byte[] ToBytes() { ByteEncoder byteEncoder = new ByteEncoder(); - byteEncoder.WriteInt((int)_packetInfo.packetType); - byteEncoder.WriteInt(_packetInfo.id); - byteEncoder.WriteUlong(_packetInfo.senderId); - byteEncoder.WriteUlong(_packetInfo.receiverId); + byteEncoder.WriteInt(packetInfo.id); + byteEncoder.WriteUlong(packetInfo.senderId); + byteEncoder.WriteUlong(packetInfo.receiverId); + byteEncoder.WriteInt((int)packetInfo.packetType); byteEncoder.WriteBytes(_dataBytes); return byteEncoder.ToArray(); } - public static bool OnPacketReceived(Packet packet) - { - NetworkMessage networkMessage = NetworkMessage.ParsePacket(packet); - networkMessage.Execute(); - return true; - } - public byte[] Data => _dataBytes; public static int GenerateId() @@ -90,21 +77,15 @@ namespace BoneSync.Networking byte[] randomDataBytes = new byte[1024]; random.NextBytes(randomDataBytes); - PacketInfo originalPacketInfo = new PacketInfo(Packet.GenerateId(), 1, 2, PacketType.LobbyInfo); + PacketInfo originalPacketInfo = new PacketInfo(1, 2, 3, PacketType.LobbyInfo); Packet originalPacket = new Packet(originalPacketInfo, randomDataBytes); byte[] bytes = originalPacket.ToBytes(); Packet parsedPacket = Packet.FromBytes(bytes); - - Assert.Equal(originalPacket.Info.id, parsedPacket.Info.id); - Assert.Equal(originalPacket.Info.senderId, parsedPacket.Info.senderId); - Assert.Equal(originalPacket.Info.receiverId, parsedPacket.Info.receiverId); - Assert.Equal(originalPacket.Info.packetType, parsedPacket.Info.packetType); - + Assert.Equal(originalPacket.Info, parsedPacket.Info); Assert.Equal(originalPacket.Data, parsedPacket.Data); - Assert.Equal(randomDataBytes, parsedPacket.Data); Assert.NotEqual(bytes, randomDataBytes); } diff --git a/BoneSync/Networking/Transport/SteamTransport.cs b/BoneSync/Networking/Transport/SteamTransport.cs index 56303af..7b64fcb 100644 --- a/BoneSync/Networking/Transport/SteamTransport.cs +++ b/BoneSync/Networking/Transport/SteamTransport.cs @@ -1,82 +1,62 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using BoneSync.Networking.LobbyManager; using Facepunch.Steamworks; using Facepunch.Steamworks.Data; -using MelonLoader; namespace BoneSync.Networking.Transport { internal class SteamTransport : TransportBase { + SteamLobbyManager _instance; + public override event Action OnReceive; - public SteamTransport() + public SteamTransport(SteamLobbyManager lobbyManager) { SteamNetworking.OnP2PSessionRequest += OnP2PSessionRequest; } private void OnP2PSessionRequest(SteamId steamId) { - MelonLogger.Msg("P2P Request from " + steamId); - if (BoneSync.lobby.GetPeers().Contains(steamId)) - SteamNetworking.AcceptP2PSessionWithUser(steamId); + SteamNetworking.AcceptP2PSessionWithUser(steamId); } private void ProcessPacket(P2Packet steamPacket) { Packet packet = Packet.FromBytes(steamPacket.Data); - bool isTarget = packet.Info.receiverId == BORADCAST_ID || packet.Info.receiverId == BoneSync.lobby.GetLocalId(); + bool isTarget = packet.Info.receiverId == 0 || packet.Info.receiverId == _instance.GetLocalId(); if (isTarget) { - Packet.OnPacketReceived(packet); + OnReceive?.Invoke(packet); } } public override bool Tick() { - int processed = 0; while (SteamNetworking.IsP2PPacketAvailable()) { - P2Packet? packet = SteamNetworking.ReadP2PPacket(); - if (!packet.HasValue) continue; - ProcessPacket(packet.Value); - processed++; + P2Packet packet = (P2Packet)SteamNetworking.ReadP2PPacket(); + ProcessPacket(packet); } - return processed > 0; - } - - public void SendP2P(SteamId peer, byte[] data) - { - if (peer == BoneSync.lobby.GetLocalId()) - { - //MelonLogger.Msg("Trying to send packet to self"); - return; - } - SteamNetworking.SendP2PPacket(peer, data, data.Length, 0, P2PSend.Reliable); + return true; } public override void Send(Packet packet) { - LobbyManager.LobbyManager _instance = BoneSync.lobby; - if (_instance == null) + if (packet.Info.receiverId == 0) { - MelonLogger.Msg("Lobby instance is null"); - return; - } - if (packet.Info.receiverId == BORADCAST_ID) - { - foreach (SteamId peer in _instance.GetPeers()) + foreach (SteamId peer in _instance.Peers) { - SendP2P(peer, packet.ToBytes()); + byte[] packetBytes = packet.ToBytes(); + SteamNetworking.SendP2PPacket(peer, packetBytes, packetBytes.Length, 0, P2PSend.Reliable); } - return; } else { - SendP2P(packet.Info.receiverId, packet.ToBytes()); + SteamId peer = (SteamId)_instance.getPeerFromId(packet.Info.receiverId); + SteamNetworking.SendP2PPacket(peer, packet.ToBytes(), packet.ToBytes().Length, 0, P2PSend.Reliable); } } diff --git a/BoneSync/Networking/Transport/TransportBase.cs b/BoneSync/Networking/Transport/TransportBase.cs index e6bedde..891e1d4 100644 --- a/BoneSync/Networking/Transport/TransportBase.cs +++ b/BoneSync/Networking/Transport/TransportBase.cs @@ -8,8 +8,9 @@ namespace BoneSync.Networking.Transport { public abstract class TransportBase { - public const int BORADCAST_ID = 0; public abstract void Send(Packet packet); public abstract bool Tick(); + + public abstract event Action OnReceive; } } diff --git a/BoneSync/packages.config b/BoneSync/packages.config index a5081ad..a400c1b 100644 --- a/BoneSync/packages.config +++ b/BoneSync/packages.config @@ -1,13 +1,11 @@  - - - + diff --git a/Facepunch.Steamworks/Facepunch.Steamworks.Win64.csproj b/Facepunch.Steamworks/Facepunch.Steamworks.Win64.csproj index 8f21335..701650c 100644 --- a/Facepunch.Steamworks/Facepunch.Steamworks.Win64.csproj +++ b/Facepunch.Steamworks/Facepunch.Steamworks.Win64.csproj @@ -24,15 +24,11 @@ https://github.com/Facepunch/Facepunch.Steamworks.git git - - - - - - Never - + + Always + diff --git a/testEnvironments.json b/testEnvironments.json deleted file mode 100644 index a110b57..0000000 --- a/testEnvironments.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "1", - "environments": [ - // See https://aka.ms/remotetesting for more details - // about how to configure remote environments. - //{ - // "name": "WSL Ubuntu", - // "type": "wsl", - // "wslDistribution": "Ubuntu" - //}, - //{ - // "name": "Docker dotnet/sdk", - // "type": "docker", - // "dockerImage": "mcr.microsoft.com/dotnet/sdk" - //} - ] -} \ No newline at end of file