Network and IO (네트워크 및 입출력)
관련 소스 파일
•
GameFramework/Download/DownloadAgentHelperCompleteEventArgs.cs
•
GameFramework/Download/DownloadAgentHelperUpdateBytesEventArgs.cs
•
GameFramework/Download/DownloadAgentHelperUpdateLengthEventArgs.cs
•
GameFramework/Download/DownloadManager.DownloadAgent.cs
•
GameFramework/Download/DownloadManager.DownloadCounter.DownloadCounterNode.cs
•
GameFramework/Download/DownloadManager.DownloadCounter.cs
•
GameFramework/Download/DownloadManager.cs
•
GameFramework/Download/DownloadStartEventArgs.cs
•
GameFramework/Download/DownloadSuccessEventArgs.cs
•
GameFramework/Download/DownloadUpdateEventArgs.cs
•
GameFramework/Download/IDownloadAgentHelper.cs
•
GameFramework/Download/IDownloadManager.cs
•
GameFramework/Network/INetworkChannel.cs
•
GameFramework/Network/INetworkChannelHelper.cs
•
GameFramework/Network/INetworkManager.cs
•
GameFramework/Network/IPacketHeader.cs
•
GameFramework/Network/NetworkManager.cs
•
GameFramework/WebRequest/IWebRequestManager.cs
•
GameFramework/WebRequest/WebRequestManager.cs
소개
Network 및 IO 시스템은 게임 애플리케이션이 네트워크 연결, 파일 다운로드, 웹 요청 등을 수행할 수 있도록 지원합니다.
이는 온라인 기능 구현, 게임 콘텐츠 업데이트, 원격 서버와의 데이터 교환을 위해 필수적입니다.
개요
GameFramework의 Network 및 IO 시스템은 크게 세 가지 컴포넌트로 이루어져 있습니다:
1.
Network System: 패킷 기반 TCP 소켓 통신 관리
2.
Download System: 파일 다운로드 및 진행 상황 추적, 이어받기 지원
3.
Web Request System: HTTP 요청/응답 관리 (가벼운 서버 통신용)
각 시스템은 공통적으로 다음과 같은 아키텍처 패턴을 따릅니다:
•
중앙 Manager 클래스 (GameFrameworkModule 구현)
•
동시 작업 처리를 위한 Agent/Channel 풀
•
플랫폼별 구현을 위한 Helper 인터페이스
•
이벤트 기반 상태 변경 알림
Network System
네트워크 시스템은 TCP 소켓 기반 통신을 제공합니다.
여러 개의 독립적인 네트워크 채널, 하트비트 모니터링, 패킷 직렬화, 에러 처리 등을 지원합니다.
아키텍처
•
핵심 클래스: NetworkManager
•
여러 네트워크 채널을 관리 (각 채널은 소켓 연결 단위이며 이름으로 식별)
•
지원 서비스 타입:
◦
TCP: 일반 TCP 소켓 통신
◦
TCP with Sync Receive: 동기식 수신을 포함한 TCP
•
INetworkChannelHelper: 패킷 직렬화/역직렬화 및 하트비트 관리 등 플랫폼별 구현 제공
사용 흐름
1.
네트워크 채널 생성 (고유 이름과 Helper 지정)
2.
패킷 핸들러 등록
3.
원격 서버 연결
4.
패킷 송수신
5.
필요 시 채널 닫기
자동으로 하트비트 관리, 재연결, 에러 보고를 처리합니다.
Download System
다운로드 시스템은 파일 다운로드를 관리하며, 진행 상황 추적, 우선순위 지정, 에러 처리 등을 지원합니다.
아키텍처
•
핵심 클래스: DownloadManager
•
다운로드 작업(Task) 풀과 다운로드 속도 카운터 유지
•
개별 다운로드는 DownloadAgent가 담당하며, 플랫폼별 작업은 IDownloadAgentHelper가 구현
다운로드 과정
1.
클라이언트 코드에서 다운로드 작업 추가 (경로 및 URI 지정)
2.
매니저가 작업을 풀에 등록
3.
사용 가능한 에이전트가 작업 시작, 파일 스트림 열기
4.
헬퍼가 실제 다운로드 수행
5.
데이터 수신 → 파일에 기록, 진행 상황 추적
6.
이벤트 발생: 시작, 진행, 성공, 실패
주요 기능:
•
이어받기 지원 (부분 다운로드 재개)
•
다운로드 속도 추적 (시간 기반 카운터)
•
우선순위 부여 (다운로드 순서 제어)
•
태그 기반 다운로드 그룹화
•
버퍼 크기 설정 (디스크 기록 제어)
Web Request System
웹 요청 시스템은 서버와의 HTTP 통신을 처리합니다.
데이터 조회, 정보 전송 등 가벼운 네트워크 작업에 적합합니다.
아키텍처
•
핵심 클래스: WebRequestManager
•
요청을 처리하는 WebRequestAgent 풀 관리
•
플랫폼별 구현은 IWebRequestAgentHelper 제공
사용 예시
// GET 요청
int requestId = webRequestManager.AddWebRequest("https://example.com/api/data");
// POST 요청
byte[] postData = Encoding.UTF8.GetBytes("key=value");
int requestId = webRequestManager.AddWebRequest("https://example.com/api/submit", postData);
// 응답 이벤트 핸들링
webRequestManager.WebRequestSuccess += OnWebRequestSuccess;
webRequestManager.WebRequestFailure += OnWebRequestFailure;
C#
복사
지원 기능:
•
GET / POST 요청
•
요청 태깅 (그룹 관리)
•
우선순위 제어
•
요청 타임아웃 관리
공통 패턴
Task Pool 패턴
모든 시스템은 작업 풀을 이용해 동시 작업을 관리:
•
작업 생성 → 큐잉(우선순위 기반) → Agent 할당 → 상태 추적
Agent-Helper 패턴
•
Manager: 전체 관리 및 고수준 작업 처리
•
Agent: 개별 작업 담당
•
Helper Interface: 플랫폼 독립적 계약 정의
•
Helper Implementation: 플랫폼별 구체 구현
→ 일관된 인터페이스, 플랫폼별 확장 용이, 테스트/모킹 가능
이벤트 기반 알림
모든 시스템은 이벤트로 상태를 알림:
•
시작(Start) 이벤트
•
진행(Update) 이벤트
•
성공(Success) 이벤트
•
실패(Failure) 이벤트
→ 클라이언트 코드는 구현에 강하게 결합되지 않고 상태에 반응 가능
요약
Network & IO 시스템은 네트워크 통신, 파일 다운로드, 웹 요청을 위한 종합적인 도구를 제공합니다.
일관된 패턴과 관심사의 분리를 통해 사용과 확장이 용이합니다.
시스템 | 주요 클래스 | 목적 | 핵심 기능 |
Network | NetworkManager | 소켓 기반 통신 | 다중 채널, 패킷 직렬화, 하트비트 |
Download | DownloadManager | 파일 다운로드 | 이어받기, 속도 추적, 우선순위 |
Web Request | WebRequestManager | HTTP 요청/응답 관리 | GET/POST, 타임아웃, 태깅 |
이 시스템들은 GameFramework 기반 게임에서 온라인 플레이, 콘텐츠 업데이트, 서버 통신의 기초를 이룹니다.