Files
XRLib/Assets/Sample/Injector/InjectorSampleNetworkManager.cs
2026-02-19 18:40:37 +09:00

81 lines
3.3 KiB
C#

using UnityEngine;
using UVC.Core;
namespace Sample
{
/// <summary>
/// Type D 예시: MonoBehaviour SingletonApp - 네트워크 관리자
/// </summary>
/// <remarks>
/// <para><b>[ 타입 ]</b> Type D - MonoBehaviour SingletonApp (SingletonApp<T> 상속)</para>
/// <para><b>[ 라이프사이클 ]</b> App - 씬 전환 시에도 유지 (DontDestroyOnLoad)</para>
///
/// <para><b>[ 특징 ]</b></para>
/// <list type="bullet">
/// <item><description>MonoBehaviour이므로 Unity 생명주기 메서드 사용 가능</description></item>
/// <item><description>씬에 미리 배치하거나 Instance 접근 시 자동 생성</description></item>
/// <item><description>DontDestroyOnLoad 자동 적용</description></item>
/// <item><description>Inspector에서 설정 가능</description></item>
/// </list>
///
/// <para><b>[ 등록 방법 ]</b></para>
/// <code>Injector.RegisterSingleton<InjectorSampleNetworkManager>();</code>
///
/// <para><b>[ 씬 설정 (선택) ]</b></para>
/// <list type="number">
/// <item><description>빈 GameObject 생성 → 이름: "NetworkManager"</description></item>
/// <item><description>InjectorSampleNetworkManager 컴포넌트 추가</description></item>
/// </list>
/// <para>또는 코드에서 Instance 접근 시 자동으로 GameObject가 생성됩니다.</para>
///
/// <para><b>[ 사용 방법 ]</b></para>
/// <code>
/// // 방법 1: [Inject] 어트리뷰트 사용
/// [Inject] private InjectorSampleNetworkManager _networkManager;
/// _networkManager.Connect("wss://server.example.com");
///
/// // 방법 2: 직접 Instance 접근 (기존 Singleton 방식)
/// InjectorSampleNetworkManager.Instance.Connect("wss://server.example.com");
/// </code>
///
/// <para><b>[ InjectorSampleSettingsManager와의 차이점 ]</b></para>
/// <list type="table">
/// <item><term>SettingsManager</term><description>Singleton<T> - 순수 C#, GameObject 없음</description></item>
/// <item><term>NetworkManager</term><description>SingletonApp<T> - MonoBehaviour, GameObject 필요</description></item>
/// </list>
/// </remarks>
public class InjectorSampleNetworkManager : SingletonApp<InjectorSampleNetworkManager>
{
/// <summary>서버 연결 상태</summary>
public bool IsConnected { get; private set; }
/// <summary>
/// SingletonApp 초기화 메서드 - Awake에서 자동 호출됩니다.
/// </summary>
protected override void Init()
{
base.Init();
Debug.Log("[InjectorSampleNetworkManager] Initialized");
}
/// <summary>
/// 서버에 연결합니다.
/// </summary>
/// <param name="serverUrl">서버 URL (예: wss://server.example.com)</param>
public void Connect(string serverUrl)
{
Debug.Log($"[InjectorSampleNetworkManager] Connecting to {serverUrl}");
IsConnected = true;
}
/// <summary>
/// 서버 연결을 해제합니다.
/// </summary>
public void Disconnect()
{
Debug.Log("[InjectorSampleNetworkManager] Disconnected");
IsConnected = false;
}
}
}