From 918bb997b9719bab2fe5f3ce5cace66c92143d79 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Sat, 9 Mar 2024 18:14:15 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20NPC=20=EB=AA=85=EB=A0=B9=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=EA=B8=B0=20=ED=95=AD=EB=AA=A9=20=EC=A0=9C=EA=B1=B0,?= =?UTF-8?q?=20Server=20Action=20Queue=20=EC=B6=94=EA=B0=80=20-=20NPC=20?= =?UTF-8?q?=EB=AA=85=EB=A0=B9=20=EC=84=A0=ED=83=9D=EC=9D=80=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=EC=B2=98=EB=9F=BC=20=EB=8F=99=EA=B8=B0=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EA=B5=AC=ED=98=84=20=20=20-=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20=EC=B5=9C=EB=8C=80=ED=95=9C=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=EA=B3=BC=20=EC=9C=A0=EC=82=AC=ED=95=98=EA=B2=8C=20-?= =?UTF-8?q?=20Server=20Action=20Queue=20=EC=B6=94=EA=B0=80=20=20=20-=20?= =?UTF-8?q?=EC=99=B8=EB=B6=80=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=A3=A8?= =?UTF-8?q?=ED=94=84=EA=B0=80=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Component.md | 33 ++------ docs/engine_issue_port.drawio.svg | 123 +++++++++++------------------- docs/threads.drawio.svg | 63 +-------------- 3 files changed, 51 insertions(+), 168 deletions(-) diff --git a/docs/Component.md b/docs/Component.md index 31ff39c..013bc34 100644 --- a/docs/Component.md +++ b/docs/Component.md @@ -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` 계열 함수들이 추가되었습니다. diff --git a/docs/engine_issue_port.drawio.svg b/docs/engine_issue_port.drawio.svg index 246911a..8ce3dc8 100644 --- a/docs/engine_issue_port.drawio.svg +++ b/docs/engine_issue_port.drawio.svg @@ -1,4 +1,4 @@ - + @@ -129,68 +129,13 @@
- NPC Action Queue + Server Action Queue
- NPC Action Queue - - - - - - - -
-
-
- NPCa 세율 20% -
-
-
-
- - NPCa 세율 20% - -
-
- - - - -
-
-
- NPCa 턴1 -
- 출병 무위 -
-
-
-
- - NPCa 턴1... - -
-
- - - - -
-
-
- NPCc 턴1 -
- 귀환 -
-
-
-
- - NPCc 턴1... + Server Action Queue
@@ -201,15 +146,15 @@
- 장수f 경매결과 + 국가a
- 백마 획득 + 세율 30%
- 장수f 경매결과... + 국가a... @@ -220,35 +165,34 @@
- 시스템 + 장수x(국가b)
- 적토마 잠금 + 사령턴1 발령
- 시스템 -적토마 잠금 + 장수x(국가b)... - + -
+
- 국가a + 장수f 경매결과
- 세율 30% + 백마 획득
- - 국가a... + + 장수f 경매결과... @@ -259,34 +203,53 @@
- 장수x(국가b) + 유니크 경매
- 사령턴1 발령 + 적토마 잠금
- 장수x(국가b)... + 유니크 경매... - + -
+
- NPCd(국가a) + 토너먼트 우승자
- 사령턴1 포상 + 장수b
- - NPCd(국가a)... + + 토너먼트 우승자... + + + + + + + +
+
+
+ 설문 유니크 시도 +
+ 장수 c +
+
+
+
+ + 설문 유니크 시도...
diff --git a/docs/threads.drawio.svg b/docs/threads.drawio.svg index 15a5c2c..259a984 100644 --- a/docs/threads.drawio.svg +++ b/docs/threads.drawio.svg @@ -1,4 +1,4 @@ - + @@ -79,23 +79,6 @@
- - - - -
-
-
- NPC 명령 선택기 -
-
-
-
- - NPC 명령 선택기 - -
-
@@ -104,14 +87,8 @@ - - - - - - @@ -137,44 +114,6 @@ - - - - -
-
-
- NPC별 -
- 턴 입력 -
-
-
-
- - NPC별... - -
-
- - - - -
-
-
- NPC별 -
- 턴 입력 요청 -
-
-
-
- - NPC별... - -
-