Some works for the new resource system
Rewrite some parts of CustomEvent Expose some API as dll entry
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user