Files
BoneSync/BoneSync/Networking/Messages/PlugSyncMessage.cs
2025-03-05 15:35:18 +02:00

68 lines
2.2 KiB
C#

using BoneSync.Sync;
using BoneSync.Sync.Components;
using StressLevelZero.Interaction;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BoneSync.Networking.Messages
{
public struct PlugSyncMessageData
{
public ushort plugSyncId;
public byte plugIndex;
public ushort socketSyncId;
public byte socketIndex;
}
[PacketType(PacketType.PlugSync), PacketReliability(PacketReliability.ReliableFast)]
internal class PlugSyncMessage : NetworkMessage
{
private PlugSyncMessageData messageData;
public PlugSyncMessage(PlugSyncMessageData plugSyncMessageData)
{
this.messageData = plugSyncMessageData;
byteEncoder.WriteUShort(plugSyncMessageData.plugSyncId);
byteEncoder.WriteByte(plugSyncMessageData.plugIndex);
byteEncoder.WriteUShort(plugSyncMessageData.socketSyncId);
byteEncoder.WriteByte(plugSyncMessageData.socketIndex);
}
public PlugSyncMessage(Packet packet) {
byteEncoder.WriteBytes(packet.Data);
messageData.plugSyncId = byteEncoder.ReadUShort();
messageData.plugIndex = byteEncoder.ReadByte();
messageData.socketSyncId = byteEncoder.ReadUShort();
messageData.socketIndex = byteEncoder.ReadByte();
}
public override void Execute()
{
Syncable plugSyncable = ObjectSyncCache.GetSyncable(messageData.plugSyncId);
Syncable socketSyncable = ObjectSyncCache.GetSyncable(messageData.socketSyncId);
if (!plugSyncable || messageData.plugIndex == byte.MaxValue) { return; }
AlignPlug plug = (AlignPlug)plugSyncable.GetPlugFromId(messageData.plugIndex);
if (plug == null) { return; }
if (!socketSyncable || messageData.socketIndex == byte.MaxValue) {
plug.SafeEject();
return;
}
Socket socket = socketSyncable.GetSocketFromId(messageData.socketIndex);
if (socket == null)
{
plug.SafeEject();
return;
}
plug.SafeInsert(socket);
}
}
}