Company
교육 철학

Network and IO (네트워크 및 입출력)

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 기반 게임에서 온라인 플레이, 콘텐츠 업데이트, 서버 통신의 기초를 이룹니다.