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.
필요 시 연결 종료
→ 유연하고 안정적인 네트워크 통신 시스템을 구현할 수 있습니다.