Packet refactor

This commit is contained in:
Sardelka
2022-08-06 10:43:24 +08:00
parent 69bd4c837c
commit 742e7ea998
22 changed files with 142 additions and 261 deletions

View File

@ -14,7 +14,7 @@ namespace RageCoop.Client
Networking.RequestHandlers.Add(PacketType.FileTransferRequest, (data) => Networking.RequestHandlers.Add(PacketType.FileTransferRequest, (data) =>
{ {
var fr = new Packets.FileTransferRequest(); var fr = new Packets.FileTransferRequest();
fr.Unpack(data); fr.Deserialize(data);
if (fr.Name.EndsWith(".res")) if (fr.Name.EndsWith(".res"))
{ {
_resources.Add(fr.Name); _resources.Add(fr.Name);
@ -28,7 +28,7 @@ namespace RageCoop.Client
Networking.RequestHandlers.Add(PacketType.FileTransferComplete, (data) => Networking.RequestHandlers.Add(PacketType.FileTransferComplete, (data) =>
{ {
Packets.FileTransferComplete packet = new Packets.FileTransferComplete(); Packets.FileTransferComplete packet = new Packets.FileTransferComplete();
packet.Unpack(data); packet.Deserialize(data);
Main.Logger.Debug($"Finalizing download:{packet.ID}"); Main.Logger.Debug($"Finalizing download:{packet.ID}");
Complete(packet.ID); Complete(packet.ID);

View File

@ -172,7 +172,7 @@ namespace RageCoop.Client
PendingResponses.Add(id, (type, p) => PendingResponses.Add(id, (type, p) =>
{ {
var result = new T(); var result = new T();
result.Unpack(p); result.Deserialize(p);
callback(result); callback(result);
}); });
var msg = Client.CreateMessage(); var msg = Client.CreateMessage();

View File

@ -148,7 +148,7 @@ namespace RageCoop.Client
if (packetType==PacketType.PublicKeyResponse) if (packetType==PacketType.PublicKeyResponse)
{ {
var packet = new Packets.PublicKeyResponse(); var packet = new Packets.PublicKeyResponse();
packet.Unpack(data); packet.Deserialize(data);
Security.SetServerPublicKey(packet.Modulus, packet.Exponent); Security.SetServerPublicKey(packet.Modulus, packet.Exponent);
_publicKeyReceived.Set(); _publicKeyReceived.Set();
} }
@ -175,7 +175,7 @@ namespace RageCoop.Client
{ {
Packets.PlayerConnect packet = new Packets.PlayerConnect(); Packets.PlayerConnect packet = new Packets.PlayerConnect();
packet.Unpack(data); packet.Deserialize(data);
Main.QueueAction(() => PlayerConnect(packet)); Main.QueueAction(() => PlayerConnect(packet));
} }
@ -184,7 +184,7 @@ namespace RageCoop.Client
{ {
Packets.PlayerDisconnect packet = new Packets.PlayerDisconnect(); Packets.PlayerDisconnect packet = new Packets.PlayerDisconnect();
packet.Unpack(data); packet.Deserialize(data);
Main.QueueAction(() => PlayerDisconnect(packet)); Main.QueueAction(() => PlayerDisconnect(packet));
} }
@ -192,7 +192,7 @@ namespace RageCoop.Client
case PacketType.PlayerInfoUpdate: case PacketType.PlayerInfoUpdate:
{ {
var packet = new Packets.PlayerInfoUpdate(); var packet = new Packets.PlayerInfoUpdate();
packet.Unpack(data); packet.Deserialize(data);
PlayerList.UpdatePlayer(packet); PlayerList.UpdatePlayer(packet);
break; break;
} }
@ -201,7 +201,7 @@ namespace RageCoop.Client
{ {
Packets.VehicleSync packet = new Packets.VehicleSync(); Packets.VehicleSync packet = new Packets.VehicleSync();
packet.Unpack(data); packet.Deserialize(data);
VehicleSync(packet); VehicleSync(packet);
} }
@ -210,7 +210,7 @@ namespace RageCoop.Client
{ {
Packets.PedSync packet = new Packets.PedSync(); Packets.PedSync packet = new Packets.PedSync();
packet.Unpack(data); packet.Deserialize(data);
PedSync(packet); PedSync(packet);
} }
@ -218,7 +218,7 @@ namespace RageCoop.Client
case PacketType.ProjectileSync: case PacketType.ProjectileSync:
{ {
Packets.ProjectileSync packet = new Packets.ProjectileSync(); Packets.ProjectileSync packet = new Packets.ProjectileSync();
packet.Unpack(data); packet.Deserialize(data);
ProjectileSync(packet); ProjectileSync(packet);
break; break;
} }
@ -230,7 +230,7 @@ namespace RageCoop.Client
{ {
return Security.Decrypt(b); return Security.Decrypt(b);
}); });
packet.Unpack(data); packet.Deserialize(data);
Main.QueueAction(() => { Main.MainChat.AddMessage(packet.Username, packet.Message); return true; }); Main.QueueAction(() => { Main.MainChat.AddMessage(packet.Username, packet.Message); return true; });
@ -240,7 +240,7 @@ namespace RageCoop.Client
case PacketType.CustomEvent: case PacketType.CustomEvent:
{ {
Packets.CustomEvent packet = new Packets.CustomEvent(_resolveHandle); Packets.CustomEvent packet = new Packets.CustomEvent(_resolveHandle);
packet.Unpack(data); packet.Deserialize(data);
Scripting.API.Events.InvokeCustomEventReceived(packet); Scripting.API.Events.InvokeCustomEventReceived(packet);
} }
break; break;
@ -249,7 +249,7 @@ namespace RageCoop.Client
Packets.CustomEvent packet = new Packets.CustomEvent(_resolveHandle); Packets.CustomEvent packet = new Packets.CustomEvent(_resolveHandle);
Main.QueueAction(() => Main.QueueAction(() =>
{ {
packet.Unpack(data); packet.Deserialize(data);
Scripting.API.Events.InvokeCustomEventReceived(packet); Scripting.API.Events.InvokeCustomEventReceived(packet);
}); });
} }
@ -257,7 +257,7 @@ namespace RageCoop.Client
case PacketType.FileTransferChunk: case PacketType.FileTransferChunk:
{ {
Packets.FileTransferChunk packet = new Packets.FileTransferChunk(); Packets.FileTransferChunk packet = new Packets.FileTransferChunk();
packet.Unpack(data); packet.Deserialize(data);
DownloadManager.Write(packet.ID, packet.FileChunk); DownloadManager.Write(packet.ID, packet.FileChunk);
} }
break; break;

View File

@ -232,14 +232,14 @@ namespace RageCoop.Client
case PacketType.BulletShot: case PacketType.BulletShot:
{ {
Packets.BulletShot p = new Packets.BulletShot(); Packets.BulletShot p = new Packets.BulletShot();
p.Unpack(data); p.Deserialize(data);
HandleBulletShot(p.StartPosition, p.EndPosition, p.WeaponHash, p.OwnerID); HandleBulletShot(p.StartPosition, p.EndPosition, p.WeaponHash, p.OwnerID);
break; break;
} }
case PacketType.EnteringVehicle: case PacketType.EnteringVehicle:
{ {
Packets.EnteringVehicle p = new Packets.EnteringVehicle(); Packets.EnteringVehicle p = new Packets.EnteringVehicle();
p.Unpack(data); p.Deserialize(data);
HandleEnteringVehicle(EntityPool.GetPedByID(p.PedID), EntityPool.GetVehicleByID(p.VehicleID), (VehicleSeat)p.VehicleSeat); HandleEnteringVehicle(EntityPool.GetPedByID(p.PedID), EntityPool.GetVehicleByID(p.VehicleID), (VehicleSeat)p.VehicleSeat);
@ -248,35 +248,35 @@ namespace RageCoop.Client
case PacketType.LeaveVehicle: case PacketType.LeaveVehicle:
{ {
Packets.LeaveVehicle packet = new Packets.LeaveVehicle(); Packets.LeaveVehicle packet = new Packets.LeaveVehicle();
packet.Unpack(data); packet.Deserialize(data);
HandleLeaveVehicle(packet); HandleLeaveVehicle(packet);
} }
break; break;
case PacketType.OwnerChanged: case PacketType.OwnerChanged:
{ {
Packets.OwnerChanged packet = new Packets.OwnerChanged(); Packets.OwnerChanged packet = new Packets.OwnerChanged();
packet.Unpack(data); packet.Deserialize(data);
HandleOwnerChanged(packet); HandleOwnerChanged(packet);
} }
break; break;
case PacketType.PedKilled: case PacketType.PedKilled:
{ {
var packet = new Packets.PedKilled(); var packet = new Packets.PedKilled();
packet.Unpack(data); packet.Deserialize(data);
HandlePedKilled(packet); HandlePedKilled(packet);
} }
break; break;
case PacketType.EnteredVehicle: case PacketType.EnteredVehicle:
{ {
var packet = new Packets.EnteredVehicle(); var packet = new Packets.EnteredVehicle();
packet.Unpack(data); packet.Deserialize(data);
HandleEnteredVehicle(packet.PedID, packet.VehicleID, (VehicleSeat)packet.VehicleSeat); HandleEnteredVehicle(packet.PedID, packet.VehicleID, (VehicleSeat)packet.VehicleSeat);
break; break;
} }
case PacketType.NozzleTransform: case PacketType.NozzleTransform:
{ {
var packet = new Packets.NozzleTransform(); var packet = new Packets.NozzleTransform();
packet.Unpack(data); packet.Deserialize(data);
HandleNozzleTransform(packet); HandleNozzleTransform(packet);
break; break;
} }

View File

@ -10,6 +10,7 @@ namespace RageCoop.Core
internal class ChatMessage : Packet internal class ChatMessage : Packet
{ {
public override PacketType Type { get { return PacketType.ChatMessage; } }
private Func<string, byte[]> crypt; private Func<string, byte[]> crypt;
private Func<byte[], byte[]> decrypt; private Func<byte[], byte[]> decrypt;
public ChatMessage(Func<string, byte[]> crypter) public ChatMessage(Func<string, byte[]> crypter)
@ -24,10 +25,8 @@ namespace RageCoop.Core
public string Message { get; set; } public string Message { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.ChatMessage);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -40,14 +39,11 @@ namespace RageCoop.Core
// Write Message // Write Message
byteArray.AddArray(crypt(Message)); byteArray.AddArray(crypt(Message));
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -9,6 +9,7 @@ namespace RageCoop.Core
internal class CustomEvent : Packet internal class CustomEvent : Packet
{ {
public override PacketType Type { get { return (_queued ? PacketType.CustomEventQueued : PacketType.CustomEvent); } }
public CustomEvent(Func<byte,BitReader,object> onResolve = null,bool queued=false) public CustomEvent(Func<byte,BitReader,object> onResolve = null,bool queued=false)
{ {
_resolve= onResolve; _resolve= onResolve;
@ -17,13 +18,11 @@ namespace RageCoop.Core
private bool _queued; private bool _queued;
private Func<byte, BitReader, object> _resolve { get; set; } private Func<byte, BitReader, object> _resolve { get; set; }
public int Hash { get; set; } public int Hash { get; set; }
public bool IsStaged { get; set; }=false;
public object[] Args { get; set; } public object[] Args { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
Args= Args ?? new object[] { }; Args= Args ?? new object[] { };
message.Write(_queued ? (byte)PacketType.CustomEventQueued: (byte)PacketType.CustomEvent);
List<byte> result = new List<byte>(); List<byte> result = new List<byte>();
result.AddInt(Hash); result.AddInt(Hash);
@ -39,12 +38,10 @@ namespace RageCoop.Core
result.Add(tup.Item1); result.Add(tup.Item1);
result.AddRange(tup.Item2); result.AddRange(tup.Item2);
} }
return result.ToArray();
message.Write(result.Count);
message.Write(result.ToArray());
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -18,16 +18,15 @@ namespace RageCoop.Core
{ {
internal class FileTransferRequest : Packet internal class FileTransferRequest : Packet
{ {
public override PacketType Type { get { return PacketType.FileTransferRequest; } }
public int ID { get; set; } public int ID { get; set; }
public string Name { get; set; } public string Name { get; set; }
public long FileLength { get; set; } public long FileLength { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.FileTransferRequest);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -43,14 +42,11 @@ namespace RageCoop.Core
// The length of the file // The length of the file
byteArray.AddRange(BitConverter.GetBytes(FileLength)); byteArray.AddRange(BitConverter.GetBytes(FileLength));
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -65,11 +61,11 @@ namespace RageCoop.Core
internal class FileTransferResponse : Packet internal class FileTransferResponse : Packet
{ {
public override PacketType Type { get { return PacketType.FileTransferResponse; } }
public int ID { get; set; } public int ID { get; set; }
public FileResponse Response { get; set; } public FileResponse Response { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
message.Write((byte)PacketType.FileTransferResponse);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -78,13 +74,10 @@ namespace RageCoop.Core
byteArray.Add((byte)Response); byteArray.Add((byte)Response);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -95,32 +88,27 @@ namespace RageCoop.Core
internal class FileTransferChunk : Packet internal class FileTransferChunk : Packet
{ {
public override PacketType Type { get { return PacketType.FileTransferChunk; } }
public int ID { get; set; } public int ID { get; set; }
public byte[] FileChunk { get; set; } public byte[] FileChunk { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.FileTransferChunk);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
// The ID from the download // The ID from the download
byteArray.AddInt(ID); byteArray.AddInt(ID);
// The chunk of the file // The chunk of the file
byteArray.AddRange(BitConverter.GetBytes(FileChunk.Length)); byteArray.AddInt(FileChunk.Length);
byteArray.AddRange(FileChunk); byteArray.AddRange(FileChunk);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -134,26 +122,21 @@ namespace RageCoop.Core
internal class FileTransferComplete : Packet internal class FileTransferComplete : Packet
{ {
public override PacketType Type { get { return PacketType.FileTransferComplete; } }
public int ID { get; set; } public int ID { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.FileTransferComplete);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
// The ID for the download // The ID for the download
byteArray.AddInt(ID); byteArray.AddInt(ID);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -165,18 +148,14 @@ namespace RageCoop.Core
internal class AllResourcesSent : Packet internal class AllResourcesSent : Packet
{ {
public override void Pack(NetOutgoingMessage message) public override PacketType Type { get { return PacketType.AllResourcesSent; } }
public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage return new byte[0];
message.Write((byte)PacketType.AllResourcesSent);
message.Write(0);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket
#endregion
} }
} }
} }

View File

@ -8,17 +8,13 @@ namespace RageCoop.Core
{ {
internal class PingPong : Packet internal class PingPong : Packet
{ {
public override PacketType Type { get { return PacketType.PingPong; } }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage return new byte[0];
message.Write((byte)PacketType.PingPong);
message.Write(1);
message.Write((byte)0);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
} }
} }

View File

@ -135,47 +135,26 @@ namespace RageCoop.Core
} }
#endregion #endregion
interface IPacket internal interface IPacket
{ {
PacketType Type { get; }
byte[] Serialize();
void Deserialize(byte[] data);
void Pack(NetOutgoingMessage message); void Pack(NetOutgoingMessage message);
void Unpack(byte[] array);
} }
internal abstract class Packet : IPacket internal abstract class Packet : IPacket
{ {
public abstract void Pack(NetOutgoingMessage message); public abstract PacketType Type { get; }
public abstract void Unpack(byte[] array); public abstract byte[] Serialize();
} public void Pack(NetOutgoingMessage message)
internal static class CoopSerializer
{ {
/// <summary> var d=Serialize();
/// ? message.Write((byte)Type);
/// </summary> message.Write(d.Length);
public static byte[] Serialize(this object obj) message.Write(d);
{
if (obj == null)
{
return null;
}
string jsonString = JsonConvert.SerializeObject(obj);
return System.Text.Encoding.UTF8.GetBytes(jsonString);
}
/// <summary>
/// ?
/// </summary>
public static T Deserialize<T>(this byte[] bytes) where T : class
{
if (bytes == null)
{
return null;
}
var jsonString = System.Text.Encoding.UTF8.GetString(bytes);
return JsonConvert.DeserializeObject<T>(jsonString);
} }
public abstract void Deserialize(byte[] array);
} }
} }

View File

@ -13,6 +13,7 @@ namespace RageCoop.Core
internal class PedSync : Packet internal class PedSync : Packet
{ {
public override PacketType Type { get { return PacketType.PedSync; } }
public int ID { get; set; } public int ID { get; set; }
public int OwnerID { get; set; } public int OwnerID { get; set; }
@ -56,10 +57,8 @@ namespace RageCoop.Core
public float BlipScale { get; set; } = 1; public float BlipScale { get; set; } = 1;
#endregion #endregion
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PedSync);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -145,14 +144,10 @@ namespace RageCoop.Core
} }
} }
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -10,6 +10,7 @@ namespace RageCoop.Core
{ {
internal class Handshake : Packet internal class Handshake : Packet
{ {
public override PacketType Type { get { return PacketType.Handshake; } }
public int PedID { get; set; } public int PedID { get; set; }
public string Username { get; set; } public string Username { get; set; }
@ -31,10 +32,8 @@ namespace RageCoop.Core
/// </summary> /// </summary>
public byte[] PasswordEncrypted { get; set; } public byte[] PasswordEncrypted { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.Handshake);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -61,14 +60,11 @@ namespace RageCoop.Core
// Write PassHash // Write PassHash
byteArray.AddArray(PasswordEncrypted); byteArray.AddArray(PasswordEncrypted);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -94,14 +90,13 @@ namespace RageCoop.Core
public class PlayerConnect : Packet public class PlayerConnect : Packet
{ {
public override PacketType Type { get { return PacketType.PlayerConnect; } }
public int PedID { get; set; } public int PedID { get; set; }
public string Username { get; set; } public string Username { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PlayerConnect);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -117,14 +112,10 @@ namespace RageCoop.Core
// Write Username // Write Username
byteArray.AddRange(usernameBytes); byteArray.AddRange(usernameBytes);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -141,25 +132,20 @@ namespace RageCoop.Core
public class PlayerDisconnect : Packet public class PlayerDisconnect : Packet
{ {
public override PacketType Type { get { return PacketType.PlayerDisconnect; } }
public int PedID { get; set; } public int PedID { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PlayerDisconnect);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
byteArray.AddRange(BitConverter.GetBytes(PedID)); byteArray.AddRange(BitConverter.GetBytes(PedID));
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -170,16 +156,16 @@ namespace RageCoop.Core
} }
public class PlayerInfoUpdate : Packet public class PlayerInfoUpdate : Packet
{ {
public override PacketType Type { get { return PacketType.PlayerInfoUpdate; } }
/// <summary> /// <summary>
/// Ped ID for this Player /// Ped ID for this Player
/// </summary> /// </summary>
public int PedID { get; set; } public int PedID { get; set; }
public string Username { get; set; } public string Username { get; set; }
public float Latency { get; set; } public float Latency { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PlayerInfoUpdate);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -199,14 +185,10 @@ namespace RageCoop.Core
// Write Latency // Write Latency
byteArray.AddFloat(Latency); byteArray.AddFloat(Latency);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);
@ -223,13 +205,13 @@ namespace RageCoop.Core
public class PublicKeyResponse : Packet public class PublicKeyResponse : Packet
{ {
public override PacketType Type { get { return PacketType.PublicKeyResponse; } }
public byte[] Modulus; public byte[] Modulus;
public byte[] Exponent; public byte[] Exponent;
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PublicKeyResponse);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -238,13 +220,9 @@ namespace RageCoop.Core
byteArray.AddArray(Exponent); byteArray.AddArray(Exponent);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
var reader=new BitReader(array); var reader=new BitReader(array);
@ -257,13 +235,13 @@ namespace RageCoop.Core
public class PublicKeyRequest : Packet public class PublicKeyRequest : Packet
{ {
public override void Pack(NetOutgoingMessage message) public override PacketType Type { get { return PacketType.PublicKeyRequest; } }
public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage return new byte[0];
message.Write((byte)PacketType.PublicKeyRequest);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
} }
} }

View File

@ -10,7 +10,7 @@ namespace RageCoop.Core
{ {
internal class ProjectileSync : Packet internal class ProjectileSync : Packet
{ {
public override PacketType Type { get { return PacketType.ProjectileSync; } }
public int ID { get; set; } public int ID { get; set; }
public int ShooterID { get; set; } public int ShooterID { get; set; }
@ -26,10 +26,8 @@ namespace RageCoop.Core
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.ProjectileSync);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -53,14 +51,11 @@ namespace RageCoop.Core
if (Exploded) { byteArray.Add(1); } if (Exploded) { byteArray.Add(1); }
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -11,6 +11,7 @@ namespace RageCoop.Core
internal class BulletShot : Packet internal class BulletShot : Packet
{ {
public override PacketType Type { get { return PacketType.BulletShot; } }
public int OwnerID { get; set; } public int OwnerID { get; set; }
public uint WeaponHash { get; set; } public uint WeaponHash { get; set; }
@ -18,10 +19,8 @@ namespace RageCoop.Core
public Vector3 StartPosition { get; set; } public Vector3 StartPosition { get; set; }
public Vector3 EndPosition { get; set; } public Vector3 EndPosition { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.BulletShot);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -38,14 +37,11 @@ namespace RageCoop.Core
byteArray.AddVector3(EndPosition); byteArray.AddVector3(EndPosition);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -10,16 +10,15 @@ namespace RageCoop.Core
{ {
internal class EnteredVehicle : Packet internal class EnteredVehicle : Packet
{ {
public override PacketType Type { get { return PacketType.EnteredVehicle; } }
public int PedID { get; set; } public int PedID { get; set; }
public int VehicleID { get; set; } public int VehicleID { get; set; }
public short VehicleSeat { get; set; } public short VehicleSeat { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.EnteredVehicle);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -27,14 +26,11 @@ namespace RageCoop.Core
byteArray.AddInt(VehicleID); byteArray.AddInt(VehicleID);
byteArray.AddInt(VehicleSeat); byteArray.AddInt(VehicleSeat);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -10,16 +10,15 @@ namespace RageCoop.Core
{ {
internal class EnteringVehicle : Packet internal class EnteringVehicle : Packet
{ {
public override PacketType Type { get { return PacketType.EnteringVehicle; } }
public int PedID { get; set; } public int PedID { get; set; }
public int VehicleID { get; set; } public int VehicleID { get; set; }
public short VehicleSeat { get; set; } public short VehicleSeat { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.EnteringVehicle);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
@ -27,14 +26,11 @@ namespace RageCoop.Core
byteArray.AddInt(VehicleID); byteArray.AddInt(VehicleID);
byteArray.AddInt(VehicleSeat); byteArray.AddInt(VehicleSeat);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -11,26 +11,22 @@ namespace RageCoop.Core
internal class LeaveVehicle : Packet internal class LeaveVehicle : Packet
{ {
public override PacketType Type { get { return PacketType.LeaveVehicle; } }
public int ID { get; set; } public int ID { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.LeaveVehicle);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
byteArray.AddInt(ID); byteArray.AddInt(ID);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -10,28 +10,24 @@ namespace RageCoop.Core
{ {
internal class NozzleTransform : Packet internal class NozzleTransform : Packet
{ {
public override PacketType Type { get { return PacketType.NozzleTransform; } }
public int VehicleID { get; set; } public int VehicleID { get; set; }
public bool Hover { get; set; } public bool Hover { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.NozzleTransform);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
byteArray.AddInt(VehicleID); byteArray.AddInt(VehicleID);
if (Hover) { byteArray.Add(1); } if (Hover) { byteArray.Add(1); }
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -11,28 +11,23 @@ namespace RageCoop.Core
internal class OwnerChanged : Packet internal class OwnerChanged : Packet
{ {
public override PacketType Type { get { return PacketType.OwnerChanged; } }
public int ID { get; set; } public int ID { get; set; }
public int NewOwnerID { get; set; } public int NewOwnerID { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.OwnerChanged);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
byteArray.AddInt(ID); byteArray.AddInt(ID);
byteArray.AddInt(NewOwnerID); byteArray.AddInt(NewOwnerID);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -11,24 +11,20 @@ namespace RageCoop.Core
internal class PedKilled : Packet internal class PedKilled : Packet
{ {
public override PacketType Type { get { return PacketType.PedKilled; } }
public int VictimID { get; set; } public int VictimID { get; set; }
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.PedKilled);
List<byte> byteArray = new List<byte>(); List<byte> byteArray = new List<byte>();
byteArray.AddInt(VictimID); byteArray.AddInt(VictimID);
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -13,6 +13,7 @@ namespace RageCoop.Core
public class VehicleSync : Packet public class VehicleSync : Packet
{ {
public override PacketType Type { get { return PacketType.VehicleSync; } }
public int ID { get; set; } public int ID { get; set; }
public int OwnerID { get; set; } public int OwnerID { get; set; }
@ -63,10 +64,8 @@ namespace RageCoop.Core
public string LicensePlate { get; set; } public string LicensePlate { get; set; }
#endregion #endregion
public override void Pack(NetOutgoingMessage message) public override byte[] Serialize()
{ {
#region PacketToNetOutGoingMessage
message.Write((byte)PacketType.VehicleSync);
List<byte> byteArray = new List<byte>(100); List<byte> byteArray = new List<byte>(100);
@ -166,14 +165,10 @@ namespace RageCoop.Core
byteArray.Add((byte)(Livery+1)); byteArray.Add((byte)(Livery+1));
} }
byte[] result = byteArray.ToArray(); return byteArray.ToArray();
message.Write(result.Length);
message.Write(result);
#endregion
} }
public override void Unpack(byte[] array) public override void Deserialize(byte[] array)
{ {
#region NetIncomingMessageToPacket #region NetIncomingMessageToPacket
BitReader reader = new BitReader(array); BitReader reader = new BitReader(array);

View File

@ -144,7 +144,7 @@ namespace RageCoop.Server.Scripting
Server.RequestHandlers.Add(PacketType.FileTransferRequest, (data,client) => Server.RequestHandlers.Add(PacketType.FileTransferRequest, (data,client) =>
{ {
var p = new Packets.FileTransferRequest(); var p = new Packets.FileTransferRequest();
p.Unpack(data); p.Deserialize(data);
var id=Server.NewFileID(); var id=Server.NewFileID();
if(RegisteredFiles.TryGetValue(p.Name,out var s)) if(RegisteredFiles.TryGetValue(p.Name,out var s))
{ {

View File

@ -301,7 +301,7 @@ namespace RageCoop.Server
byte[] data = message.ReadBytes(len); byte[] data = message.ReadBytes(len);
Packets.Handshake packet = new(); Packets.Handshake packet = new();
packet.Unpack(data); packet.Deserialize(data);
GetHandshake(message.SenderConnection, packet); GetHandshake(message.SenderConnection, packet);
} }
catch (Exception e) catch (Exception e)
@ -448,7 +448,7 @@ namespace RageCoop.Server
{ {
Packets.PedSync packet = new(); Packets.PedSync packet = new();
packet.Unpack(data); packet.Deserialize(data);
PedSync(packet, sender); PedSync(packet, sender);
@ -457,7 +457,7 @@ namespace RageCoop.Server
case PacketType.VehicleSync: case PacketType.VehicleSync:
{ {
Packets.VehicleSync packet = new(); Packets.VehicleSync packet = new();
packet.Unpack(data); packet.Deserialize(data);
VehicleSync(packet, sender); VehicleSync(packet, sender);
@ -467,7 +467,7 @@ namespace RageCoop.Server
{ {
Packets.ProjectileSync packet = new(); Packets.ProjectileSync packet = new();
packet.Unpack(data); packet.Deserialize(data);
ProjectileSync(packet, sender); ProjectileSync(packet, sender);
} }
@ -480,7 +480,7 @@ namespace RageCoop.Server
{ {
return Security.Decrypt(b,sender.EndPoint); return Security.Decrypt(b,sender.EndPoint);
}); });
packet.Unpack(data); packet.Deserialize(data);
ChatMessageReceived(packet.Username,packet.Message, sender); ChatMessageReceived(packet.Username,packet.Message, sender);
} }
@ -488,7 +488,7 @@ namespace RageCoop.Server
case PacketType.CustomEvent: case PacketType.CustomEvent:
{ {
Packets.CustomEvent packet = new Packets.CustomEvent(); Packets.CustomEvent packet = new Packets.CustomEvent();
packet.Unpack(data); packet.Deserialize(data);
_worker.QueueJob(() => API.Events.InvokeCustomEventReceived(packet, sender)); _worker.QueueJob(() => API.Events.InvokeCustomEventReceived(packet, sender));
} }
break; break;
@ -851,7 +851,7 @@ namespace RageCoop.Server
if (received.WaitOne(timeout)) if (received.WaitOne(timeout))
{ {
var p = new T(); var p = new T();
p.Unpack(response); p.Deserialize(response);
return p; return p;
} }
else else