Files
RAGECOOP-V/Core/Packets/CustomEvent.cs

56 lines
1.7 KiB
C#
Raw Normal View History

2022-10-23 19:02:39 +08:00
using System;
using GTA;
using Lidgren.Network;
using RageCoop.Core.Scripting;
2022-10-23 19:02:39 +08:00
2022-06-19 11:12:20 +08:00
namespace RageCoop.Core
{
2022-07-01 14:39:43 +08:00
internal partial class Packets
2022-06-19 11:12:20 +08:00
{
2022-07-01 14:39:43 +08:00
internal class CustomEvent : Packet
2022-06-19 11:12:20 +08:00
{
public CustomEventFlags Flags;
2022-10-23 19:02:39 +08:00
public CustomEvent(CustomEventFlags flags = CustomEventFlags.None)
{
Flags = flags;
}
2022-10-23 19:02:39 +08:00
public override PacketType Type => PacketType.CustomEvent;
2022-06-19 11:12:20 +08:00
public int Hash { get; set; }
public byte[] Payload;
public object[] Args;
2022-06-19 11:12:20 +08:00
protected override void Serialize(NetOutgoingMessage m)
2022-06-19 11:12:20 +08:00
{
m.Write((byte)Flags);
m.Write(Hash);
if (Args != null)
{
lock (WriteBufferShared)
{
WriteBufferShared.Reset();
CustomEvents.WriteObjects(WriteBufferShared, Args);
Payload = WriteBufferShared.ToByteArray(WriteBufferShared.Position);
}
}
m.Write(Payload);
2022-06-19 11:12:20 +08:00
}
public unsafe override void Deserialize(NetIncomingMessage m)
2022-06-19 11:12:20 +08:00
{
Flags = (CustomEventFlags)m.ReadByte();
Hash = m.ReadInt32();
Payload = m.ReadBytes(m.LengthBytes - m.PositionInBytes);
fixed (byte* p = Payload)
2022-06-19 11:12:20 +08:00
{
lock (ReadBufferShared)
2022-06-19 11:12:20 +08:00
{
ReadBufferShared.Initialise(p,Payload.Length);
Args = CustomEvents.ReadObjects(ReadBufferShared);
2022-06-19 11:12:20 +08:00
}
}
}
}
}
2022-10-23 19:02:39 +08:00
}