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>
</ItemGroup>
<ItemGroup>
<Compile Include="Networking\Messages\DiscardSyncableMessage.cs" />
<Compile Include="Networking\Messages\ObjectDamageMessage.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="Patching\CallPatchedMethod.cs" />
<Compile Include="Patching\InteractableHostPatches.cs" />

View File

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

View File

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

View File

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

View File

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

View File

@@ -167,7 +167,15 @@ namespace BoneSync.Sync.Components
if (Registered)
{
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);
ObjectSyncCache.RemoveSyncable(this);

View File

@@ -56,19 +56,28 @@ namespace BoneSync.Sync.Components
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)
{
//MelonLogger.Msg("Ownership transfer request for " + _syncId + " to " + newOwnerId);
if (isOwner && !IsHolding())
{
MelonLogger.Msg("Sending ownership transfer for " + _syncId + " to " + newOwnerId);
OnwershipTransferMessageData data = new OnwershipTransferMessageData()
OwnershipTransferMessageData data = new OwnershipTransferMessageData()
{
SyncId = _syncId,
NewOwnerId = newOwnerId,
force = true
};
OnwershipTransferMessage message = new OnwershipTransferMessage(data);
OwnershipTransferMessage message = new OwnershipTransferMessage(data);
message.Broadcast();
SetOwner(newOwnerId);
}
@@ -79,13 +88,13 @@ namespace BoneSync.Sync.Components
if (!isOwner)
{
MelonLogger.Msg("Attempting to become owner of " + _syncId);
OnwershipTransferMessageData data = new OnwershipTransferMessageData()
OwnershipTransferMessageData data = new OwnershipTransferMessageData()
{
SyncId = _syncId,
NewOwnerId = BoneSync.lobby.GetLocalId(),
force = false
};
OnwershipTransferMessage message = new OnwershipTransferMessage(data);
OwnershipTransferMessage message = new OwnershipTransferMessage(data);
message.Broadcast();
}
}