Company
교육 철학

Network Manager (네트워크 매니저)

Network Manager (네트워크 매니저)

관련 소스 파일

GameFramework/Network/INetworkChannel.cs
GameFramework/Network/INetworkChannelHelper.cs
GameFramework/Network/INetworkManager.cs
GameFramework/Network/IPacketHeader.cs
GameFramework/Network/NetworkManager.cs

목적 및 개요

Network Manager는 Game Framework의 핵심 컴포넌트로, 네트워크 통신을 처리합니다.
네트워크 채널 생성 및 관리, 연결 수립, 패킷 송수신, 네트워크 이벤트 처리를 담당합니다.
채널 기반 아키텍처 제공
TCP 연결 지원
하트비트(heartbeat) 메커니즘을 통한 연결 유지
※ 인터넷 파일 다운로드 관련 내용은 Download Manager 문서를 참고하세요.

시스템 아키텍처

Network Manager는 GameFramework의 모듈 아키텍처 패턴을 따릅니다.
GameFrameworkModule을 상속
INetworkManager 인터페이스 구현
여러 네트워크 채널을 관리하며, 각 채널은 원격 호스트와의 연결을 나타냅니다.

Network Manager 구성 요소

NetworkManager: 네트워크 채널 관리 및 네트워크 이벤트 제공
NetworkChannel: 원격 호스트와의 연결, 패킷 송수신 처리
NetworkChannelHelper: 패킷 직렬화/역직렬화, 기타 보조 작업 처리
Packet: 모든 네트워크 메시지 패킷의 기본 클래스
PacketHeader: 패킷 길이 등 패킷 정보를 담는 헤더

네트워크 채널 생성 및 관리

채널 생성

CreateNetworkChannel 메서드를 사용하여 네트워크 채널을 생성합니다.
필요한 인자:
이름
서비스 타입
NetworkChannelHelper
지원 서비스 타입:
ServiceType.Tcp: 일반 TCP 연결
ServiceType.TcpWithSyncReceive: 동기식 수신을 지원하는 TCP 연결

채널 관리

NetworkManager는 채널을 관리하기 위한 다양한 메서드를 제공합니다:
HasNetworkChannel: 채널 존재 여부 확인
GetNetworkChannel: 특정 채널 반환
GetAllNetworkChannels: 모든 채널 반환
DestroyNetworkChannel: 채널 파괴
채널을 파괴하면 이벤트 구독 해제, 종료, 딕셔너리에서 제거가 자동 처리됩니다.

네트워크 채널 동작

원격 호스트 연결

Connect(IP, Port) 메서드 사용

패킷 전송

Send(Packet packet) 메서드 사용

패킷 수신

수신은 채널에서 자동 처리됩니다. 흐름:
1.
소켓에서 데이터 수신
2.
NetworkChannelHelper를 통해 패킷 헤더 역직렬화
3.
헤더 정보를 기반으로 패킷 본문 역직렬화
4.
등록된 핸들러 또는 기본 핸들러에서 패킷 처리

하트비트(Heartbeat) 메커니즘

연결 유지 및 모니터링을 위한 하트비트 기능을 지원합니다.
주요 속성 및 동작:
HeartBeatInterval: 하트비트 패킷 간격
MissHeartBeatCount: 누락된 하트비트 개수
ResetHeartBeatElapseSecondsWhenReceivePacket: 패킷 수신 시 하트비트 타이머 리셋 여부

네트워크 이벤트 처리

Network Manager는 다양한 이벤트를 제공합니다:
이벤트
설명
인자
NetworkConnected
연결이 수립될 때
NetworkChannel, UserData
NetworkClosed
연결이 종료될 때
NetworkChannel
NetworkMissHeartBeat
하트비트가 누락될 때
NetworkChannel, MissHeartBeatCount
NetworkError
네트워크 오류 발생
NetworkChannel, ErrorCode, SocketErrorCode, ErrorMessage
NetworkCustomError
커스텀 오류 발생
NetworkChannel, CustomErrorData

Network Channel Helper

INetworkChannelHelper 인터페이스는 채널을 돕는 역할을 합니다:
Packet Serialization: 패킷 → 바이너리 변환
Packet Deserialization: 바이너리 → 패킷 변환
Heartbeat Management: 하트비트 패킷 송신
Connection Preparation: 신규 연결 준비
개발자는 자신만의 패킷 직렬화/역직렬화 로직을 구현해야 합니다.

패킷 시스템

네트워크 통신의 핵심 구성 요소:
Packet: 모든 패킷의 기본 클래스
PacketHeader: 패킷 길이 정보를 제공하는 인터페이스
→ 개발자는 Packet을 상속하여 패킷 타입 정의, PacketHeader 구현을 통해 PacketLength 속성 제공 필요

Game Framework과의 통합

Update(): 매 프레임 호출 → 모든 네트워크 채널 업데이트
Shutdown(): 프레임워크 종료 시 호출 → 모든 네트워크 채널 종료
게임 실행 사이클과 네트워크 동작을 동기화합니다.

사용 예시

네트워크 매니저 사용 흐름 예시:
1.
커스텀 NetworkChannelHelper 구현
2.
NetworkManager를 통해 네트워크 채널 생성
3.
패킷 핸들러 등록
4.
원격 호스트에 연결
5.
패킷 송수신
6.
네트워크 이벤트 처리
7.
필요 시 연결 종료
→ 유연하고 안정적인 네트워크 통신 시스템을 구현할 수 있습니다.