Files
core_ng/docs/threads.drawio.svg
Hide_D 918bb997b9 docs: NPC 명령 선택기 항목 제거, Server Action Queue 추가
- NPC 명령 선택은 기존처럼 동기 모드로 구현
  - 로직을 최대한 기존과 유사하게
- Server Action Queue 추가
  - 외부 이벤트 루프가 관리
2024-03-09 18:14:15 +00:00

228 lines
21 KiB
XML

<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="511px" height="351px" viewBox="-0.5 -0.5 511 351" content="&lt;mxfile&gt;&lt;diagram id=&quot;wkgMyGHKSWno4An-QBqW&quot; name=&quot;페이지-1&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;">
<defs/>
<g>
<path d="M 390 285 C 390 276.72 416.86 270 450 270 C 465.91 270 481.17 271.58 492.43 274.39 C 503.68 277.21 510 281.02 510 285 L 510 335 C 510 343.28 483.14 350 450 350 C 416.86 350 390 343.28 390 335 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 510 285 C 510 293.28 483.14 300 450 300 C 416.86 300 390 293.28 390 285" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 323px; margin-left: 391px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
MongoDB
<br/>
(게임 내부)
</div>
</div>
</div>
</foreignObject>
<text x="450" y="326" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
MongoDB...
</text>
</switch>
</g>
<path d="M 110 285 C 110 276.72 136.86 270 170 270 C 185.91 270 201.17 271.58 212.43 274.39 C 223.68 277.21 230 281.02 230 285 L 230 335 C 230 343.28 203.14 350 170 350 C 136.86 350 110 343.28 110 335 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 230 285 C 230 293.28 203.14 300 170 300 C 136.86 300 110 293.28 110 285" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 323px; margin-left: 111px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
MongoDB
<br/>
(게임 외부)
</div>
</div>
</div>
</foreignObject>
<text x="170" y="326" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
MongoDB...
</text>
</switch>
</g>
<rect x="110" y="120" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 150px; margin-left: 111px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
API 처리기
<br/>
<br/>
외부 이벤트 처리기
</div>
</div>
</div>
</foreignObject>
<text x="170" y="154" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
API 처리기...
</text>
</switch>
</g>
<rect x="390" y="120" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 150px; margin-left: 391px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
게임 엔진
</div>
</div>
</div>
</foreignObject>
<text x="450" y="154" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
게임 엔진
</text>
</switch>
</g>
<path d="M 182 186.37 L 182 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 182 181.12 L 185.5 188.12 L 182 186.37 L 178.5 188.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 232.93 182.95 L 406.8 274" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 228.28 180.52 L 236.11 180.67 L 232.93 182.95 L 232.86 186.87 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 383.63 135 L 230 135" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 388.88 135 L 381.88 138.5 L 383.63 135 L 381.88 131.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 236.37 150 L 390 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/>
<path d="M 231.12 150 L 238.12 146.5 L 236.37 150 L 238.12 153.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 438 180 L 438 263.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 438 268.88 L 434.5 261.88 L 438 263.63 L 441.5 261.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 158 180 L 158 263.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 158 268.88 L 154.5 261.88 L 158 263.63 L 161.5 261.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 462 186.37 L 462 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 462 181.12 L 465.5 188.12 L 462 186.37 L 458.5 188.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<rect x="350" y="200" width="90" height="30" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 215px; margin-left: 351px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
변경된
<br/>
장수/도시/국가
<br/>
데이터 전달
</div>
</div>
</div>
</foreignObject>
<text x="395" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
변경된장수/도시/국가...
</text>
</switch>
</g>
<rect x="255" y="106" width="120" height="30" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 121px; margin-left: 256px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
턴 입력 요청
<br/>
게임 데이터 변경 요청
</div>
</div>
</div>
</foreignObject>
<text x="315" y="125" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
턴 입력 요청...
</text>
</switch>
</g>
<rect x="255" y="134" width="120" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 144px; margin-left: 256px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
처리 결과 반환
</div>
</div>
</div>
</foreignObject>
<text x="315" y="148" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
처리 결과 반환
</text>
</switch>
</g>
<ellipse cx="15" cy="127.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
<path d="M 15 135 L 15 160 M 15 140 L 0 140 M 15 140 L 30 140 M 15 160 L 0 180 M 15 160 L 30 180" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 187px; margin-left: 15px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">
Actor
</div>
</div>
</div>
</foreignObject>
<text x="15" y="199" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
Actor
</text>
</switch>
</g>
<path d="M 103.63 135 L 40 135" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 108.88 135 L 101.88 138.5 L 103.63 135 L 101.88 131.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 46.37 165 L 110 165" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 41.12 165 L 48.12 161.5 L 46.37 165 L 48.12 168.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 236.37 165 L 390 165" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 231.12 165 L 238.12 161.5 L 236.37 165 L 238.12 168.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<rect x="256" y="171" width="120" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 181px; margin-left: 257px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
특정 명령 처리 요구
<br/>
(메시지 전송 등)
</div>
</div>
</div>
</foreignObject>
<text x="316" y="185" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
특정 명령 처리 요구...
</text>
</switch>
</g>
<path d="M 392.71 180 L 218.84 271.05" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/>
<path d="M 214.19 273.48 L 218.77 267.13 L 218.84 271.05 L 222.02 273.33 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 410 15 C 410 6.72 427.91 0 450 0 C 460.61 0 470.78 1.58 478.28 4.39 C 485.79 7.21 490 11.02 490 15 L 490 55 C 490 63.28 472.09 70 450 70 C 427.91 70 410 63.28 410 55 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/>
<path d="M 490 15 C 490 23.28 472.09 30 450 30 C 427.91 30 410 23.28 410 15" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 48px; margin-left: 411px;">
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
In-memory cache
</div>
</div>
</div>
</foreignObject>
<text x="450" y="51" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
In-memory cac...
</text>
</switch>
</g>
<path d="M 450 76.37 L 450 113.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 450 71.12 L 453.5 78.12 L 450 76.37 L 446.5 78.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 450 118.88 L 446.5 111.88 L 450 113.63 L 453.5 111.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
</g>
<switch>
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
Text is not SVG - cannot display
</text>
</a>
</switch>
</svg>