CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
session_Mesh.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/session/session_Definitions.h>
17 #include <nn/pia/session/session_Types.h>
18 
19 #include <nn/pia/common/common_AsyncContext.h>
20 #include <nn/pia/common/common_SignatureSetting.h>
21 
22 #include <nn/pia/transport/transport_Station.h>
23 
24 namespace nn
25 {
26 namespace pia
27 {
28 namespace common
29 {
30 struct CryptoSetting;
31 class MonitoringDataSender;
32 class StationAddress;
33 }
34 }
35 }
36 
37 namespace nn
38 {
39 namespace pia
40 {
41 namespace transport
42 {
43 class StationConnectionInfo;
44 class StationProtocol;
45 class ConnectStationJob;
46 class DisconnectStationJob;
47 class ProcessConnectionRequestJob;
48 class MissingStationHandler;
49 class NetworkFactory;
50 class BandwidthCheckProtocol;
51 }
52 }
53 }
54 
55 ///@cond PRIVATE
56 
57 namespace nn
58 {
59 namespace pia
60 {
61 namespace session
62 {
63 
64 class CreateMeshJob;
65 class JoinMeshJob;
66 class LeaveMeshJob;
67 class ProcessJoinRequestJob;
68 class ProcessUpdateMeshJob;
69 class DestroyMeshJob;
70 class ProcessDestroyMeshJob;
71 class ProcessHostMigrationJob;
72 class LeaveWithHostMigrationJob;
73 class SignatureSettingStorage;
74 class RelayRouteManageJob;
75 class KickoutManageJob;
76 class MeshProtocol;
77 class SyncClockProtocol;
78 class MeshEventListener;
79 
80 /*!
81  @class nn::pia::session::Mesh
82  @brief 他の端末との接続を管理するクラスです。
83 
84  @details このクラスはシングルトンパターンです。単一のインスタンスしか生成できません。
85 
86  @attention このクラスはメッシュの直接操作用クラスです。セッションを使用するときは Mesh クラスを使用してはいけません。メッシュを直接操作する場合は Session クラスを使用してはいけません。
87 
88  @details Mesh 内部の処理の一部は @ref nn::pia::common::Scheduler にジョブとして登録されますので、 Mesh の機能を使う場合
89  @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出す必要があります。
90  */
91 class Mesh : public common::RootObject
92 {
93  friend class CreateMeshJob;
94  friend class JoinMeshJob;
95  friend class LeaveMeshJob;
96  friend class ProcessJoinRequestJob;
97  friend class ProcessUpdateMeshJob;
98  friend class DestroyMeshJob;
99  friend class ProcessDestroyMeshJob;
100  friend class ProcessHostMigrationJob;
101  friend class LeaveWithHostMigrationJob;
102  friend class KickoutManageJob;
103  friend class MeshProtocol;
104  friend class MeshEventListener;
105 
106 public:
107  /*!
108  @brief @ref nn::pia::session::Mesh::CreateInstance に渡す設定用構造体です。
109  */
110  struct Setting
111  {
112  Setting()
113  : bitRateCheckMode(session::BitRateCheckMode_Disable)
114  {
115  }
116  transport::NetworkFactory* pNetworkFactory; //!< @ref nn::pia::transport::NetworkFactory から派生させた具象クラスのインスタンスを指すポインタ(ファクトリパターン)。Mesh インスタンス作成時にのみ使用されます。
117  session::NetworkTopology networkTopology; //!< メッシュのネットワークトポロジー設定です。
118  session::BitRateCheckMode bitRateCheckMode; //!< ビットレート判定機能の設定です。
119  };
120 
121  /*!
122  @brief @ref nn::pia::session::Mesh::Startup に渡す設定用構造体です。
123  */
124  struct StartupSetting
125  {
126  StartupSetting()
127  : maxSilenceTime(SessionMaxSilenceTimeDefault),
128  keepAliveSendingInterval(SessionKeepAliveIntervalDefault),
129  isHostMigrationEnabled(true),
130  pPlayerInfo(NULL),
131  playerInfoSize(1),
132  isPlayersCountedAsParticipants(true),
133  pCryptoSetting(NULL),
134  signatureSetting(common::SignatureSetting::NoSignature),
135  uplinkBitRateLowerLimit(SessionInvalidUplinkBitRateLowerLimit),
136  bitRateCheckPacketSize(0),
137  bitRateMeasuringSpan(1000),
138  isBitRateCheckSkipped(false),
139  pToken(NULL),
140  isAddRecentPlayRecordEnabled(true)
141  {
142  }
143 
144  uint32_t maxSilenceTime; //!< 許容される最大無通信時間 [msec] を指定します。デフォルトは session::SessionMaxSilenceTimeDefault です。
145  uint32_t keepAliveSendingInterval; //!< キープアライブの送信間隔 [msec] を指定します。デフォルトは session::SessionKeepAliveIntervalDefault です。
146  bool isHostMigrationEnabled; //!< ホストマイグレーション機能を設定します。デフォルトは true (有効) になっています。
147  const transport::Station::PlayerInfo* pPlayerInfo; //!< 自分自身のステーションと関連付けるプレイヤー情報を設定します。他のメッシュ参加者から参照されます。
148  uint8_t playerInfoSize; //!< ステーションに関連つけるプレイヤー情報の数です。デフォルトは 1 です。
149  bool isPlayersCountedAsParticipants; //!< 自分自身のステーションに複数のプレイヤーを関連付ける際、プレイヤー数をセッション参加者数としてカウントするか指定します。デフォルトは true です。
150  const common::CryptoSetting* pCryptoSetting; //!< 暗号化設定の構造体を示すポインタを指定します。NULL を指定した場合は「暗号化しない」設定となります。デフォルトは NULL です。
151  common::SignatureSetting signatureSetting; //!< パケットの署名機能に関する設定用クラスを適切に設定した状態で指定します。デフォルト引数の場合は "署名無し" に設定されます。
152  int32_t uplinkBitRateLowerLimit; //!< ビットレート判定機能を使用する際に、アプリケーションが要求する水準をこのメンバで指定します。単位は bps です。デフォルトは session::SessionInvalidUplinkBitRateLowerLimit です。
153  uint32_t bitRateCheckPacketSize; //!< ビットレート判定機能を利用する際に、判定に用いる IP パケットサイズを指定します。単位はバイトです。アプリケーションが送受信する IP パケットの平均的なサイズを指定することを想定しています。4の倍数である必要があります。デフォルトは 0 です。
154  int32_t bitRateMeasuringSpan; //!< ビットレート判定機能を利用する際に、計測にかける時間を設定します。単位は msec です。デフォルトは 1000 msec です。デフォルト値からの変更はお勧めしません。
155  bool isBitRateCheckSkipped; //!< ビットレート判定機能を利用する際に、判定に関わる処理をスキップするかどうかを設定します。スキップする場合には true を設定する必要があります。デフォルトは false です。
156  const transport::Station::IdentificationToken* pToken; //!< 自分自身を示す識別トークンのポインタを指定します。NULL を指定した場合、データが全て NULL の識別トークンが使用されます。デフォルトは NULL です。
157  bool isAddRecentPlayRecordEnabled; //!< セッション参加者を「いっしょにあそんだ人の記録」に追加するかどうかを指定します。デフォルトは true(有効)になっています。本体機能が「いっしょにあそんだ人の記録」に対応していない場合は無視されます。
158  };
159 
160  /*!
161  @brief (デバッグ用) @ref nn::pia::session::Mesh::SetDebugSetting に渡すデバッグ機能設定用構造体です。
162  */
163  struct DebugSetting
164  {
165  DebugSetting(bool argIsRelayEmulationEnabled = false, bool argIsCheckMaxSilenceTimeEnabled = true)
166  : isRelayEmulationEnabled(argIsRelayEmulationEnabled),
167  isCheckMaxSilenceTimeEnabled(argIsCheckMaxSilenceTimeEnabled)
168  {
169  }
170  bool isRelayEmulationEnabled; //!< デバッグ用接続経路エミュレーション機能設定です。
171  bool isCheckMaxSilenceTimeEnabled; //!< 最大無通信時間の設定値の範囲チェックを行います。
172  };
173 
174  /*!
175  @cond PRIVATE
176  @brief Mesh の状態を表す列挙型です。
177  */
178  enum State
179  {
180  State_Disconnected, //!< 他の端末と接続されていない、通信不可能な状態です。
181  State_Connected //!< 他の端末と接続している、通信可能な状態です。
182  };
183  //! @endcond
184 
185  /*!
186  @brief Mesh が通信不可能な状態の場合に、通信不可能になった理由を表す列挙型です。
187 
188  @details Mesh::GetDisconnectReason で取得可能です。
189  */
190  enum DisconnectReason
191  {
192  DisconnectReason_UnknownReason = 0, //!< 通信不可能になった理由が不明です。メッシュ通信中に(メッシュ破棄、離脱などを行わずに) Mesh::Cleanup を行った場合などにこの値となります。
193  DisconnectReason_NotYetCommunicated, //!< まだ通信したことがない場合です。 Mesh::Startup 後に一度もメッシュ構築、参加をしていない場合はこの値となります。
194  DisconnectReason_OperationOfOwn, //!< 自分自身の操作により通信不可能になった場合です。 Mesh::DestroyMesh や Mesh::LeaveMesh などを呼び出してメッシュ離脱した場合はこの値となります。
195  DisconnectReason_OperationOfOther, //!< メッシュ内の自分以外のステーションの操作により通信不可能になった場合です。自身がクライアントでホストがメッシュ破棄した場合などはこの値となります。
196  DisconnectReason_KickoutByUser, //!< Mesh::KickoutStation 呼出によりメッシュから追放された場合です。
197  DisconnectReason_KickoutBySystem, //!< ライブラリ内部処理によってメッシュから追放された場合です。リレー通信機能有効時のリレー依頼数制限などのライブラリ内部処理によってメッシュから追放された場合はこの値となります。
198  DisconnectReason_InconsistentInfo, //!< メッシュ情報が不整合な状態になったので通信不可能になった場合です。ステーション数不一致などが原因の場合はこの値となります。
199  DisconnectReason_MigrationFail, //!< ホストマイグレーション処理に失敗したことにより通信不可能になった場合です。
200  DisconnectReason_ExternalFactor, //!< Mesh 以外の要因で通信不可能になった場合です。通信障害などが原因の場合はこの値となります。
201  DisconnectReason_MigrationFatalError //!< ホストマイグレーション関連で致命的なエラーが発生した場合です。メッシュが分裂状態になったことをライブラリ内部処理によって検知した場合などに発生します。
202  };
203 
204 
205  /*!
206  @brief (デバッグ用)接続経路エミュレーションの設定を表す列挙型です。
207 
208  @details Mesh::RelayEmulation の第3引数で使用します。
209  */
210  enum EmulationType
211  {
212  EmulationType_None = 0, //!< エミュレーション設定なし
213  EmulationType_Relay //!< リレー接続指定(直通接続不可)
214  };
215 
216 
217  /*!
218  @brief メッシュ状態変化通知コールバックで引数として渡される列挙型です。
219 
220  @details メッシュに発生した状態変化の内容を表現します。
221  */
222  enum EventType
223  {
224  EventType_EventJoin, //!< ステーションが参加したことを示します。
225  EventType_EventLeave, //!< ステーションが離脱したことを示します。
226  EventType_EventHostChanged, //!< メッシュホスト権限が移譲されたことを示します。【ホストマイグレーション有効時のみ発生】
227  EventType_EventMigrationFail, //!< ホストマイグレーションに失敗したことを示します。【ホストマイグレーション有効時のみ発生】
228  EventType_EventStartHostMigration //!< ホストマイグレーション処理が開始したことを示します。【ホストマイグレーション有効時のみ発生】
229  };
230 
231  /*!
232  @brief メッシュの状態が変化した場合に呼び出されるコールバックの関数型です。
233 
234  @details 【引数仕様】
235  <ul>
236  <li> eventType : 状態変化の内容を示す列挙型(@ref EventType 列挙型参照)</li>
237  <li> id : 状態変化が発生した対象の StationId</li>
238  </ul>
239  */
240  typedef void (*MeshEventCallback)(EventType eventType, StationId id);
241 
242 
243  /*!
244  @brief メッシュホストでジョイン要求が来た際に呼び出される承認、拒否判定コールバックの関数型です。
245 
246  @details 返り値として true を返せばジョイン要求の承認、false を返せばジョイン要求の拒否となります。
247  <br>
248  【引数仕様】
249  <ul>
250  <li> pRequesterToken : ジョイン要求の送信元ステーションの識別トークンを示すポインタです。</li>
251  </ul>
252  */
253  typedef bool (*JoiningMeshApprovalCallback)(const transport::Station::IdentificationToken* pRequesterToken);
254 
255  /// @cond PRIVATE
256  /*!
257  @brief 複数候補版ホストマイグレーションで、次期親候補順位を任意に調整するためのコールバック関数。
258 
259  @details 引数 targetId について、任意の親候補順位(昇順)を返せば、次期親候補順位を調整可能。
260  */
261  typedef uint8_t (*CheckHostCandidateRankingCallback)(StationIndex targetId, bool isHost);
262  /// @endcond
263 
264  /// @cond PRIVATE
265  typedef uint32_t (*GetSessionIdCallback)();
266  /// @endcond
267 
268  /*!
269  @name シングルトンインスタンスの操作
270  @{
271  */
272 
273  /*!
274  @brief Mesh のインスタンスを作成します。
275 
276  @details この関数は @ref nn::pia::session::BeginSetup を実行してから @ref nn::pia::session::EndSetup を実行するまでの期間に実行する必要があります。
277 
278  @details デバッグ機能設定用関数 @ref SetDebugSetting でデバッグ用接続経路エミュレーション機能を使用する設定とした場合、
279  ネットワークトポロジー設定が NetworkTopology_RelayMesh でなければこの関数呼出が失敗します。
280 
281  @attention 製品版 ROM では、@ref SetDebugSetting を呼び出さないように注意してください。
282 
283  @param[in] setting 各種設定情報を指定します。
284 
285  @return 関数の実行結果を返します。処理が成功した場合、IsSuccess() が真となる Result を返します。この関数がエラーを返さないようにアプリケーションを実装する必要があります。<br>
286  処理が失敗した場合、以下の Result を返します。
287  @retval ResultNotInitialized session モジュールが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
288  @retval ResultInvalidState 関数が実行可能な状態ではありません。 @ref nn::pia::session::BeginSetup を実行してから @ref nn::pia::session::EndSetup を実行するまでの期間外に実行した場合にこのエラーが返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
289  @retval ResultInvalidArgument 引数で指定した設定内容に誤りがあります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
290  @retval ResultAlreadyExists 既にインスタンスは作成されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
291  */
292  static Result CreateInstance(const session::Mesh::Setting& setting);
293 
294 
295  /*!
296  @brief Mesh のインスタンスを破棄します。
297  */
298  static void DestroyInstance();
299 
300 
301  /*!
302  @brief Mesh オブジェクトのインスタンスを取得します。
303 
304  @details メッシュクラスはシングルトンであり、ひとつのオブジェクトのみが自動的に生成されます。
305  この関数を呼び出すことで、唯一のインスタンスへのポインタを取得することが出来ます。
306 
307  @return Meshオブジェクトインスタンスへのポインタが返ります。
308  */
309  static Mesh* GetInstance()
310  {
311  return s_pMesh;
312  }
313 
314 
315  /*!
316  @brief (デバッグ用) Mesh のデバッグ用機能について設定します。
317 
318  @details 本関数は Mesh のインスタンスが存在しない状態で呼出可能です。 @ref CreateInstance で Mesh のインスタンスを作成する前に呼び出す必要があります。<br>
319  <br>
320  DebugSetting 構造体の isRelayEmulationEnabled を true に設定した場合、デバッグ用接続経路エミュレーション機能を使用する設定となります。
321  接続経路エミュレーション機能を使用する設定の場合、ネットワークトポロジーを NetworkTopology_RelayMesh に設定しない限り @ref CreateInstance が成功しません。<br>
322  <br>
323  本関数を呼び出さなかった場合、本関数が関連するデバッグ用機能は全て無効(使用しない)設定となります。
324 
325  @attention 製品版 ROM では、本関数を呼び出さないように注意してください。
326 
327  @return 関数の実行結果を返します。処理が成功した場合、IsSuccess() が真となる Result を返します。この関数がエラーを返さないようにアプリケーションを実装する必要があります。<br>
328  処理が失敗した場合、以下の Result を返します。
329  @retval ResultInvalidState 関数が実行可能な状態ではありません。既に Mesh のインスタンスが作成済みの場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
330  */
331  static Result SetDebugSetting(const DebugSetting& debugSetting);
332 
333  /*!
334  end of name シングルトンインスタンスの操作
335  @}
336  */
337 
338  /*!
339  @name 初期化終了処理
340  @{
341  */
342 
343  /*!
344  @brief Mesh をスタートアップします。
345 
346  @details StartupSetting 構造体の isHostMigrationEnabled でホストマイグレーション機能の設定を行います。true にすると有効になります。デフォルト値は true です。<br>
347  StartupSetting 構造体の pPlayerInfo で自分自身のステーションと関連付けるプレイヤー情報を設定します。<br>
348  @if CAFE_DOC
349  プレイヤーの名前の長さは16文字(NULL終端を含めない)以内である必要があります。文字コードは UTF-16BE である必要があります。
350  言語コードはアプリケーションが使用している言語を、 nn::fp::Language で定義される値で指定して下さい。<br>
351  設定した名前と言語コードはメッシュ参加者間で共有されます。自分がメッシュに参加したときにはメッシュの参加者全員を、他のクライアントが
352  メッシュに参加したときにはその新規参加者の名前と言語コードを参照し、ライブラリ内で自動的に nn::fp::AddRecentPlayRecord() を使用して
353  「いっしょに遊んだ記録」に追加します。 <br>
354  「いっしょに遊んだ記録」についての詳細はフレンドプレゼンスライブラリのプログラミングマニュアルおよび nn::fp::AddRecentPlayRecord() の
355  リファレンスを参照してください。
356  @endif
357  @if CTR_DOC
358  プレイヤーの名前の長さは16文字(NULL終端を含めない)以内である必要があります。文字コードは UTF-16LE である必要があります。
359  言語コードはアプリケーションで別リージョンの言語を判定する場合に指定する必要があります。本体の言語設定を使用したい場合には、nn::cfg::CTR::GetLanguage() の値を使用可能です。
360  @endif
361 
362  StartupSetting 構造体の pCryptoSetting で、通信の暗号化に関する設定をすることができます。<br>
363  NULL を指定した場合は暗号化されません。デフォルト値は NULL です。
364 
365  StartupSetting 構造体の signatureSetting で、パケットの署名機能に関する設定をすることができます。<br>
366  インターネット通信で "署名無し" とすることは許可していません。 "署名無し" に設定しようとした場合、@ref Startup は失敗します。
367 
368  StartupSetting 構造体の pToken で、自分自身を示す識別トークンを設定することができます。<br>
369  この識別トークンは接続処理時に接続相手と共有され、@ref nn::pia::transport::Station と結び付けられて保管されます。<br>
370  識別トークンを使用する必要が無い場合は、特に設定を行う必要はありません。デフォルト値は NULL です。
371 
372  @ref Startup 以外で、自分自身を示す識別トークンを指定・変更する方法はありません。<br>
373  メッシュ使用中に識別トークンを変更するような使用方法には対応していませんので、注意してください。
374  @if CTR_DOC
375 
376  ローカル通信かつホストマイグレーション有効の場合、ローカルネットワークでホストとの通信異常を検知してホストマイグレーションを開始する場合があります。
377  ローカルネットワークで通信異常と判断する期間は Session の最大無通信時間とは無関係となりますので、注意してください。
378  @endif
379 
380  ビットレート判定機能を有効にしている場合には、@ref StartupSetting 構造体の uplinkBitRateLowerLimit, bitRateCheckPacketSize を設定する必要があります。
381  デフォルト値はいずれも無効な値になっているため、uplinkBitRateLowerLimit にはアプリケーションが要求するビットレートの水準 (単位は bps) を、bitRateCheckPacketSize には測定に用いる IP パケットサイズ (単位は byte) を設定する必要があります。
382 
383  @param[in] startupSetting スタートアップ時の各種設定項目
384 
385  @retval ResultInvalidState 関数が実行可能な状態ではありません。既にスタートアップ済みの場合などに返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
386  @retval ResultInvalidArgument ステーションと関連付ける名前設定かパケットの署名機能設定に問題がある、もしくは、引数で指定したポインタが無効なポインタです。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
387 
388  @see Cleanup, transport::Station::GetIdentificationToken, RegisterJoiningMeshApprovalCallback
389  */
390  Result Startup(Mesh::StartupSetting& startupSetting);
391 
392  /*!
393  @brief Mesh をクリーンアップします。
394 
395  @details @ref Cleanup 後に再度 Mesh を使用する場合には、再度 @ref Startup を呼び出す必要があります。<br>
396  インターネット通信の場合は NAT セッションの開始( @ref nn::pia::inet::NexFacade::StartNatSessionAsync )からやり直す必要があります。
397 
398  @see Startup
399  */
400  void Cleanup();
401 
402  /*!
403  end of name 初期化終了処理
404  @}
405  */
406 
407  /*!
408  @name メッシュの構築、破棄 及び 参加、離脱
409  @{
410  */
411 
412  /*!
413  @cond PRIVATE
414  @brief メッシュを構築します。(旧仕様)
415 
416  @details 自分がメッシュホストになります。
417  <br>
418  非同期のメッシュ構築処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
419  引数で指定する AsyncContext をチェックすることで、処理の完了を監視することができます。
420 
421  事前に @ref nn::pia::transport::Transport の準備が完了している必要があります。
422 
423  【非同期処理失敗時に AsyncContext を通して返される可能性のある Result】
424  <ul>
425  <li> ResultInvalidState :この API を使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。</li>
426  </ul>
427 
428  @param[in] pAsyncContext 処理の進行状況をチェックするための AsyncContext のポインタを指定します。
429 
430  @return 正常にメッシュ構築処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
431  @retval ResultInvalidState この API を使用できる状態ではありません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
432  @retval ResultInvalidArgument 引数で指定された AsyncContext が、使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
433 
434  @see DestroyMesh, LeaveMeshWithHostMigration
435  */
436  Result CreateMesh(common::AsyncContext* pAsyncContext);
437  //!@endcond
438 
439  /*!
440  @brief メッシュを構築します。
441 
442  @details 自分がメッシュホストになります。
443  <br>
444  非同期のメッシュ構築処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
445  処理の完了は @ref IsCreateMeshCompleted でチェックし、結果は @ref GetCreateMeshResult で確認できます。
446 
447  事前に @ref nn::pia::transport::Transport の準備が完了している必要があります。
448 
449  @return 正常にメッシュ構築処理を開始できた場合、 IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
450  @retval ResultInvalidState この API を使用できる状態ではありません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
451 
452  @see IsCreateMeshCompleted, GetCreateMeshResult
453  @see DestroyMeshAsync, LeaveMeshWithHostMigrationAsync
454  */
455  Result CreateMeshAsync();
456 
457  /*!
458  @brief CreateMeshAsync の非同期処理の完了をチェックします。
459 
460  @details @ref CreateMeshAsync で開始された非同期処理は、本関数で完了をチェックできます。
461 
462  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
463 
464  @see CreateMeshAsync, GetCreateMeshResult
465  */
466  bool IsCreateMeshCompleted();
467 
468  /*!
469  @brief CreateMeshAsync の非同期処理の結果を取得します。
470 
471  @details @ref CreateMeshAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。
472 
473  @return CreateMeshAsync の非同期処理の結果を返します。 処理が成功していた場合、 IsSuccess() が真となる Result を返します。処理が失敗していた場合、以下の Result を返します。
474  @retval ResultInvalidState CreateMeshAsync を呼び出すタイミングが間違っている場合に返ります。また、非同期処理が完了していない場合、もしくは開始されていない場合にも返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
475  @if NIN_DOC
476  @retval ResultUserAccountNotExisted ユーザーアカウントが存在しませんでした。クリーンアップ処理を実行してください。
477  @endif
478 
479  @see CreateMeshAsync, IsCreateMeshCompleted
480  */
481  Result GetCreateMeshResult();
482 
483 
484  /*!
485  @cond PRIVATE
486  @brief メッシュを破棄します。(旧仕様)
487 
488  @details メッシュホストのみ使用可能です。
489  <br>
490  非同期のメッシュ破棄処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
491  引数で指定する AsyncContext をチェックすることで、処理の完了を監視することができます。<br>
492  ※ 正常にメッシュ破棄処理が開始できた場合、非同期処理に失敗することはありません。
493 
494  メッシュ破棄処理内で、参加者全員にメッシュを終了させることを通知します。<br>
495  通知を受けたステーションは、Mesh の内部状態が初期化され State_Disconnected の状態になります。
496 
497  @param[in] pAsyncContext 処理の進行状況をチェックするための AsyncContext のポインタを指定します。
498 
499  @return 正常にメッシュ破棄処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
500  @retval ResultInvalidState メッシュホスト以外が呼び出した場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
501  @retval ResultInvalidArgument 引数で指定された AsyncContext が、使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
502 
503  @see CreateMesh, LeaveMeshWithHostMigration
504  */
505  Result DestroyMesh(common::AsyncContext* pAsyncContext);
506  //!@endcond
507 
508  /*!
509  @brief メッシュを破棄します。
510 
511  @details メッシュホストのみ使用可能です。
512  <br>
513  非同期のメッシュ破棄処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
514  処理の完了は @ref IsDestroyMeshCompleted でチェックし、結果は @ref GetDestroyMeshResult で確認できます。<br>
515  ※ 正常にメッシュ破棄処理が開始できた場合、非同期処理に失敗することはありません。
516 
517  メッシュ破棄処理内で、参加者全員にメッシュを終了させることを通知します。<br>
518  通知を受けたステーションは、Mesh の内部状態が初期化され State_Disconnected の状態になります。
519 
520  @return 正常にメッシュ破棄処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
521  @retval ResultInvalidState メッシュホスト以外が呼び出した場合、もしくは既に他の非同期処理が開始されている場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
522 
523  @see IsDestroyMeshCompleted, GetDestroyMeshResult
524  @see CreateMeshAsync, LeaveMeshWithHostMigrationAsync
525  */
526  Result DestroyMeshAsync();
527 
528  /*!
529  @brief DestroyMeshAsync の非同期処理の完了をチェックします。
530 
531  @details @ref DestroyMeshAsync で開始された非同期処理は、本関数で完了をチェックできます。
532 
533  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
534 
535  @see DestroyMeshAsync, GetDestroyMeshResult
536  */
537  bool IsDestroyMeshCompleted();
538 
539  /*!
540  @brief DestroyMeshAsync の非同期処理の結果を取得します。
541 
542  @details @ref DestroyMeshAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。<br>
543  ※ 正常にメッシュ破棄処理が開始できた場合、非同期処理に失敗することはありません。
544 
545  @return DestroyMeshAsync の非同期処理の結果を返します。 処理が成功していた場合、 IsSuccess() が真となる Result を返します。処理が失敗していた場合、以下の Result を返します。
546  @retval ResultInvalidState 非同期処理が完了していない場合、もしくは開始されていない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
547 
548  @see DestroyMeshAsync, IsDestroyMeshCompleted
549  */
550  Result GetDestroyMeshResult();
551 
552 
553  /*!
554  @cond PRIVATE
555  @brief メッシュから離脱します。同時にメッシュ参加者にホストマイグレーション処理の開始を指示します。(旧仕様)
556 
557  @details メッシュホストのみ使用可能です。また、ホストマイグレーションが有効な場合のみ使用可能です。
558  <br>
559  非同期のメッシュ離脱処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
560  引数で指定する AsyncContext をチェックすることで、処理の完了を監視することができます。<br>
561  ※ 正常にメッシュ離脱処理が開始できた場合、非同期処理に失敗することはありません。
562 
563  非同期処理内で、参加者全員にホストマイグレーション処理の開始指示を通知します。<br>
564  通知を受けたステーションではホストマイグレーション処理が行われ、この API を呼び出したメッシュホストとの通信が切断した後も、
565  新たなメッシュホストの下でメッシュが継続されます。
566 
567  @return 正常にメッシュ離脱処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
568  @retval ResultInvalidState メッシュホスト以外が呼び出した、もしくはホストマイグレーションが無効な場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
569  @retval ResultInvalidArgument 引数で指定された AsyncContext が、使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
570 
571  @see CreateMesh, DestroyMesh
572  */
573  Result LeaveMeshWithHostMigration(common::AsyncContext* pAsyncContext);
574  //!@endcond
575 
576  /*!
577  @brief メッシュから離脱します。同時にメッシュ参加者にホストマイグレーション処理の開始を指示します。
578 
579  @details メッシュホストのみ使用可能です。また、ホストマイグレーションが有効な場合のみ使用可能です。
580  <br>
581  非同期のメッシュ離脱処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
582  処理の完了は @ref IsLeaveMeshWithHostMigrationCompleted でチェックし、結果は @ref GetLeaveMeshWithHostMigrationResult で確認できます。<br>
583  ※ 正常にメッシュ離脱処理が開始できた場合、非同期処理に失敗することはありません。
584 
585  非同期処理内で、参加者全員にホストマイグレーション処理の開始指示を通知します。<br>
586  通知を受けたステーションではホストマイグレーション処理が行われ、この API を呼び出したメッシュホストとの通信が切断した後も、
587  新たなメッシュホストの下でメッシュが継続されます。
588 
589  @return 正常にメッシュ離脱処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
590  @retval ResultInvalidState メッシュホスト以外が呼び出した場合、もしくはホストマイグレーションが無効な場合、あるいは既に他の非同期処理が開始されている場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
591 
592  @see IsLeaveMeshWithHostMigrationCompleted, GetLeaveMeshWithHostMigrationResult
593  @see CreateMeshAsync, DestroyMeshAsync
594  */
595  Result LeaveMeshWithHostMigrationAsync();
596 
597  /*!
598  @brief LeaveMeshWithHostMigrationAsync の非同期処理の完了をチェックします。
599 
600  @details @ref LeaveMeshWithHostMigrationAsync で開始された非同期処理は、本関数で完了をチェックできます。
601 
602  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
603 
604  @see LeaveMeshWithHostMigrationAsync, GetLeaveMeshWithHostMigrationResult
605  */
606  bool IsLeaveMeshWithHostMigrationCompleted();
607 
608  /*!
609  @brief LeaveMeshWithHostMigrationAsync の非同期処理の結果を取得します。
610 
611  @details @ref LeaveMeshWithHostMigrationAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。<br>
612  ※ 正常にメッシュ破棄処理が開始できた場合、非同期処理に失敗することはありません。
613 
614  @return LeaveMeshWithHostMigrationAsync の非同期処理の結果を返します。 処理が成功していた場合、 IsSuccess() が真となる Result を返します。処理が失敗していた場合、以下の Result を返します。
615  @retval ResultInvalidState 非同期処理が完了していない場合、もしくは開始されていない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
616 
617  @see LeaveMeshWithHostMigrationAsync, IsLeaveMeshWithHostMigrationCompleted
618  */
619  Result GetLeaveMeshWithHostMigrationResult();
620 
621 
622  /// @cond PRIVATE
623  /*!
624  @brief Join要求を許可するかどうかを返します。
625 
626  @return Join許可ならば0xFF、拒否ならばそれ以外の値が返されます。
627  */
628  uint8_t CheckApprovalJoin(transport::Station* pTargetStation);
629  /// @endcond
630 
631 
632  /*!
633  @cond PRIVATE
634  @brief メッシュに参加します。(旧仕様)
635 
636  @details メッシュへの非同期参加処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
637  第2引数で指定する AsyncContext をチェックすることで、処理の完了と成否を監視することができます。
638  また、処理中は @ref nn::pia::common::AsyncContext::Cancel を呼び出すことで、処理を中止することができます。
639 
640  【非同期処理完了時に AsyncContext を通して返される可能性のある Result】
641  <ul>
642  <li> ResultSuccess :非同期処理に成功しました。</li>
643  <li> ResultCancelled :非同期処理がキャンセルされました。クリーンアップ処理を実行してください。</li>
644  <li> ResultInvalidState :接続可能な状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。</li>
645  <li> ResultStationConnectionFailed :接続処理に失敗しました。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
646  <li> ResultStationConnectionNatTraversalFailedUnknown :NAT トラバーサル接続処理に失敗しました。NAT タイプは不明でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
647  <li> ResultNatTraversalFailedBothEim :NAT トラバーサル接続処理に失敗しました。自身および接続失敗した相手の NAT タイプは共に EIM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
648  <li> ResultNatTraversalFailedLocalEimRemoteEdm :NAT トラバーサル接続処理に失敗しました。自身の NAT タイプは EIM, 接続失敗した相手の NAT タイプは EDM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
649  <li> ResultNatTraversalFailedLocalEdmRemoteEim :NAT トラバーサル接続処理に失敗しました。自身の NAT タイプは EDM, 接続失敗した相手の NAT タイプは EIM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
650  <li> ResultNatTraversalFailedBothEdm :NAT トラバーサル接続処理に失敗しました。自身および接続失敗した相手の NAT タイプは共に EDM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
651  <li> ResultNatTraversalRequestTimeout :NAT トラバーサル接続処理に失敗しました。NAT トラバーサル要求がタイムアウトしました。 インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。</li>
652  <li> ResultJoinRequestDenied :メッシュホストに接続を拒否されました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
653  <li> ResultMeshIsFull :参加を希望したメッシュが満員で、参加できませんでした。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
654  <li> ResultRelayFailedNoCandidate :リレー経路の候補がいなかったため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
655  <li> ResultRelayFailedRttLimit :リレー経路の RTT 制限を超えたため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
656  <li> ResultRelayFailedRelayNumLimit :リレー経路のリレー依頼数制限を超えたため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
657  <li> ResultRelayFailedUnknown :リレー接続に失敗しました。(詳細不明)クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。</li>
658  <li> ResultInvalidSystemMessage :メッシュホストから不正な応答が届いたため、処理を中断しました。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。</li>
659  <li> ResultIncompatibleFormat :相手の通信形式が非互換です。異なる ROM (通信互換の無い Ver.の Pia を使用した ROM)と通信しようとした場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。</li>
660  </ul>
661 
662  処理に失敗(もしくは @ref nn::pia::common::AsyncContext::Cancel で処理を中止)した後に Mesh インスタンスの破棄などをせずに別の処理を行う場合、 @ref Cleanup を呼び出して
663  Mesh をクリーンアップしてから行う必要があります。<br>
664  インターネット通信の場合は NAT セッションの開始( @ref nn::pia::inet::NexFacade::StartNatSession )からやり直す必要があります。
665 
666  @param[in] stationConnectionInfo 参加したいメッシュのホストの接続用情報を指定します。
667  @param[in] pAsyncContext 処理の進行状況をチェックするための AsyncContext のポインタを指定します。
668 
669  @return 正常にメッシュへの参加処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
670  @retval ResultInvalidArgument 引数で指定された AsyncContext が使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
671  @retval ResultInvalidState 既にメッシュ参加済み、もしくは JoinMesh 非同期処理開始済みでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
672 
673  @see LeaveMesh
674  */
675  Result JoinMesh(const transport::StationConnectionInfo& stationConnectionInfo, common::AsyncContext* pAsyncContext);
676  //!@endcond
677 
678  /*!
679  @brief メッシュに参加します。
680 
681  @details メッシュへの非同期参加処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
682  処理の完了は @ref IsJoinMeshCompleted でチェックし、結果は @ref GetJoinMeshResult で確認できます。<br>
683  また、処理中は @ref CancelJoinMeshAsync を呼び出すことで、処理を中止することができます。
684 
685  処理に失敗(もしくは @ref CancelJoinMeshAsync で処理を中止)した後に Mesh インスタンスの破棄などをせずに別の処理を行う場合、 @ref Cleanup を呼び出して
686  Mesh をクリーンアップしてから行う必要があります。<br>
687  インターネット通信の場合は NAT セッションの開始( @ref nn::pia::inet::NexFacade::StartNatSessionAsync )からやり直す必要があります。
688 
689  @param[in] stationConnectionInfo 参加したいメッシュのホストの接続用情報を指定します。
690 
691  @return 正常にメッシュへの参加処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
692  @retval ResultInvalidState 既にメッシュ参加済み、もしくは既に他の非同期処理が開始されている場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
693 
694  @see IsJoinMeshCompleted, GetJoinMeshResult, CancelJoinMeshAsync
695  @see LeaveMeshAsync
696  */
697  Result JoinMeshAsync(const transport::StationConnectionInfo& stationConnectionInfo);
698 
699  /*!
700  @brief JoinMeshAsync の非同期処理の完了をチェックします。
701 
702  @details @ref JoinMeshAsync で開始された非同期処理は、本関数で完了をチェックできます。
703 
704  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
705 
706  @see JoinMeshAsync, GetJoinMeshResult, CancelJoinMeshAsync
707  */
708  bool IsJoinMeshCompleted();
709 
710  /*!
711  @brief JoinMeshAsync の非同期処理の結果を取得します。
712 
713  @details @ref JoinMeshAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。
714 
715  @return JoinMeshAsync の非同期処理の結果を返します。 処理が成功していた場合、 IsSuccess() が真となる Result を返します。それ以外では、以下の Result を返します。
716  @retval ResultCancelled 非同期処理がキャンセルされました。クリーンアップ処理を実行してください。
717  @retval ResultInvalidState 接続可能な状態では無かった場合に返ります。また、非同期処理が完了していない場合、もしくは開始されていない場合にも返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
718  @retval ResultStationConnectionFailed 接続処理に失敗しました。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
719  @retval ResultStationConnectionNatTraversalFailedUnknown NAT トラバーサル接続処理に失敗しました。NAT タイプは不明でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
720  @retval ResultNatTraversalFailedBothEim NAT トラバーサル接続処理に失敗しました。自身および接続失敗した相手の NAT タイプは共に EIM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
721  @retval ResultNatTraversalFailedLocalEimRemoteEdm NAT トラバーサル接続処理に失敗しました。自身の NAT タイプは EIM, 接続失敗した相手の NAT タイプは EDM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
722  @retval ResultNatTraversalFailedLocalEdmRemoteEim NAT トラバーサル接続処理に失敗しました。自身の NAT タイプは EDM, 接続失敗した相手の NAT タイプは EIM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
723  @retval ResultNatTraversalFailedBothEdm NAT トラバーサル接続処理に失敗しました。自身および接続失敗した相手の NAT タイプは共に EDM でした。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
724  @retval ResultNatTraversalRequestTimeout NAT トラバーサル接続処理に失敗しました。NAT トラバーサル要求がタイムアウトしました。 インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示してください。ですが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。クリーンアップ処理を実行してください。
725  @retval ResultJoinRequestDenied メッシュホストに接続を拒否されました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
726  @retval ResultMeshIsFull 参加を希望したメッシュが満員で、参加できませんでした。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
727  @retval ResultRelayFailedNoCandidate リレー経路の候補がいなかったため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
728  @retval ResultRelayFailedRttLimit リレー経路の RTT 制限を超えたため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
729  @retval ResultRelayFailedRelayNumLimit リレー経路のリレー依頼数制限を超えたため、リレー接続に失敗しました。クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
730  @retval ResultRelayFailedUnknown リレー接続に失敗しました。(詳細不明)クリーンアップ処理を実行してください。アプリケーションで適切にハンドリングしてください。インターネット通信でこのエラーが発生した場合は、ネットワークエラーコードに変換し、エラー・EULA アプレットで表示しても構いませんが、ローカル通信時にはエラー・EULA アプレットでエラーコード付きのエラー表示は行わないでください。
731  @retval ResultInvalidSystemMessage メッシュホストから不正な応答が届いたため、処理を中断しました。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
732  @retval ResultIncompatibleFormat 相手の通信形式が非互換です。異なる ROM (通信互換の無い Ver.の Pia を使用した ROM)と通信しようとした場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
733  @if NIN_DOC
734  @retval ResultUserAccountNotExisted ユーザーアカウントが存在しませんでした。クリーンアップ処理を実行してください。
735  @endif
736 
737  @see JoinMeshAsync, IsJoinMeshCompleted, CancelJoinMeshAsync
738  */
739  Result GetJoinMeshResult();
740 
741  /*!
742  @brief JoinMeshAsync の非同期処理をキャンセルします。
743 
744  @details JoinMeshAsync 開始された非同期処理は、本関数でキャンセルできます。
745  キャンセル処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
746  本関数を呼び出した後、ライブラリは速やかに非同期処理のキャンセルを行いますが、
747  キャンセルの完了は @ref IsJoinMeshCompleted() でチェックする必要があります。
748 
749  @return JoinMeshAsync の非同期処理のキャンセル結果を返します。処理が成功していた場合、 IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
750  @retval ResultInvalidState JoinMeshAsync の非同期処理が行われていないタイミングで呼び出しています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
751 
752  @see JoinMeshAsync, IsJoinMeshCompleted, GetJoinMeshResult
753  */
754  Result CancelJoinMeshAsync();
755 
756 
757  /*!
758  @cond PRIVATE
759  @brief 参加しているメッシュから離脱します。(旧仕様)
760 
761  @details メッシュクライアントのみ使用可能です。
762  <br>
763  メッシュからの非同期離脱処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
764  引数で指定する AsyncContext をチェックすることで、処理の完了と成否を監視することができます。
765 
766  @param[in] pAsyncContext 処理の進行状況をチェックするための AsyncContext のポインタを指定します。
767 
768  @return 正常にメッシュからの離脱処理を開始できた場合、成功の Result が返されます。
769  @retval ResultInvalidState メッシュホストが呼び出した場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
770  @retval ResultInvalidArgument 引数で指定された AsyncContext が、使用できる状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
771 
772  @see JoinMesh
773  */
774  Result LeaveMesh(common::AsyncContext* pAsyncContext);
775  //!@endcond
776 
777  /*!
778  @brief 参加しているメッシュから離脱します。
779 
780  @details メッシュクライアントのみ使用可能です。
781  <br>
782  メッシュからの非同期離脱処理を開始します。開始した処理は @ref nn::pia::common::Scheduler::Dispatch を定期的に呼び出すことで進行します。
783  処理の完了は @ref IsJoinMeshCompleted でチェックし、結果は @ref GetJoinMeshResult で確認できます。<br>
784  ※ 正常にメッシュ離脱処理が開始できた場合、非同期処理に失敗することはありません。
785 
786  @return 正常にメッシュからの離脱処理を開始できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
787  @retval ResultInvalidState メッシュホストが呼び出した場合、もしくは既に他の非同期処理が開始されている場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
788 
789  @see IsLeaveMeshCompleted, GetLeaveMeshResult
790  @see JoinMeshAsync
791  */
792  Result LeaveMeshAsync();
793 
794  /*!
795  @brief LeaveMeshAsync の非同期処理の完了をチェックします。
796 
797  @details @ref LeaveMeshAsync で開始された非同期処理は、本関数で完了をチェックできます。
798 
799  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
800 
801  @see LeaveMeshAsync, GetLeaveMeshResult
802  */
803  bool IsLeaveMeshCompleted();
804 
805  /*!
806  @brief LeaveMeshAsync の非同期処理の結果を取得します。
807 
808  @details @ref LeaveMeshAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。<br>
809  ※ 正常にメッシュ破棄処理が開始できた場合、非同期処理に失敗することはありません。
810 
811  @return LeaveMeshAsync の非同期処理の結果を返します。 処理が成功していた場合、 IsSuccess() が真となる Result を返します。処理が失敗していた場合、以下の Result を返します。
812  @retval ResultInvalidState 非同期処理が完了していない場合、もしくは開始されていない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
813 
814  @see LeaveMeshAsync, IsLeaveMeshCompleted
815  */
816  Result GetLeaveMeshResult();
817 
818 
819  /*!
820  @brief メッシュから任意のステーションを追放します。
821 
822  @details メッシュホストのみ使用可能です。
823  <br>
824  引数で指定した StationId が割り当てられたステーションへ追放通知を伝達し、
825  追放通知を受けた対象のステーションではメッシュ離脱処理が行われます。
826 
827  追放通知の通信遅延などが原因で、この関数呼出に成功した後実際にメッシュから離脱するまでにある程度の時間がかかる場合があります。
828 
829  @param[in] id 追放したいステーションに割り当てられている StationId を指定します。
830 
831  @return 正常にメッシュからのステーション追放処理を実行できた場合、IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
832  @retval ResultInvalidState メッシュホスト以外が呼び出した場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
833  @retval ResultInvalidArgument 引数で指定された StationId が、ホスト自身を示す Id やメッシュに参加していない Id だった場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
834  @retval ResultBufferIsFull 追放処理管理用バッファもしくは追放通知送信用バッファに空きが無かった場合に返されます。時間をあけてから再度実行すれば、成功する可能性があります。アプリケーションで適切にハンドリングしてください。
835  */
836  Result KickoutStation(StationId id);
837 
838  /// @cond PRIVATE
839  Result KickoutStationByIndex(StationIndex index);
840  /// @endcond
841 
842  /*!
843  end of name メッシュの構築、破棄 及び 参加、離脱
844  @}
845  */
846 
847  /*!
848  @name メッシュ解析
849  @{
850  */
851 
852  /*!
853  @brief 現在メッシュに接続している有効なステーション数を取得します。
854 
855  @return 接続中のステーション数。
856  */
857  uint16_t GetStationNum() const;
858 
859 
860  /*!
861  @brief メッシュホストの StationId を取得します。
862 
863  @details メッシュホストが確定していない場合は StationIdInvalid が返ります。
864 
865  @return メッシュホストを示す StationId。
866  */
867  StationId GetHostStationId() const;
868 
869 
870  /*!
871  @brief 自分自身を示す StationId を取得します。
872 
873  @details 自分自身の StationId が確定していない場合は StationIdInvalid が返ります。
874 
875  @return 自分自身を示す StationId。
876  */
877  StationId GetLocalStationId() const;
878 
879 
880  /// @cond PRIVATE
881  StationIndex GetHostStationIndex() const;
882  StationIndex GetLocalStationIndex() const;
883  /// @endcond
884 
885 
886  /*!
887  @brief 自分がメッシュホストであるかどうかを取得します。
888 
889  @details メッシュに参加していない状態であれば、常に false が返されます。
890 
891  @return 自分がメッシュホストであれば true、そうでなければ false が返されます。
892  */
893  bool IsHost() const;
894 
895 
896  /*!
897  @brief 任意の StationId がメッシュ内で現在有効かどうかを確認します。
898 
899  @param[in] id 確認したい StationId を指定します。
900 
901  @return 指定された StationId が有効な場合は true、そうでなければ false が返ります。
902  */
903  bool IsValidStationId(StationId id) const;
904 
905 
906  /// @cond PRIVATE
907  bool IsValidStationIndex(StationIndex index) const;
908 
909  /*!
910  @brief メッシュ内で現在未使用の StationIndex を取得します。
911 
912  @return 未使用の有効な StationIndex が発見できなければ StationIndex_Invalid が返ります。
913  */
914  StationIndex GetUsableStationIndex();
915 
916 
917  /*!
918  @brief メッシュ内で現在有効な StationIndex を示す Bitmap を取得します。
919 
920  @details StationIndex との対応ビットは、StationIndex_1 が 0x00000001, StationIndex_2 が 0x00000002 … という順序でシフトします。
921 
922  @return メッシュ内で現在有効な StationIndex に対応するビットが立った状態のビットマップが返ります。
923  */
924  uint32_t GetValidStationIndexBitmap() const;
925  /// @endcond
926 
927  /*!
928  @brief 現在の Mesh の状態が通信可能かどうか確認します。
929 
930  @details 現在の Mesh が通信可能な状態かどうかを Result で示します。通信不可能な状態だった場合、 @ref GetDisconnectReason を使用して通信不可能になった詳細な理由を確認可能です。
931 
932  @return 通信可能な状態の場合は IsSuccess() が真となる Result を返します。それ以外では以下の Result を返します。
933  @retval ResultMeshConnectionIsLost Mesh が通信不可能な状態です。 クリーンアップ処理を実行してください。
934 
935  @see GetDisconnectReason
936  */
937  Result CheckConnectionError() const;
938 
939 
940  /*!
941  @brief Mesh が通信不可能となった理由を取得します。
942 
943  @details Mesh が通信可能な状態だった場合は、常に UNKNOWN_REASON が返されます。
944 
945  @return Mesh が通信不可能となった理由を表す DisconnectReason
946 
947  @see CheckConnectionError
948  */
949  DisconnectReason GetDisconnectReason() const;
950 
951  /*!
952  @brief ビットレート判定機能でのビットレート値が取得できるかどうかを取得します。
953 
954  @return ビットレート値が取得できる状態になっていれば true を返します。タイムアウトやキャンセル等の理由で測定が失敗に終わった場合も true が返されます。
955  */
956  bool IsBitRateCheckCompleted() const;
957 
958  /*!
959  @brief ビットレート判定機能によって計測された、アップリンク方向の回線のビットレートを取得します。
960 
961  @details この API 呼び出しで得られる値は、測定処理において単位時間あたりに受信できたデータ量にすぎず、
962  必ずしも回線の真の実力を表すものではないことに注意してください。
963  実際には高ビットレートが期待できる回線であったとしても、アプリケーション側の要求水準が
964  控えめなものであれば、測定処理におけるデータ送受信量も控えめなものとなるので、
965  取得できる bps 値は小さめなものとなります。
966 
967  @param[out] pBps 測定されたビットレート値がセットされます。単位は bps です。測定値が得られなかった場合は負の値がセットされます。
968 
969  @return 呼び出しが成功すれば、IsSuccess() が true を返す Result が返されます。
970 
971  @retval ResultNotInitialized インスタンスが初期化されていません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
972  @retval ResultInvalidArgument 引数が誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
973  @retval ResultInvalidState この関数を呼び出すタイミングが誤っています。ビットレート判定機能を利用しない設定であるにもかかわらず、本 API を呼び出している可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
974  */
975  Result GetUplinkBitRate(int32_t* pBps);
976 
977  /*!
978  end of name メッシュ解析
979  @}
980  */
981 
982  /*!
983  @name コールバック関数の登録、登録解除
984  @{
985  */
986 
987  /*!
988  @brief メッシュの状態が変化した場合に呼び出されるコールバック関数を登録します。
989 
990  @details メッシュの状態変化(ステーション参加、離脱)発生時に呼び出されるコールバック関数を登録します。
991  <br>
992  メッシュ状態変化コールバック関数は、基本的に @ref nn::pia::common::Scheduler::Dispatch の内部で呼び出されます。<br>
993  例外として、@ref CreateMeshAsync 、 @ref DestroyMeshAsync 呼出時にも発生します。 @ref Cleanup 呼出時にも発生する可能性があります。
994 
995  登録する関数内には長時間ブロックするような処理を記述してはいけません。<br>
996  また、登録する関数内で session モジュールの関数は呼び出してはいけません。
997 
998  @param[in] callback 登録するコールバック関数へのポインタを指定します。
999 
1000  @see UnregisterMeshEventCallback
1001  */
1002  void RegisterMeshEventCallback(MeshEventCallback callback);
1003 
1004 
1005  /*!
1006  @brief 登録されているメッシュ状態変化コールバック関数を登録解除します。
1007 
1008  @see RegisterMeshEventCallback
1009  */
1010  void UnregisterMeshEventCallback();
1011 
1012 
1013  /*!
1014  @brief メッシュホストでジョイン要求が来た際に呼び出される承認、拒否判定コールバックを登録します。
1015 
1016  @details ジョイン要求承認、拒否判定コールバック関数は、@ref nn::pia::common::Scheduler::Dispatch の内部で呼び出されます。
1017  <br>
1018  登録する関数内には長時間ブロックするような処理を記述してはいけません。
1019 
1020  コールバック関数の引数で、ジョイン要求送信元ステーションの識別トークンが渡されます。
1021 
1022  コールバック関数を登録しなかった場合、ジョイン要求はメッシュ満員時以外承認されます。
1023 
1024  @param[in] callback 登録するコールバック関数へのポインタを指定します。
1025 
1026  @see Startup, UnregisterJoiningMeshApprovalCallback
1027  */
1028  void RegisterJoiningMeshApprovalCallback(JoiningMeshApprovalCallback callback);
1029 
1030 
1031  /*!
1032  @brief 登録されているジョイン要求承認、拒否判定コールバック関数を登録解除します。
1033 
1034  @see RegisterJoiningMeshApprovalCallback
1035  */
1036  void UnregisterJoiningMeshApprovalCallback();
1037 
1038 
1039  /// @cond PRIVATE
1040  /*!
1041  @brief 複数候補版ホストマイグレーションで、次期親候補順位を任意に調整するためのコールバック関数を登録します。
1042 
1043  @details 次期親候補順位を任意に調整するためのコールバック関数は、@ref nn::pia::common::Scheduler::Dispatch の内部で呼び出されます。
1044  <br>
1045  登録する関数内には長時間ブロックするような処理を記述してはいけません。
1046 
1047  @param[in] callback 登録するコールバック関数へのポインタを指定します。
1048  @return 複数候補版ホストマイグレーションが有効な状態で呼び出せば IsSuccess() が真となる Result が返ります。
1049 
1050  @see UnregisterCheckHostCandidateRankingCallback
1051  */
1052  Result RegisterCheckHostCandidateRankingCallback(CheckHostCandidateRankingCallback callback);
1053 
1054 
1055  /*!
1056  @brief 登録されている次期親候補順位を任意に調整するためのコールバック関数を登録解除します。
1057 
1058  @see RegisterCheckHostCandidateRankingCallback
1059  */
1060  void UnregisterCheckHostCandidateRankingCallback();
1061  /// @endcond
1062 
1063 
1064  /// @cond PRIVATE
1065  void RegisterEventListener(MeshEventListener* pEventListener);
1066  void UnregisterEventListener();
1067 
1068  void RegisterGetSessionIdCallback(GetSessionIdCallback callback);
1069  void UnregisterGetSessionIdCallback();
1070  /// @endcond
1071 
1072 
1073  /*!
1074  end of name コールバック関数の登録、登録解除
1075  @}
1076  */
1077 
1078 
1079  /// @cond PRIVATE
1080  /*!
1081  @brief システムが自動生成した MeshProtocol を取得します。
1082 
1083  @return MeshProtocol のポインタ。
1084  */
1085  MeshProtocol* GetMeshProtocol();
1086  /// @endcond
1087 
1088  /// @cond PRIVATE
1089  /*!
1090  @brief システムが自動生成した StationProtocol を取得します。
1091 
1092  @return StationProtocol のポインタ。
1093  */
1094  transport::StationProtocol* GetStationProtocol();
1095  /// @endcond
1096 
1097 
1098  /*!
1099  @name 同期クロック
1100  @{
1101  */
1102 
1103  /*!
1104  @brief メッシュ作成時刻からの経過時間(同期クロック)をミリ秒で返します。
1105 
1106  @details 同期クロックは、メッシュに参加している Station 間で同期される時計です。
1107  メッシュに参加したクライアントは、定期的に時刻同期パルスをメッシュホストに送信します。
1108  ホストがこのパルスに応答することで、ホストと各クライアントの時刻同期が実現されます。
1109  この同期パルス送信間隔はデフォルトで 2 秒ですが、アプリケーションがこの値を
1110  変更することもできます。詳しくは SetSyncClockPulseInterval(), GetSyncClockPulseInterval()
1111  を参照してください。
1112 
1113  @return メッシュ作成時刻からの経過時間をミリ秒で返します。 メッシュホストとの同期が取れていない
1114  メッシュクライアントがこの API を呼び出したときは、負の値が返されます。
1115  @see SetSyncClockPulseInterval, GetSyncClockPulseInterval
1116  */
1117  int64_t GetTime() const;
1118 
1119 
1120  /*!
1121  @brief 同期クロックの同期パルス送信間隔を指定します。
1122 
1123  @param[in] interval 同期パルス送信の時間間隔です。単位はミリ秒です。
1124  @see GetTime, GetSyncClockPulseInterval
1125  */
1126  void SetSyncClockPulseInterval(int32_t interval);
1127 
1128 
1129  /*!
1130  @brief 同期クロックの同期パルス送信間隔を取得します。
1131 
1132  @return 同期パルス送信間隔を取得します。単位はミリ秒です。
1133  @see GetTime, SetSyncClockPulseInterval
1134  */
1135  int32_t GetSyncClockPulseInterval() const;
1136 
1137  /*!
1138  end of name 同期クロック
1139  @}
1140  */
1141 
1142 
1143  /*!
1144  @name リレー通信機能
1145  @{
1146  */
1147 
1148  /*!
1149  @brief リレー接続有効時に、ステーション1台に割り当てられる転送依頼数の最大制限値を設定します。
1150 
1151  @details リレー接続経路探索&決定時の指標として本関数で設定された制限値を利用します。<br>
1152  設定変更しない場合のデフォルト値は "[メッシュ最大参加数] * [メッシュ最大参加数]" です。<br>
1153 
1154  同じメッシュへの参加者は全員同じ値を設定することを推奨します。(異なる値を設定した場合は動作保証外とします)
1155 
1156  リレー接続が有効なネットワークトポロジーの場合かつ @ref Startup 前にのみ使用可能です。
1157 
1158  @param[in] num 設定したい最大制限値を指定します。
1159 
1160  @return 正常に設定できた場合、成功の Result が返されます。
1161  @retval ResultInvalidState リレー接続が有効ではない、もしくは既に Startup 呼出後の場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1162  */
1163  Result SetMaxNumOfRelayRoutesAssignedToStation(uint16_t num);
1164 
1165 
1166  /*!
1167  @brief リレー接続有効時に、1つのリレー接続経路の合計 RTT の最大制限値を設定します。
1168 
1169  @details リレー接続経路探索&決定時の指標として本関数で設定された制限値を利用します。<br>
1170  設定変更しない場合のデフォルト値は nn::pia::session::SessionMaxRttDefault です。<br>
1171 
1172  同じメッシュへの参加者は全員同じ値を設定することを推奨します。(異なる値を設定した場合は動作保証外とします)
1173 
1174  リレー接続が有効なネットワークトポロジーの場合かつ @ref Startup 前にのみ使用可能です。
1175 
1176  @param[in] rtt 設定したい最大制限値を指定します。単位は msec です。
1177 
1178  @return 正常に設定できた場合、成功の Result が返されます。
1179  @retval ResultInvalidState リレー接続が有効ではない、もしくは既に Startup 呼出後の場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1180  */
1181  Result SetMaxRtt(uint16_t rtt);
1182 
1183  /*!
1184  @brief (デバッグ用)リレー接続有効時に、任意の StationIndex と自分自身との接続経路情報を取得します。
1185 
1186  @details 本関数はデバッグ用です。製品には組み込まないようお願いします。<br>
1187  自分自身と targetIndex の接続経路情報について、以下の規則で pRelayIndex へ格納します。
1188  (接続経路情報が取得できなかった場合は pRelayIndex の値を変更することはありません)
1189  <ul>
1190  <li>直通接続の場合 : targetIndex</li>
1191  <li>リレー接続の場合 : リレー依頼先の StationIndex</li>
1192  <li>自分自身の場合 : StationIndex_Invalid</li>
1193  <li>接続していない場合 : StationIndex_Invalid</li>
1194  </ul>
1195 
1196  @param[in] targetIndex 接続経路を取得したい対象の StationIndex を指定します。
1197  @param[out] pRelayIndex 接続経路情報を示す StationIndex が格納されます。
1198 
1199  @return 正常に取得できた場合、成功の Result が返されます。
1200  @retval ResultInvalidState リレー接続が有効ではない場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1201  @retval ResultInvalidArgument 対象の StationIndex が有効な値ではない場合、もしくは引数で指定されたポインタが有効ではない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1202  */
1203  Result GetConnectionRoute(StationIndex targetIndex, StationIndex* pRelayIndex);
1204 
1205  /*!
1206  @brief (デバッグ用)リレー接続有効時に、任意の StationIndex 間の接続経路エミュレーション設定を指定します。
1207 
1208  @details 本関数はデバッグ用です。製品には組み込まないようお願いします。
1209 
1210  @details 本関数を使用する場合は @ref Mesh::SetDebugSetting で接続経路エミュレーション機能が有効となるように設定する必要があります。
1211 
1212  @details EmulationType_Relay を設定した場合、対象の StationIndex が接続した際の接続方法は
1213  (たとえ実際には直通接続ができる場合でも)必ずリレー接続となります。
1214 
1215  @details 本関数はメッシュに接続していないタイミングで呼び出す必要があります。
1216  メッシュ参加済みの状態で接続経路エミュレーション設定を変更することは動作保証外とします。
1217 
1218  @param[in] index1 対象の StationIndex を指定します。
1219  @param[in] index2 対象の StationIndex を指定します。
1220  @param[in] type 接続方法エミュレーション設定を指定します。
1221 
1222  @return 正常に設定できた場合、成功の Result が返されます。
1223  @retval ResultInvalidState リレー接続が有効ではない場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1224  @retval ResultInvalidArgument 対象の StationIndex が有効な値ではない場合、もしくは EmulationType に無効な値を指定した場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
1225 
1226  @see ResetRelayEmulation
1227  */
1228  Result RelayEmulation(StationIndex index1, StationIndex index2, EmulationType type);
1229 
1230  /*!
1231  @brief (デバッグ用)リレー接続有効時に、接続経路エミュレーション設定を初期化します。
1232 
1233  @details 本関数はデバッグ用です。製品には組み込まないようお願いします。
1234 
1235  @details Mesh::RelayEmulation を使用して設定された接続経路エミュレーションについて全て初期化します。
1236  (全ての StationIndex の組み合わせに対して EmulationType_None を設定した状態と同等です)
1237 
1238  @details 本関数はメッシュに接続していないタイミングで呼び出す必要があります。
1239  メッシュ参加済みの状態で接続経路エミュレーション設定を変更することは動作保証外とします。
1240 
1241  @see RelayEmulation
1242  */
1243  void ResetRelayEmulation();
1244 
1245  /*!
1246  end of name リレー通信機能
1247  @}
1248  */
1249 
1250 
1251  /// @cond PRIVATE
1252  /*!
1253  @brief ホストマイグレーション処理の開始判断のフラグを設定します。
1254  @param[in] val 設定後のフラグの状態を指定します。
1255  */
1256  void SetHostMigrationStarted(bool val);
1257  /// @endcond
1258 
1259  /// @cond PRIVATE
1260  /*!
1261  @brief ホストマイグレーション処理の開始判断のフラグを取得します。
1262  @return フラグの状態が返ります。
1263  */
1264  bool IsHostMigrationStarted();
1265  /// @endcond
1266 
1267  /// @cond PRIVATE
1268  ProcessHostMigrationJob* GetProcessHostMigrationJobPtr();
1269  KickoutManageJob* GetKickoutManageJobPtr();
1270  ProcessDestroyMeshJob* GetProcessDestroyMeshJobPtr();
1271  void SetFatalError(DisconnectReason reason);
1272  ProcessUpdateMeshJob* GetProcessUpdateMeshJobPtr();
1273  NetworkTopology GetNetworkTopologyType();
1274  const SignatureSettingStorage* GetSignatureSettingStorage() const;
1275  static Result SetDebugSettingForInternal(const DebugSetting& debugSetting);
1276  void NotifyLeaveStationAddress(const common::StationAddress& leftStationAddress);
1277  /// @endcond
1278 
1279  /*!
1280  @name その他
1281  @{
1282  */
1283 
1284  /*!
1285  @brief デバッグに有用な情報をプリントします。
1286 
1287  @param[in] flag トレースフラグの論理和。詳細は @ref TraceFlag 型を参照してください。
1288  */
1289  void TraceStationConnectionInfoList(uint64_t flag);
1290 
1291  /// @cond PRIVATE
1292  bool IsHostMigrationEnabled() const;
1293  HostMigrationMode GetHostMigrationMode() const;
1294  int GetJoinMeshSequence() const;
1295  int GetHostMigrationSequence() const;
1296  void SetSkipCleanupReport(bool isSkip);
1297  void SetSkipReport(bool isSkip);
1298  void SendReport(uint8_t type);
1299  void SetupSendReport();
1300  bool IsProcessedAtMeshBegin() const;
1301  bool IsProcessingLeaveMesh() const;
1302  bool IsProcessingHostMigration() const;
1303  State GetMeshState() const;
1304  int32_t GetProcessUpdateMeshJobStepSequence() const;
1305  uint8_t GetLocalPlayerCount() const;
1306  bool IsPlayersCountedAsParticipants() const;
1307  bool IsRecentPlayRecordEnabled() const;
1308  bool IsMultiPlayerEnabled() const;
1309  Result CheckPlayerInfo(const transport::Station::PlayerInfo& playerInfo) const;
1310  Result CheckPlayerInfoSetting(const transport::Station::PlayerInfo* pPlayerInfo, uint8_t playerInfoSize) const;
1311  void CleanupMonitoringBeginData();
1312  common::MonitoringDataSender* GetMonitoringDataSender();
1313  BitRateCheckMode GetBitRateCheckMode();
1314  transport::BandwidthCheckProtocol* GetBandwidthCheckProtocol();
1315  bool IsBandwidthCheckProtocolSetupParamValid(int32_t uplinkBitRateLowerLimit, uint32_t bitRateCheckPacketSize, int32_t bitRateMeasuringSpan) const;
1316  /// @endcond
1317 
1318  /// @cond PRIVATE
1319  /*!
1320  @brief CheckApprovalJoin で参加要求をエラーとして拒否するフラグをセットする(要求側では ResultJoinRequestDenied で参加失敗)
1321  */
1322  void SetDenyJoinRequestByInvalidState(bool isDeny);
1323  /// @endcond
1324 
1325  /// @cond PRIVATE
1326  /*!
1327  @brief CheckApprovalJoin で参加要求を満員のため拒否するフラグをセットする(要求側では ResultSessionIsFull で参加失敗)
1328  */
1329  void SetDenyJoinRequestBySessionIsFull(bool isFull);
1330  /// @endcond
1331 
1332  /*!
1333  @brief デバッグに有用な情報をプリントします。
1334 
1335  @param[in] flag トレースフラグの論理和。詳細は @ref TraceFlag 型を参照してください。
1336  */
1337  virtual void Trace(uint64_t flag) const;
1338 
1339  /*!
1340  end of name その他
1341  @}
1342  */
1343 
1344 protected:
1345  static Mesh* s_pMesh;
1346  static DebugSetting s_DebugSetting;
1347  static Result setDebugSettingImpl(const DebugSetting& debugSetting);
1348 
1349 private:
1350  /// @cond PRIVATE
1351  /*!
1352  @brief コンストラクタ(使用禁止)
1353  */
1354  Mesh(const session::Mesh::Setting& setting);
1355  /// @endcond
1356 
1357  /// @cond PRIVATE
1358  /*!
1359  @brief デストラクタ(使用禁止)
1360  */
1361  virtual ~Mesh();
1362  /// @endcond
1363 
1364  /// @cond PRIVATE
1365  /*!
1366  @brief コピーコンストラクタは封印します。
1367  */
1368  Mesh(const Mesh&);
1369  /// @endcond
1370 
1371  /// @cond PRIVATE
1372  /*!
1373  @brief 代入演算子は封印します。
1374  */
1375  Mesh& operator=(const Mesh&);
1376  /// @endcond
1377 
1378  Result Initialize(const session::Mesh::Setting& setting, bool isRelayEmulationEnabled);
1379 
1380  Result SetupLocalPlayerInfo();
1381  Result SetupProtocols(); // システムプロトコルの準備
1382 
1383  void CleanupStatus(); // 内部状態を初期化する Mesh終了時に呼ぶ
1384  void CleanupJobs(); // Meshが管理するJobを初期化する Mesh終了時に呼ぶ
1385 
1386  void CleanupStationsJobs();
1387 
1388  void FixConnectedId(StationIndex idx);
1389  void UnfixDisconnectedId(StationIndex idx);
1390 
1391  void StartUse(StationIndex idx); // 使用中に変える
1392  void StopUse(StationIndex idx); // 未使用に変える
1393  void JoinResponseComplete(StationIndex idx);
1394  void ResetStationIndexUsage(); // StationIndex の使用状況をリセット
1395 
1396  // メッシュ構築、参加に成功した時刻を記録します。
1397  void SetMeshStartTime(common::Time startTime);
1398 
1399  // メッシュ構築、参加に成功した時刻として有効な値が記録されているか否かを確認します。
1400  bool IsMeshStartTimeValid() const;
1401 
1402  // 任意の時刻とメッシュ構築、参加に成功した時刻の差を計算します。
1403  common::TimeSpan CalcDiffWithMeshStartTime(common::Time target) const;
1404 
1405  void ProcessingAtMeshBegin();
1406  void ProcessingAtMeshEnd(DisconnectReason reason);
1407  void ProcessingAtEndHM();
1408  void MonitoringProcess(DisconnectReason reason, uint8_t type);
1409 
1410  void AddPlayHistory(transport::Station* pTargetStation, transport::Station::PlayerInfo* pLocalPlayerInfo, uint32_t localPlayerInfoSize);
1411 
1412  enum AsyncProcessingName
1413  {
1414  AsyncProcessingName_Nothing = 0,
1415  AsyncProcessingName_CreateSession,
1416  AsyncProcessingName_DestroySession,
1417  AsyncProcessingName_LeaveSessionWithHm,
1418  AsyncProcessingName_JoinSession,
1419  AsyncProcessingName_LeaveSession
1420  };
1421 
1422  void ResetInternalAsyncState();
1423  bool IsAsyncProcessCompleted(AsyncProcessingName processingName);
1424  Result GetAsyncProcessResult(AsyncProcessingName processingName);
1425  Result CancelAsyncProcess(AsyncProcessingName processingName);
1426 
1427  Result JoinMeshCore(const transport::StationConnectionInfo& stationConnectionInfo, common::AsyncContext* pAsyncContext);
1428 
1429  void SetMeshState(State meshState);
1430  void NoticeMeshEvent(EventType eventType, StationIndex idx);
1431 
1432  CreateMeshJob* m_pCreateMeshJob;
1433  JoinMeshJob* m_pJoinMeshJob;
1434  LeaveMeshJob* m_pLeaveMeshJob;
1435  ProcessJoinRequestJob* m_pProcessJoinRequestJob;
1436  ProcessUpdateMeshJob* m_pProcessUpdateMeshJob;
1437  DestroyMeshJob* m_pDestroyMeshJob;
1438  ProcessDestroyMeshJob* m_pProcessDestroyMeshJob;
1439  ProcessHostMigrationJob* m_pProcessHostMigrationJob;
1440  LeaveWithHostMigrationJob* m_pLeaveWithHostMigrationJob;
1441  SignatureSettingStorage* m_pSignatureSettingStorage;
1442  RelayRouteManageJob* m_pRelayRouteManageJob;
1443  KickoutManageJob* m_pKickoutManageJob;
1444  transport::MissingStationHandler* m_pMissingStationHandler;
1445 
1446  MeshEventCallback m_MeshEventCallback;
1447  JoiningMeshApprovalCallback m_JoiningMeshApprovalCallback;
1448  CheckHostCandidateRankingCallback m_CheckHostCandidateRankingCallback;
1449  GetSessionIdCallback m_GetSessionIdCallback;
1450 
1451  uint32_t m_MeshProtocolHandle;
1452  MeshProtocol* m_pMeshProtocol;
1453  transport::StationProtocol* m_pStationProtocol;
1454 
1455  uint32_t m_BandwidthCheckProtocolHandle;
1456  transport::BandwidthCheckProtocol* m_pBandwidthCheckProtocol;
1457 
1458  uint16_t m_StationMax;
1459  bool m_IsApprovalJoin;
1460 
1461  StationIndex m_HostStationIndex;
1462  StationIndex m_LocalStationIndex;
1463 
1464  State m_State;
1465  DisconnectReason m_DisconnectReason;
1466  HostMigrationMode m_HostMigrationMode;
1467  NetworkTopology m_NetworkTopologyType;
1468  BitRateCheckMode m_BitRateCheckMode;
1469 
1470  bool m_IsHostMigrationEnabled;
1471  bool m_IsServerRequired;
1472  bool m_IsRecentPlayRecordEnabled;
1473  bool m_IsMultiplayerEnabled;
1474 
1475  uint32_t m_StationIndexFlagsForJoinResponseComplete;
1476  uint32_t m_StationIndexUsedFlags;
1477  uint32_t m_UpdateCount;
1478  StationIndex m_UpdateCountSourceStationIndex;
1479 
1480  //n1769
1481  uint32_t m_SyncClockProtocolHandle;
1482 
1483  common::Time m_MeshStartTime;
1484  bool m_MeshStartTimeValidFlag;
1485 
1486  bool m_IsStarted;
1487 
1488  bool m_HostMigrationStartFlag;
1489 
1490  bool m_AutoAddRecentPlayRecord;
1491 
1492  common::MonitoringDataSender* m_pMonitoringDataSender;
1493 
1494  common::AsyncContext m_InternalContext;
1495  AsyncProcessingName m_CurrentAsyncProcessingName;
1496 
1497  MeshEventListener* m_pMeshEventListener;
1498 
1499  bool m_IsSkipSendingReport;
1500  bool m_IsSkipCleanupReport;
1501 
1502  bool m_IsPlayersCountedAsParticipants;
1503  uint8_t m_LocalPlayerCount;
1504 
1505  uint32_t m_ExpectedFirstUpdateCount;
1506  bool m_IsReceivedUpdateCount;
1507 
1508  bool m_SetDenyJoinRequestByInvalidState;
1509  bool m_SetDenyJoinRequestBySessionIsFull;
1510 
1511  transport::Station::PlayerInfo m_PlayerInfoList[MaxPlayerInfoSize];
1512  uint8_t m_ValidPlayerInfoNum;
1513 };
1514 }
1515 }
1516 } // end of namespace nn::pia::session
1517 
1518 //!@endcond