실버바인 서버 엔진 2에서는 코드 생성을 광범위하게 사용합니다. Silvervine.CodeGen 프로젝트가 코드 생성기인데, 이것을 사용해서 .schema 파일들을 컴파일해서 소스 코드를 자동 생성해냅니다. .schema 파일들은 실버바인 서버 엔진 2에서 자체 정의한 인터페이스 선언 언어입니다. 언어 자체에 내장된 요소는 거의 없고, 각 용도별로 만든 확장(Extension)마다 문법을 정의하고 기능을 구현했습니다.
TODO: 설명 추가
TODO: 설명 추가
TODO: 설명 추가
자세한 설명은 생략합니다.
만들고자 하는 것과 비슷한 역할을 하는 .schema 파일을 샘플에서 찾아보시고, 이것을 변경해서 원하는 것을 만들어보시길 권장합니다.
우선, 프로젝트에 속한 모든 .schema 파일을 하나의 C# 프로젝트에 몰아넣으세요. 이 프로젝트를 스키마 프로젝트라고 부릅시다. 스키마 프로젝트에는 .schema 이외에는 다른 아무것도 넣지 않으시기를 권장합니다. 왜냐하면, .schema 파일들을 빌드하는 데 약간 시간이 걸리기 때문입니다. 다른 소스코드와 같은 프로젝트에 넣으면, 프로젝트의 다른 소스코드가 변경될 때마다 매번 .schema를 다시 처리해야 해서 빌드가 무거워집니다.
아 참, _dummy.cs 파일 하나는 넣어두셔야 합니다. .schema 파일을 한 프로젝트에 몰아넣으면 설정하기도 쉽고 빌드도 빠르지만, C# 소스코드가 하나도 들어있지 않으면 빌드를 할 필요가 없는 상태에서도 다시 빌드를 하는 문제가 있습니다. 코드 생성기가 작업을 완료할 때마다 C# 소스코드의 날짜를 최신으로 갱신하면 그런 문제가 발생하지 않습니다.
-_-;
Source/Proto/Silvervine.Schema 프로젝트의 _dummy.schema 파일을 참고하세요.
스키마 프로젝트의 빌드 전 이벤트에 다음과 비슷한 명령을 넣으세요.
"$(ProjectDir)..\..\Server\CodeGen\bin\CodeGen.exe" "$(ProjectDir)*.schema"
그리고 'CodeGen -> 스키마 프로젝트 -> 생성되는 소스코드가 들어있는 프로젝트' 순서로 빌드되어야 하므로,
.schema 파일로부터 생성되는 소스코드가 들어있는 프로젝트들을 각각 솔루션 탐색기에서 우클릭해서 빌드 종속성 > 프로젝트 종속성...
을 선택하시고
스키마 프로젝트에 종속되도록 체크하세요. 같은 방법으로 스키마 프로젝트를 CodeGen 프로젝트에 종속되도록 설정하세요.
프로젝트 종속성 설정을 제대로 해도, 코드젠이 수정되었는데 스키마가 다시 빌드되지 않는 경우가 보고되었습니다. 이럴 때는 참조로 대신하면 됩니다. 원인은 모르겠네요...
SSE2.sln의 Silvervine.Schema 프로젝트를 참고하시면 됩니다.
각 프로젝트에서 코드 생성기의 확장(Extension)을 만들어서 쓸 수 있습니다. 메시지 직렬화 방식과 핸들러 구현과 같은 것을 프로젝트마다 선택하고 싶을 것이므로, 엔진에서 하나를 골라 기본 탑재하지 않고 각 프로젝트에서 직접 만들어서 쓸 수 있도록 그렇게 만들었습니다.
샘플의 ExtendedCodeGen 프로젝트를 참고하세요. ExtendedCodeGen 프로젝트에 JsonMessaging과 BinaryMessaging 확장이 들어있습니다. 대부분의 프로젝트에서 메시지 직렬화와 핸들러 구현이 필요할 테니, 이것 중 하나를 골라서 여러분의 프로젝트로 복사해 가시길 권장합니다.
그리고 스키마 프로젝트에서 Silvervine.CodeGen 대신 여러분의 코드 생성기 프로젝트에 종속되도록 설정하세요.
(엔진 리파지터리)/Tool/CodeGenVS.vsix 를 설치하세요.