Untested discard message
This commit is contained in:
@@ -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" />
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
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
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -15,5 +15,6 @@ namespace BoneSync.Networking
|
|||||||
ObjectSync = 4,
|
ObjectSync = 4,
|
||||||
ObjectEvent = 5,
|
ObjectEvent = 5,
|
||||||
ObjectOwnership = 6,
|
ObjectOwnership = 6,
|
||||||
|
DiscardSyncable = 7,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user