Some works for the new resource system

Rewrite some parts of CustomEvent
Expose some API as dll entry
This commit is contained in:
Sardelka9515
2023-02-01 21:21:07 +08:00
parent d4df041c44
commit f1b9bf0571
23 changed files with 558 additions and 223 deletions

View File

@ -9,7 +9,6 @@ namespace RageCoop.Core
{
internal class CustomEvent : Packet
{
public static Func<byte, NetIncomingMessage, object> ResolveHandle = null;
public CustomEventFlags Flags;
public CustomEvent(CustomEventFlags flags = CustomEventFlags.None)
@ -19,77 +18,36 @@ namespace RageCoop.Core
public override PacketType Type => PacketType.CustomEvent;
public int Hash { get; set; }
public object[] Args { get; set; }
public byte[] Payload;
public object[] Args;
protected override void Serialize(NetOutgoingMessage m)
{
Args = Args ?? new object[] { };
m.Write((byte)Flags);
m.Write(Hash);
m.Write(Args.Length);
foreach (var arg in Args) CoreUtils.GetBytesFromObject(arg, m);
if (Args != null)
{
lock (WriteBufferShared)
{
WriteBufferShared.Reset();
CustomEvents.WriteObjects(WriteBufferShared, Args);
Payload = WriteBufferShared.ToByteArray(WriteBufferShared.Position);
}
}
m.Write(Payload);
}
public override void Deserialize(NetIncomingMessage m)
public unsafe override void Deserialize(NetIncomingMessage m)
{
Flags = (CustomEventFlags)m.ReadByte();
Hash = m.ReadInt32();
Args = new object[m.ReadInt32()];
for (var i = 0; i < Args.Length; i++)
Payload = m.ReadBytes(m.LengthBytes - m.PositionInBytes);
fixed (byte* p = Payload)
{
var type = m.ReadByte();
switch (type)
lock (ReadBufferShared)
{
case 0x01:
Args[i] = m.ReadByte();
break;
case 0x02:
Args[i] = m.ReadInt32();
break;
case 0x03:
Args[i] = m.ReadUInt16();
break;
case 0x04:
Args[i] = m.ReadInt32();
break;
case 0x05:
Args[i] = m.ReadUInt32();
break;
case 0x06:
Args[i] = m.ReadInt64();
break;
case 0x07:
Args[i] = m.ReadUInt64();
break;
case 0x08:
Args[i] = m.ReadFloat();
break;
case 0x09:
Args[i] = m.ReadBoolean();
break;
case 0x10:
Args[i] = m.ReadString();
break;
case 0x11:
Args[i] = m.ReadVector3();
break;
case 0x12:
Args[i] = m.ReadQuaternion();
break;
case 0x13:
Args[i] = (Model)m.ReadInt32();
break;
case 0x14:
Args[i] = m.ReadVector2();
break;
case 0x15:
Args[i] = m.ReadByteArray();
break;
default:
if (ResolveHandle == null) throw new InvalidOperationException($"Unexpected type: {type}");
Args[i] = ResolveHandle(type, m);
break;
ReadBufferShared.Initialise(p,Payload.Length);
Args = CustomEvents.ReadObjects(ReadBufferShared);
}
}
}