docs: NPC 명령 선택기 항목 제거, Server Action Queue 추가
- NPC 명령 선택은 기존처럼 동기 모드로 구현 - 로직을 최대한 기존과 유사하게 - Server Action Queue 추가 - 외부 이벤트 루프가 관리
This commit is contained in:
+7
-26
@@ -51,12 +51,13 @@ Collection은 다양하나, 게임 엔진에 필요한 값과 게임 엔진에
|
||||
게임 엔진은 내부적으로 세개의 처리 큐를 가집니다.
|
||||
|
||||
- 장수 처리 Queue: 턴마다 처리되는 장수 명령 처리 Queue입니다.
|
||||
- NPC Action Queue: NPC의 명령을 처리하는 Queue입니다.
|
||||
- NPC 명령 선택기의 입력 요청이 이곳에 쌓입니다.
|
||||
- 유저 Action Queue: 유저의 명령을 처리합니다.
|
||||
- 내부적으로는 Double Ended Queue로 구현한 일종의 Priority Queue입니다.
|
||||
- Server Action Queue: 서버 내 각종 외부 이벤트를 처리하는 Queue입니다.
|
||||
- 경매, 토너먼트, 관리자 처리등이 해당합니다.
|
||||
- User Action Queue: 유저의 명령을 처리합니다.
|
||||
- API 처리기를 통해 전달됩니다.
|
||||
|
||||
세개의 처리 큐는 장수 처리 Queue > NPC Action Queue > 유저 Action Queue 순의 우선순위를 가집니다.
|
||||
세개의 처리 큐는 장수 처리 Queue > Server Action Queue > User Action Queue 순의 우선순위를 가집니다.
|
||||
|
||||
#### DB 반영 시점
|
||||
|
||||
@@ -66,20 +67,6 @@ MongoDB에 데이터가 기록되는 시점은 Queue의 아이템 하나를 해
|
||||
게임 엔진 내에서 변경되는 내용은 메모리 내의 저장소에만 담아두고, 처리를 마치는 시점에 변경된 내용을 정리하여 한번에 쓰기 작업을 수행하여 Transaction을 모사합니다.
|
||||
|
||||
|
||||
### NPC 명령 선택기
|
||||
|
||||
NPC 명령 선택기는 NPC가 어떤 턴을 실행해야할지만을 연산하는 컴포넌트입니다.
|
||||
|
||||
NPC의 실행턴보다 일정 시간 이전에 적절한 턴이 무엇인지 계산하고, 게임 엔진으로 결과값을 전송합니다.
|
||||
|
||||
이때 명령의 규격은 일반 유저가 내리는 명령 규격과 유사한 형태를 갖습니다.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> 기존 삼모전 PHP에서는 명령 선택기가 게임 엔진과 동기적으로 구성되어있었습니다.
|
||||
|
||||
|
||||
|
||||
### API 처리기
|
||||
|
||||
API 처리기는 유저의 명령을 받아 1차적으로 처리합니다.
|
||||
@@ -100,6 +87,8 @@ API 처리기는 유저의 명령을 받아 1차적으로 처리합니다.
|
||||
|
||||
API 처리기와 연계되어(= 같은 스레드에서) 운용됩니다.
|
||||
|
||||
외부 이벤트 처리기가 게임 엔진에 요청하는 경우 `Server Action Queue`를 사용합니다.
|
||||
|
||||
## 기존 삼국지 모의전투 PHP와 비교하여 달라진 부분
|
||||
|
||||
### 게임 엔진
|
||||
@@ -110,14 +99,6 @@ PHP 버전에서 장수 처리 Queue는 `sammo::TurnExecutionHelper`에 해당
|
||||
|
||||
이러한 처리 방법은 장수 처리 Queue 하나만으로 운영되는 형태로 생각할 수 있습니다.
|
||||
|
||||
### NPC 명령 선택기
|
||||
|
||||
NPC의 실행 턴이 무엇이 될지는 엔진내에 NPC 턴 실행 직전에 결정되므로, 게임 엔진 에서 처리되어있다고 볼 수 있습니다.
|
||||
|
||||
`sammo::GeneralAI`가 처리를 전담하고 있으며, `sammo::TurnExecutionHelper`가 `sammo::GeneralAI::chooseNationTurn()`, `sammo::GeneralAI::chooseGeneralTurn()`를 호출하는 방식입니다.
|
||||
|
||||
게임 엔진과 분리되어 있지 않으므로, 턴 입력, 세율 조정 등의 작업이 직접 이루어졌습니다.
|
||||
|
||||
### API 처리기
|
||||
|
||||
유기체 서버 시절에서는 `c_*.php` 계열 함수들이 API를 처리하는 형태였고, 이후 HiDCHe 에서 json web api 처리를 위해 `j_*.php` 계열 함수들이 추가되었습니다.
|
||||
|
||||
Reference in New Issue
Block a user