Untested discard message
This commit is contained in:
@@ -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" />
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace BoneSync.Networking
|
||||
WriteBytes(BitConverter.GetBytes(value));
|
||||
}
|
||||
|
||||
public ulong ReadUlong()
|
||||
public ulong ReadULong()
|
||||
{
|
||||
return BitConverter.ToUInt64(ReadBytes(sizeof(ulong)), 0);
|
||||
}
|
||||
|
||||
43
BoneSync/Networking/Messages/DiscardSyncableMessage.cs
Normal file
43
BoneSync/Networking/Messages/DiscardSyncableMessage.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -15,5 +15,6 @@ namespace BoneSync.Networking
|
||||
ObjectSync = 4,
|
||||
ObjectEvent = 5,
|
||||
ObjectOwnership = 6,
|
||||
DiscardSyncable = 7,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user