Untested discard message

This commit is contained in:
Aaro Varis
2025-03-02 01:42:55 +02:00
parent b485ab3259
commit 055ee44da5
9 changed files with 79 additions and 17 deletions

View File

@@ -84,9 +84,10 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Networking\Messages\DiscardSyncableMessage.cs" />
<Compile Include="Networking\Messages\ObjectDamageMessage.cs" /> <Compile Include="Networking\Messages\ObjectDamageMessage.cs" />
<Compile Include="Networking\Messages\ObjectSyncMessage.cs" /> <Compile Include="Networking\Messages\ObjectSyncMessage.cs" />
<Compile Include="Networking\Messages\OnwershipTransferMessage.cs" /> <Compile Include="Networking\Messages\OwnershipTransferMessage.cs" />
<Compile Include="Networking\Messages\RegisterSyncableMessage.cs" /> <Compile Include="Networking\Messages\RegisterSyncableMessage.cs" />
<Compile Include="Patching\CallPatchedMethod.cs" /> <Compile Include="Patching\CallPatchedMethod.cs" />
<Compile Include="Patching\InteractableHostPatches.cs" /> <Compile Include="Patching\InteractableHostPatches.cs" />

View File

@@ -129,7 +129,7 @@ namespace BoneSync.Networking
WriteBytes(BitConverter.GetBytes(value)); WriteBytes(BitConverter.GetBytes(value));
} }
public ulong ReadUlong() public ulong ReadULong()
{ {
return BitConverter.ToUInt64(ReadBytes(sizeof(ulong)), 0); return BitConverter.ToUInt64(ReadBytes(sizeof(ulong)), 0);
} }

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BoneSync.Sync;
using BoneSync.Sync.Components;
namespace BoneSync.Networking.Messages
{
public struct DiscardSyncableMessageData
{
public ushort syncableId;
}
[PacketType(PacketType.DiscardSyncable), PacketReliability(PacketReliability.ReliableFast)]
internal class DiscardSyncableMessage : NetworkMessage
{
private DiscardSyncableMessageData _data;
public DiscardSyncableMessage(DiscardSyncableMessageData discardSyncableMessageData)
{
_data = discardSyncableMessageData;
byteEncoder.WriteUShort(_data.syncableId);
}
public DiscardSyncableMessage(Packet packet)
{
byteEncoder.WriteBytes(packet.Data);
_data.syncableId = byteEncoder.ReadUShort();
}
public override void Execute()
{
Syncable syncable = ObjectSyncCache.GetSyncable(_data.syncableId);
if (syncable != null)
{
syncable.DiscardSyncable(true);
}
}
}
}

View File

@@ -7,7 +7,7 @@ using BoneSync.Sync;
namespace BoneSync.Networking.Messages namespace BoneSync.Networking.Messages
{ {
public struct OnwershipTransferMessageData public struct OwnershipTransferMessageData
{ {
public ushort SyncId; public ushort SyncId;
public bool force; public bool force;
@@ -15,10 +15,10 @@ namespace BoneSync.Networking.Messages
} }
[PacketType(PacketType.ObjectOwnership), PacketReliability(PacketReliability.ReliableFast)] [PacketType(PacketType.ObjectOwnership), PacketReliability(PacketReliability.ReliableFast)]
internal class OnwershipTransferMessage : NetworkMessage internal class OwnershipTransferMessage : NetworkMessage
{ {
private OnwershipTransferMessageData Data; private OwnershipTransferMessageData Data;
public OnwershipTransferMessage(OnwershipTransferMessageData data) public OwnershipTransferMessage(OwnershipTransferMessageData data)
{ {
Data = data; Data = data;
byteEncoder.WriteUShort(Data.SyncId); byteEncoder.WriteUShort(Data.SyncId);
@@ -26,11 +26,11 @@ namespace BoneSync.Networking.Messages
byteEncoder.WriteBool(Data.force); byteEncoder.WriteBool(Data.force);
} }
public OnwershipTransferMessage(Packet packet) public OwnershipTransferMessage(Packet packet)
{ {
byteEncoder.WriteBytes(packet.Data); byteEncoder.WriteBytes(packet.Data);
Data.SyncId = byteEncoder.ReadUShort(); Data.SyncId = byteEncoder.ReadUShort();
Data.NewOwnerId = byteEncoder.ReadUlong(); Data.NewOwnerId = byteEncoder.ReadULong();
Data.force = byteEncoder.ReadBool(); Data.force = byteEncoder.ReadBool();
} }

View File

@@ -58,7 +58,7 @@ namespace BoneSync.Networking.Messages
{ {
byteEncoder.WriteBytes(packet.Data); byteEncoder.WriteBytes(packet.Data);
_info.type = (RegisterSyncType)byteEncoder.ReadByte(); _info.type = (RegisterSyncType)byteEncoder.ReadByte();
_info.ownerId = byteEncoder.ReadUlong(); _info.ownerId = byteEncoder.ReadULong();
_info.id = byteEncoder.ReadUShort(); _info.id = byteEncoder.ReadUShort();
_info.callbackId = byteEncoder.ReadUShort(); _info.callbackId = byteEncoder.ReadUShort();
switch (_info.type) switch (_info.type)

View File

@@ -92,9 +92,9 @@ namespace BoneSync.Networking
byte packetType = byteEncoder.ReadByte(); byte packetType = byteEncoder.ReadByte();
byte reliability = byteEncoder.ReadByte(); byte reliability = byteEncoder.ReadByte();
ulong id = byteEncoder.ReadUlong(); ulong id = byteEncoder.ReadULong();
ulong senderId = byteEncoder.ReadUlong(); ulong senderId = byteEncoder.ReadULong();
ulong receiverId = byteEncoder.ReadUlong(); ulong receiverId = byteEncoder.ReadULong();
PacketInfo packetInfo = new PacketInfo(senderId, receiverId, (PacketType)packetType, (PacketReliability)reliability, id); PacketInfo packetInfo = new PacketInfo(senderId, receiverId, (PacketType)packetType, (PacketReliability)reliability, id);
return new Packet(packetInfo, byteEncoder.ToArray()); return new Packet(packetInfo, byteEncoder.ToArray());

View File

@@ -15,5 +15,6 @@ namespace BoneSync.Networking
ObjectSync = 4, ObjectSync = 4,
ObjectEvent = 5, ObjectEvent = 5,
ObjectOwnership = 6, ObjectOwnership = 6,
DiscardSyncable = 7,
} }
} }

View File

@@ -167,7 +167,15 @@ namespace BoneSync.Sync.Components
if (Registered) if (Registered)
{ {
MelonLogger.Warning("Discarding registered syncable: " + transform.GetPath() + " force: " + force); MelonLogger.Warning("Discarding registered syncable: " + transform.GetPath() + " force: " + force);
if (!force) return;
bool isowner = isOwner;
if (isowner)
{
_SendDiscard(); // owner sends discard message
}
if (!isowner && !force) return; // only owner can discard
} }
syncablesCache.Remove(gameObject); syncablesCache.Remove(gameObject);
ObjectSyncCache.RemoveSyncable(this); ObjectSyncCache.RemoveSyncable(this);

View File

@@ -56,19 +56,28 @@ namespace BoneSync.Sync.Components
SetSyncId(ObjectSync.SendRegisterSyncableMessage(this)); SetSyncId(ObjectSync.SendRegisterSyncableMessage(this));
} }
private void _SendDiscard()
{
DiscardSyncableMessageData discardSyncableMessageData = new DiscardSyncableMessageData()
{
syncableId = _syncId
};
DiscardSyncableMessage discardSyncableMessage = new DiscardSyncableMessage(discardSyncableMessageData);
discardSyncableMessage.Broadcast();
}
public void OnOwnershipTransferRequest(ulong newOwnerId) public void OnOwnershipTransferRequest(ulong newOwnerId)
{ {
//MelonLogger.Msg("Ownership transfer request for " + _syncId + " to " + newOwnerId); //MelonLogger.Msg("Ownership transfer request for " + _syncId + " to " + newOwnerId);
if (isOwner && !IsHolding()) if (isOwner && !IsHolding())
{ {
MelonLogger.Msg("Sending ownership transfer for " + _syncId + " to " + newOwnerId); MelonLogger.Msg("Sending ownership transfer for " + _syncId + " to " + newOwnerId);
OnwershipTransferMessageData data = new OnwershipTransferMessageData() OwnershipTransferMessageData data = new OwnershipTransferMessageData()
{ {
SyncId = _syncId, SyncId = _syncId,
NewOwnerId = newOwnerId, NewOwnerId = newOwnerId,
force = true force = true
}; };
OnwershipTransferMessage message = new OnwershipTransferMessage(data); OwnershipTransferMessage message = new OwnershipTransferMessage(data);
message.Broadcast(); message.Broadcast();
SetOwner(newOwnerId); SetOwner(newOwnerId);
} }
@@ -79,13 +88,13 @@ namespace BoneSync.Sync.Components
if (!isOwner) if (!isOwner)
{ {
MelonLogger.Msg("Attempting to become owner of " + _syncId); MelonLogger.Msg("Attempting to become owner of " + _syncId);
OnwershipTransferMessageData data = new OnwershipTransferMessageData() OwnershipTransferMessageData data = new OwnershipTransferMessageData()
{ {
SyncId = _syncId, SyncId = _syncId,
NewOwnerId = BoneSync.lobby.GetLocalId(), NewOwnerId = BoneSync.lobby.GetLocalId(),
force = false force = false
}; };
OnwershipTransferMessage message = new OnwershipTransferMessage(data); OwnershipTransferMessage message = new OwnershipTransferMessage(data);
message.Broadcast(); message.Broadcast();
} }
} }