안녕하세요.
개인적으로 쓸 일이 있어서 만들어보았는데
Nuget Library에 생각보다 별로 없는거 같아서 올려보았습니다.
Nuget 패키지명… 이름 오타여서 어떻게해야하나 고민했지만…
이것 또한 컨셉이라 생각하고 냅두기로 하였습니다.
다음은 패키지에서 제공하는 기능에 대한 간략한 설명입니다.
Chain형식의 Append 방식 기능 제공
PacketWriter writer = new PacketWriter()
.Append(0x01)
.Append(1)
.Append(1, false)
.Append(“ABC”)
.Append(“abc”);
var builder = new PacketBuilder ()
.Append(0x40)
.Append(0x41)
.Append(0x42)
.Append(0x43)
.Append(0x44)
.Append(0x45)
.Build();
확장메서드 제공
형식이 다른 타입의 경우 Class로 생성하여 처리할 것을 권장
byte[] abc = new byte[]{0x01, 0x02};
abc = abc.Append(0x01);
abc = abc.Append(1); // LITTLE ENDIAN
abc = abc.Append(1, false); // BIG ENDIAN
abc = abc.Append("ABC");
abc = abc.Append("abc");
서로 다른 Byte Array가 큰 덩어리 일때에만 사용할 것을 권장
byte[] abc = new byte[]{0x01, 0x02};
abc = abc.Append(new byte[]
{
0x03,
0x03,
0x03,
0x03,
0x03,
0x03,
0x03,
0x03,
});
Display용 string(string type)
var writer = new PacketWriter ()
.Append (0x40)
.Append (0x41)
.Append (0x42)
.Append (0x43)
.Append (0x44)
.Append (0x45);
var bytes = writer.GetBytes();
Console.WriteLine (bytes.Display ());
Console.WriteLine (bytes.DisplayAscii ());
var builder = new PacketBuilder ()
.Append (0x40)
.Append (0x41)
.Append (0x42)
.Append (0x43)
.Append (0x44)
.Append (0x45)
.Build();
Console.WriteLine (builder.Display ());
Console.WriteLine (builder.DisplayAscii ());
// output
// 404142434445
// @ABCDE
Array 또는 List의 byte타입 삽입
List<byte> testByte = new List<byte>(){0x51, 0x52, 0x53};
summaryByts = testByte.Append(new List<byte>
{
0x54,
0x55
});
var writer = new PacketWriter ();
writer.Append(new List<byte>()
{
0x40,
0x41,
0x42,
0x43,
0x44,
0x45,
});
/* and
writer.Append(new byte[]
{
0x40,
0x41,
0x42,
0x43,
0x44,
0x45,
});
*/
Class Type Insert
public class Test2Packet
{
public int Value;
[ByteSize (3)]
public string Value1;
[ByteSize (3)]
public string Value2;
}
var writer = new PacketWriter ()
.Append(new Test2Packet()
{
Value = 1,
Value1 = "abc",
Value2 = "Abc"
});
bytearray - class (Serialization, Deserialization)
public class Test2Packet
{
public int Value;
[ByteSize (3)]
public string Value1;
[ByteSize (3)]
public string Value2;
[ByteSize(4)]
public byte[] abc;
public byte[] efg = new byte[5];
public List<byte> qqq= new List<byte>(5);
public List<byte> qqq1= new List<byte>(); // ByteSize Attribute 또는 Capcacity값 설정 하지 않았기 때문에 삽입하지 않음
}
[Fact]
public void TestDeserializeObject()
{
var test = new byte[] { 0x01, 0x00, 0x00, 0x00, 0x61, 0x62,0x63,0x41,0x42,0x43, 0x01, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x41, 0x42, 0x43, 0x01, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x41, 0x42, 0x43 };
var aaa = PacketParse.DeserializeObject<Test2Packet> (test);
var abc = PacketParse.Serialization (aaa);
}
PacketByte에 필요한 기능이다 생각이 드는것들은 조금씩 조금씩 업데이트 예정이며,
현재 개발해놓은 부분에서 버그가 보인다면 바로 말씀 부탁드릴게요! 바로바로 수정하겠습니다