Files
MBN_STOCK_WEBVIEW/docs/LEGACY_PLAYOUT_ANALYSIS.md

53 lines
4.2 KiB
Markdown

# 원본 Tornado 송출 흐름 분석
이 문서는 `MBN_STOCK_N``MainForm`, `Scene` 35개 및 `PageN`/`Nxt_PageN`을 새 송출 어댑터와 대조한 기준선입니다. 원본 파일은 읽기만 했으며 새 저장소로 복사하지 않았습니다.
## MainForm 호출 순서
원본 연결은 UI STA에서 `KTAPConnect(1, "127.0.0.1", 30001, 0, event)`를 호출한 뒤 `GetScenePlayer()`를 얻습니다. 연결 성공 판정은 재연결 코드와 동일하게 반환값 `1`입니다.
새 장면 PREPARE의 기준 순서는 다음과 같습니다.
1. `LoadScene(Cuts\<file>.t2s, <scene alias>)`
2. layout `10`에 fade effect `7``FadeInSec` 적용
3. `BeginTransaction()`
4. 장면별 데이터와 오브젝트 변경
5. `scene.QueryVariables()`
6. `EndTransaction()`
7. `player.Prepare(10, scene)`
TAKE IN은 준비된 장면에 `Play(10)`을 호출하고 `m_TakeIn=true`로 전환합니다. TAKE OUT은 과거 `CutOut(10)` 대신 현재 운영 코드와 동일하게 `StopAll()`을 사용하고 on-air 상태를 해제합니다. NEXT는 `m_TakeIn`이 참일 때만 실행되므로 IDLE 또는 PREPARED 상태에서 바로 출력을 시작해서는 안 됩니다.
`DynamicK3dSession`은 위 COM 호출 순서와 layout/effect/TAKE OUT 동작을 보존합니다. `TornadoPlayoutEngine`도 on-air 상태가 없으면 NEXT를 COM 호출 전에 거부합니다.
## Scene 빌더의 범위
원본 `Scene` 폴더에는 35개 빌더가 있습니다. 단순 텍스트와 가시성 외에도 색상, 위치, 크기, crop key, path point, 그래프 데이터, 배경 texture/video 등 장면별 K3D 변형을 수행합니다. 이 로직은 데이터 조회와 WinForms 컨트롤에 강하게 결합되어 있어 단순한 Web 제목/설명 문자열로 대체할 수 없습니다.
현재 어댑터의 `PlayoutField`는 COM 경계를 검증하는 공통 `SetValue`/`SetVisible`만 표현합니다. Web bridge는 presentation용 `title`/`detail`을 장면 데이터인 것처럼 버리거나 추측하지 않고, PREPARE/NEXT에 검증된 scene code만 보냅니다. 따라서 승인된 `5001.t2s`/`5006.t2s` 연결 시험은 파일 load·prepare·play·stop 경로를 검증하지만 원본 시장 데이터가 채워진 방송 화면의 동등성을 증명하지 않습니다.
장면 데이터를 포팅할 때는 scene code별 builder가 Core의 조회 결과를 명시적인 mutation DTO로 변환하고, 허용된 K3D 메서드만 어댑터가 실행하도록 확장해야 합니다. 오브젝트 이름이나 메서드를 Web 입력에서 임의로 전달하는 범용 reflection API는 만들지 않습니다.
## PageN과 NEXT
`PageN``Nxt_PageN`은 조회 행 수를 5·6·12개 단위로 나눠 최대 20페이지의 `m_pcnt`를 계산합니다. `MainForm.Next_Scene`은 5단/6종목/12종목 장면에서 다음 플레이리스트 항목으로 즉시 이동하지 않고 다음 페이지 데이터를 같은 scene에 다시 채웁니다. 경로에 따라 새 scene을 load하거나 `GetPlayingScene(10)`을 얻어 transaction 후 다시 prepare/play합니다.
현재 Web NEXT는 on-air 상태에서 다음 플레이리스트 cue를 prepare/play하는 어댑터 수준의 동작입니다. `m_pcnt`, 현재 페이지, 같은 scene의 in-place update 및 `GetPlayingScene` 기반 갱신은 아직 장면 builder 계층이 없으므로 구현 범위에 포함되지 않습니다. 운영 동등성 검증에서는 이 항목을 별도 완료 조건으로 추적해야 하며, 현재 Test 시퀀스 성공을 PageN 포팅 완료로 해석하지 않습니다.
## 현재 Test 판정 범위
격리 Test에서 확인할 수 있는 범위는 다음과 같습니다.
- x64 COM 활성화와 KTAP 연결/해제
- 승인된 `.t2s`의 load와 scene alias
- transaction, `QueryVariables`, layout 10 prepare
- TAKE IN, 다음 cue의 NEXT, TAKE OUT `StopAll`
- STA 직렬화, timeout, 프로세스 교체 및 오류 상태
다음 항목은 별도 장면 마이그레이션 작업이 필요합니다.
- 35개 scene builder의 데이터/시각 속성 동등성
- `PageN`/`Nxt_PageN` 페이지 계산과 같은 scene 갱신
- 배경 영상·texture 및 그래프/path mutation
- 실제 시장 데이터와 원본 화면의 픽셀/내용 비교