CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
lan_LanFacade.h
1 /*--------------------------------------------------------------------------------*
2  Copyright (C)Nintendo All rights reserved.
3 
4  These coded instructions, statements, and computer programs contain proprietary
5  information of Nintendo and/or its licensed developers and are protected by
6  national and international copyright laws. They may not be disclosed to third
7  parties or copied or duplicated in any form, in whole or in part, without the
8  prior written consent of Nintendo.
9 
10  The content herein is highly confidential and should be handled accordingly.
11  *--------------------------------------------------------------------------------*/
12 
13 
14 #pragma once
15 
16 #include <nn/pia/lan/lan_Definitions.h>
17 
18 namespace nn
19 {
20 namespace pia
21 {
22 namespace common
23 {
24 class Socket;
25 }
26 }
27 }
28 
29 namespace nn
30 {
31 namespace pia
32 {
33 namespace transport
34 {
36 }
37 }
38 }
39 
40 namespace nn
41 {
42 namespace pia
43 {
44 namespace lan
45 {
46 class LanProtocol;
47 class LanMatchmakeUpdateJob;
48 class SocketOutputStream;
49 class SocketInputStream;
50 
51 /*!
52  @brief LAN マッチメイクのファサード(facade、インターフェースラッパー)クラスです。
53  @details 同一サブネットの LAN 上に存在する環境の場合、NEX を使用せず、
54  ネットワーク関連処理(送受信、セッション管理など)を行えます。
55  */
57 {
58 public:
59 
60  /*!
61  @brief LAN マッチメイクで使用するネットワーク設定の構造体です。
62  */
64  {
66  {}
67 
68  uint32_t localAddress; //!< ローカルに割当てられている IP アドレス
69  uint32_t subnetmask; //!< ローカルの IP アドレスのサブネットマスク。指定しない場合は 255.255.255.0 が指定されます。
70  int localCommunicationVersion; //!< 通信バージョンです。アプリケーションへのパッチの適用などで通信の仕様が変わる場合に、通信バージョンをインクリメントしておくことで、通信の互換性がないことを表明できます。このバージョンが異なるセッションは、検索可能ですが接続しようとすると失敗します。
71  };
72 
73  /*!
74  @brief インスタンスを作成します(シングルトンパターン)。
75 
76  @return 関数の実行結果を返します。 処理が失敗した場合、以下を返します。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
77  @retval nn::pia::ResultNotInitialized lan モジュールが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
78  @retval nn::pia::ResultInvalidState 呼び出すタイミングが間違っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
79  @retval nn::pia::ResultAlreadyExists 既にインスタンスは作成されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
80  */
81  static Result CreateInstance(void);
82 
83  /*!
84  @brief インスタンスを破棄します(シングルトンパターン)。
85 
86  @details インスタンスが作成されていないときにこの関数が呼び出された場合は、
87  何も実行せずに関数から返ります。
88  */
89  static void DestroyInstance(void);
90 
91  /*!
92  @brief LanFacade インスタンスへのポインタを取得します(シングルトンパターン)。
93 
94  @return インスタンスが作成されていないときは、 NULL ポインタが返ります。
95  */
96  static LanFacade* GetInstance(void);
97 
98  /*!
99  @cond PRIVATE
100  @brief LanFacade 機能をスタートアップします。
101 
102  @return 関数の実行結果を返します。 処理が失敗した場合、以下を返します。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
103  @retval nn::pia::ResultInvalidState 呼び出すタイミングが間違っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
104  */
105  Result Startup();
106  //! @endcond
107 
108  /*!
109  @cond PRIVATE
110  @brief LanFacade 機能をクリーンアップします。
111  */
112  void Cleanup();
113  //! @endcond
114 
115  void RegisterLanProtocol(LanProtocol* pLanProtocol);
116  void UnregisterLanProtocol();
117  LanProtocol* GetLanProtocol()
118  {
119  return m_pLanProtocol;
120  }
121  const LanProtocol* GetLanProtocol() const
122  {
123  return m_pLanProtocol;
124  }
125 
126  /*!
127  @brief LAN マッチメイクで使用するネットワーク設定を登録します。
128  @details ローカルに割当てられている IP アドレス、サブネットマスク、通信バージョンを登録します。@ref session::Session::Startup を呼ぶ前に呼び出す必要があります。
129  @param[in] setting LAN マッチメイクで使用するネットワーク設定
130  @return 関数の実行結果を返します。 処理が失敗した場合、以下を返します。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
131  @retval nn::pia::ResultInvalidArgument 引数に誤りがあります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
132  */
133  Result Bind(const LanNetworkSetting& setting);
134 
135  /*!
136  @brief 登録したローカルアドレスの情報を削除します。
137  @details @ref session::Session::Cleanup を呼び出した後に呼び出す必要があります。
138  */
139  void Unbind();
140 
141  /*!
142  @cond PRIVATE
143  @brief LAN セッションを開始します。
144  */
145  Result StartLanSession();
146  //! @endcond
147 
148  /*!
149  @cond PRIVATE
150  @brief LAN セッションを停止します。
151  */
152  void StopLanSession();
153  //! @endcond
154 
155  bool RequestBrowseMessage(uint8_t criteriaNum);
156  bool IsBrowseMessageCompleted() const;
157 
158  /*!
159  @cond PRIVATE
160  @brief 通信バージョンを取得します。
161  */
162  int GetLocalCommunicationVersion() const;
163  //! @endcond
164 
165  /*!
166  @cond PRIVATE
167  @brief 自分の PrincipalId を取得します。
168  */
169  PrincipalId GetLocalPrincipalId() const;
170  //! @endcond
171 
172  /*!
173  @cond PRIVATE
174  @brief 自分の StationConnectionInfo を取得します。
175  */
176  transport::StationConnectionInfo& GetLocalStationConnectionInfo();
177  //! @endcond
178 
179  /*!
180  @cond PRIVATE
181  @brief デバッグに有用な情報をプリントします。
182 
183  @param[in] flag トレースフラグです。詳細は @ref TraceFlag 型を参照してください。
184  */
185  void Trace(uint64_t flag) const;
186  //! @endcond
187 
188 private:
189  // シングルトンインスタンスへのポインタです。
190  static LanFacade* s_pInstance;
191 
192  /*!
193  @brief シングルトンパターンのため、コンストラクタは封印します。
194  */
195  LanFacade(void);
196 
197  /*!
198  @brief シングルトンパターンのため、デストラクタは封印します。
199  */
200  ~LanFacade(void);
201 
202  /*!
203  @brief シングルトンパターンのため、コピーコンストラクタは封印します。
204  */
205  LanFacade(const LanFacade&);
206 
207  /*!
208  @brief シングルトンパターンのため、代入演算子は封印します。
209  */
210  LanFacade& operator=(const LanFacade&);
211 
212  Result Initialize();
213  void Finalize();
214 
215 private:
216  LanProtocol* m_pLanProtocol;
217  LanNetworkSetting m_LanNetworkSetting;
218 };
219 }
220 }
221 } // end of namespace nn::pia::lan