참조 하는법
https://github.com/google/flatbuffers/releases
Releases · google/flatbuffers
FlatBuffers: Memory Efficient Serialization Library - google/flatbuffers
github.com
위 링크에 들어가서 Windows.flatc.binary.zip, Source code.zip을 다운받으면 된다.
Source code폴더의 net/Flatbuffers 위치에서 아래 명령문을 실행해주면 된다.
dotnet build -f netstandard2.1 "FlatBuffers.csproj"
그 이후 bin/Debug/netstandard2.1 안에 .dll 파일이 있을건데 그것을 사용하면 된다.
프로젝트 속성 → 추가 → COM 참조
추가로 나오는 창에서 찾아보기를 눌러 아까의 .dll 파일을 참조시키면 사용할 수 있다.
이제 .cs 파일 생성 방법을 알아보자
.cs 파일 생성
아까 다운받은 binary 폴더에 flatc.exe가 있었을 것이다.
그것과 .fbs 파일들을 사용해 .cs 파일들을 생성해 사용해주면 된다.
.fbs에서 사용되는 기본 문법들은 아래와 같다.
include any_proto.fbs; // 다른 .fbs 참조
// 테이블 선언
table [name] {
var_name:type; // 변수명:자료형
...
}
enum ExamEnum : uint8 {
TEST1,
TEST2,
...
}
table Test1 {
}
table Test2 {
}
union Tests { // 인터페이스
Test1,
Test2,
}
table IncTest {
test:Tests; // Tests는 Test1, Test2 둘다 가능
}
아래는 자주 쓰이는 문법에 관한 추가 설명표이다.
자료형 | 뜻 |
table, struct | 구조체(프로토콜) |
uint8~uint64, int8~int64 | byte ~ ulong, char ~ long |
string | 문자열 |
include | 다른 .fbs 파일 참조 |
[T] | T 자료형 배열로 사용 |
union | 인터페이스(기본값은 enum) |
enum : (u)int8 ~ (u)int64 | enum |
이제 flact.exe를 이용해 .fbs를 컴파일하고 .cs파일을 뽑아오는 방법을 알아보자
./flatc.exe --csharp %fileList%
%fileList%는 .fbs 파일들이다. 사용하는 모든 .fbs 파일을 여기에 넣어주면 된다.
당연한 말이지만 절대 경로든 상대경로든 정확히 지정해줘야하고 flatc를 실행한 위치에 .cs파일이 나온다.
실제 코드에서 사용방법은 위 코드처럼 사용하면 된다.
직렬화 할 때 Start[packet_name] 메서드 말고 Create[packet_name]도 있는데 이건 멤버 변수가 있을 때만 사용 가능하다.
Finish를 하게되면 FlatBufferBuilder 내부에서 패킷를 알아서 직렬화 해준다.
SizedByteArray()는 Finish로 설정된 패킷 직렬화 된걸 반환해준다.
직렬화 순서는 아래처럼 이해할 수 있다.
- Start[packet_name] - End[packet_name] or Create[packet_name]으로 Offset<packet_name>을 만든다.
- Finish 메서드로 빌더에 패킷을 설정해준다.
- SizedByteArray를 통해 직렬화한다.
역직렬화는 간단하다.
ByteBuffer를 만들 때 byte[]로 생성해준 뒤
GetRootAs[packet_name](ByteBuffer)를 통해 바로 역직렬화가 가능하다.
'잡지식' 카테고리의 다른 글
MSB8011 | MSB3073 에러 해결법 (0) | 2024.12.06 |
---|---|
42서울 본과정 후기 (0) | 2024.10.11 |
Visual Studio BOM 없이 파일 저장하는법 (0) | 2024.08.14 |
Visual studio 메모리 릭 확인하기 (0) | 2024.08.07 |
Visual Studio 라이브러리 프로젝트 참조 (C/C++) (0) | 2024.07.22 |