63 lines
2 KiB
C#
63 lines
2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Lidgren.Network;
|
|
using UnityEngine;
|
|
|
|
namespace SRMultiplayer.Packets
|
|
{
|
|
public abstract class Packet : IPacket
|
|
{
|
|
/// <summary>
|
|
/// Parameterless constructor to be used through inheritance
|
|
/// </summary>
|
|
public Packet() { }
|
|
|
|
/// <summary>
|
|
/// Incoming message based construtor that deserielizes the item for the message
|
|
/// </summary>
|
|
public Packet(NetIncomingMessage im) { Deserialize(im); }
|
|
|
|
|
|
/// <summary>
|
|
/// Searilizes the given packet item
|
|
/// </summary>
|
|
/// <param name="om">Outgoing Message that the packet should be added to</param>
|
|
public virtual void Serialize(NetOutgoingMessage om)
|
|
{
|
|
om.Write((ushort)GetPacketType());
|
|
//writes the object type using the gettype name
|
|
//this allows the object to assume its object packet type
|
|
//om.Write(this.GetType().AssemblyQualifiedName);
|
|
//
|
|
|
|
om.WriteAllFields(this, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Deserializes the given packet item
|
|
/// </summary>
|
|
/// <param name="om">Incoming Message that the packet should be deserialized from</param>
|
|
public virtual void Deserialize(NetIncomingMessage im)
|
|
{
|
|
im.ReadAllFields(this, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
|
|
}
|
|
|
|
|
|
|
|
public PacketType GetPacketType()
|
|
{
|
|
PacketAttribute packet = (PacketAttribute)Attribute.GetCustomAttribute(GetType(), typeof(PacketAttribute));
|
|
if (packet != null)
|
|
{
|
|
return packet.Type;
|
|
}
|
|
else
|
|
{
|
|
SRMP.Log($"Packet {GetType()} has no attribute");
|
|
return PacketType.Unknown;
|
|
}
|
|
}
|
|
}
|
|
}
|