Company
교육 철학

Networking and I/O (네트워킹 & 입출력)

Networking and I/O (네트워킹 & 입출력)

1. 아키텍처 개요

Component-Helper 구조
→ Unity 컴포넌트가 매니저 기능을 노출, 실제 구현은 Helper 클래스가 담당
주요 구성:
NetworkComponent : 네트워크 채널 관리 (TCP/UDP)
DownloadComponent : 파일 다운로드 관리
WebRequestComponent : HTTP/HTTPS 요청 처리
ResourceHelper : 원격/로컬 리소스 로드
FileSystem : 파일 읽기/쓰기

2. Network System

특징
TCP/UDP 소켓 통신
다중 채널(NetworkChannel) 구조
하트비트(heartbeat) 내장
패킷 직렬화/역직렬화 가능
연결 상태 및 에러 이벤트 지원
핵심 API
CreateNetworkChannel(name, serviceType, helper)
GetNetworkChannel(name)
DestroyNetworkChannel(name)
이벤트
NetworkConnected
NetworkClosed
NetworkMissHeartBeat
NetworkError
디버깅
NetworkComponentInspector : 연결 상태, 송수신 패킷 수, 하트비트 상태 표시

3. Download System

특징
파일 다운로드 (전체, 부분, 범위 지정 지원)
진행 상황 & 오류 이벤트 제공
Agent Helpers
UnityWebRequestDownloadAgentHelper (최신 Unity API)
WWWDownloadAgentHelper (레거시 지원)
주요 이벤트
UpdateBytes, UpdateLength, Complete, Error

4. Web Request System

특징
GET, POST 지원
JSON, FormData, RawData 전송 가능
이벤트 기반 완료/에러 처리
구현체
UnityWebRequestAgentHelper

5. Resource Loading with Network I/O

DefaultLoadResourceAgentHelper
AssetBundle 로드 (로컬/원격)
바이트 스트림 처리
에셋 추출
DefaultResourceHelper
URL에서 바이트 읽기
씬 언로드, 리소스 해제 기능 포함

6. File System

기능
파일 읽기/쓰기
디렉토리 관리
커스텀 파일 시스템 확장 가능
통합
리소스 시스템과 연결
데이터 테이블 로딩 가능

7. 프레임워크 통합

Resource System : 원격 에셋 다운로드 활용
Event System : 모든 네트워크/IO 결과를 이벤트로 발행
Data Tables : 원격 데이터 테이블 로드 가능

8. 코드 예시

네트워크 연결
var networkComponent = GameEntry.GetComponent<NetworkComponent>(); var channel = networkComponent.CreateNetworkChannel("GameServer", ServiceType.Tcp, new GameNetworkChannelHelper()); channel.Connect(IPAddress.Parse("192.168.1.1"), 8888); channel.Send(gamePacket); channel.Close();
C#
복사
파일 다운로드
var downloadComponent = GameEntry.GetComponent<DownloadComponent>(); int id = downloadComponent.AddDownload("https://example.com/assets/bundle.unity3d", "Assets/Download/bundle.unity3d"); downloadComponent.DownloadSuccess += (s, e) => { if (e.SerialId == id) Debug.Log("Download completed: " + e.DownloadPath); };
C#
복사
웹 요청
var webRequestComponent = GameEntry.GetComponent<WebRequestComponent>(); WWWForm form = new WWWForm(); form.AddField("username", "player"); form.AddField("score", 100); int id = webRequestComponent.AddWebRequest("https://example.com/api/scores", form); webRequestComponent.WebRequestSuccess += (s, e) => { if (e.SerialId == id) { string response = Utility.Converter.GetString(e.WebResponseBytes); Debug.Log("Response: " + response); } };
C#
복사
요약하자면:
네트워크 (TCP/UDP) : 채널 기반 소켓 통신
다운로드 : 파일 전송 및 범위 요청
웹 요청 : GET/POST API 호출
리소스 시스템 : AssetBundle + 네트워크 연동
파일 시스템 : 기본 파일 I/O + 커스텀 확장