Kendi sistemim için yazdığım classları vermek istiyorum.
public abstract class Packet
{
protected MemoryStream Buffer;
public PacketType Opcode { get; set; }
public byte[] ToArray()
{
return Buffer.ToArray();
}
}
public class PacketReader : Packet
{
private readonly BinaryReader Reader;
public long Lenght { get { return Buffer.Length; } }
public long Position
{
get { return Buffer.Position; }
set { Buffer.Position = value; }
}
public PacketReader(byte[] Data)
{
Buffer = new MemoryStream(Data, false);
Reader = new BinaryReader(Buffer, Encoding.Default);
Opcode = (PacketType)ReadByte();
}
public void Reset(int length)
{
Buffer.Seek(length, SeekOrigin.Begin);
}
public void Skip(int length)
{
Buffer.Position += length;
}
public byte ReadByte()
{
return Reader.ReadByte();
}
public byte[] ReadBytes(int Count)
{
return Reader.ReadBytes(Count);
}
public bool ReadBool()
{
return Reader.ReadBoolean();
}
public short ReadShort()
{
return Reader.ReadInt16();
}
public int ReadInt()
{
return Reader.ReadInt32();
}
public long ReadLong()
{
return Reader.ReadInt64();
}
public string ReadString()
{
return Reader.ReadString();
}
}
public class PacketWriter : Packet
{
private readonly BinaryWriter Writer;
public long Lenght { get { return Buffer.Length; } }
public long Position
{
get { return Buffer.Position; }
set { Buffer.Position = value; }
}
public PacketWriter(PacketType OpCode)
{
Buffer = new MemoryStream(0);
Writer = new BinaryWriter(Buffer, Encoding.Default);
Opcode = OpCode;
Writer.Write((byte)Opcode);
}
public void Reset(int length)
{
Buffer.Seek(length, SeekOrigin.Begin);
}
public void WriteByte(byte _Byte)
{
Writer.Write(_Byte);
}
public void WriteBytes(byte[] _Byte)
{
Writer.Write(_Byte);
}
public void WriteBool(bool _Bool)
{
Writer.Write(_Bool);
}
public void WriteShort(short _Short)
{
Writer.Write(_Short);
}
public void WriteInt(int _Int)
{
Writer.Write(_Int);
}
public void WriteLong(long _Long)
{
Writer.Write(_Long);
}
public void WriteString(string _String)
{
Writer.Write(_String);
}
}
public enum PacketType
{
Login = 1,
Message = 2,
Exit = 3,
}Socket Gönderimi Örnek :public void Send(Packet Pkt)
{
if (Socket.Connected)
{
Socket.Send(Pkt.ToArray());
}
}Kullanımı : PacketWriter Result = new PacketWriter(PacketType.Login);
Result.WriteString("Test");
Result.WriteString("123456");
Send(Result);
// Client varsayıp packeti okuma örnek olarak.
PacketReader Pkt = new PacketReader(Result.ToArray());
Console.WriteLine(string.Format("ID : {0} , Şifre : {1}", Pkt.ReadString(), Pkt.ReadString()));