Serialization3 03_05_패킷 직렬화_Serialization #4_List< > 확인 테스트 Q1. List를 직렬화 하기 위해 한 작업들을 나열해 보세요. → -> PlayerInfoReq 클래스에 SkillInfo구조체를 선언하고, 그 구조체를 들고 있는 List인 skills를 생성한다. public struct SkillInfo { public int id; public short level; public float duration; } public List skills = new List(); ->ServerSession의 Write에 List가 가지고 있는 갯수를 buffer에 밀어 넣고, foreach로 List를 순회한다. // skill list success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - coun.. Server programming 2023. 4. 13. 03_04_패킷 직렬화_Serialization #3_string 확인 Test Q1. string의 경우 long이나 ushort와 달리 파싱할 때 문제가 있는 이유가 무엇인가? ->길이를 알지 못하기 떄문에 ToInt64나 ToInt16같은 걸 써서 파싱할 수 없다. Q2. 코드를 깔끔하게 해주기 위해 어떤 개선을 해줬는가? -> 상수를 sizeof를 이용해 바꿨고, Span의 범위를 다시 집을 때 Slice를 사용했다. Q3. string을 buffer에 밀어 넣을 때 UTF-16을 선택하는게 나은 이유는? -> C#에서 string이 기본적으로 UTF-16으로 되어 있기 때문이다. Q4. string이 몇 바이트인지 모르기 때문에 몇 바이트 짜리가 와야 성공적으로 조립을 할 수 있는건지 알기 힘들다. 이 때 해결책은? -> string의 length를 먼저 2바.. Server programming 2023. 4. 12. 03_02_패킷 직렬화_Serialization #2_자동화 확인 테스트 Q1. 어떻게 자동화를 하면 좋을까요? -> 쓰는 부분과 읽는 부분을 함수로 빼서 Packet클래스를 상속받은 PlayerInfoReq클래스에 정의해 사용합니다. Q2. Write와 Read의 다른 점은 무엇인가요? -> 전부 다 Read에서 뽑는게 아니라 size와 id는 OnRecvPacket에서 뽑고 playerId만 Read에서 뽑는다. Q3. Read에서 size와 id를 추출할 필요가 없는 이유는 무엇인가요? -> size와 id는 OnRecvPacket에서 뽑고 Read를 호출하기 때문이다. Read가 같은 buffer를 넘겨 받고 같은 프로토콜을 사용하고 있기 때문이다. Q4. Read에서 무엇을 하는가? ->PlayerInfoReq의 멤버 변수 playerId의 값을 buff.. Server programming 2023. 4. 11. 이전 1 다음