CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
transport_TransportAnalyzer.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/transport/transport_Definitions.h>
17 
18 #include <nn/pia/transport/transport_TransportAnalysisData.h>
19 #include <nn/pia/common/common_Time.h>
20 
21 
22 namespace nn
23 {
24 namespace pia
25 {
26 namespace transport
27 {
28 
29 
30 // 先行宣言
31 class ConnectionAnalyzer;
32 
33 /*!
34  @brief TransportAnalyzer クラスは、パケット解析結果や RTT 、パケロス率などを
35  報告するために用意されたクラスです。
36 
37  */
39 {
40 public:
41  /*!
42  @brief トランスポート分析データのプリントコールバック型です。
43  @details トランスポート分析データの出力文字列を独自定義の関数に渡したい場合に使用します。
44 
45  @param[in] pStr トランスポート分析データのテキスト文字列が渡されます。改行文字は含まれません。
46  */
47  typedef void (*AnalysisPrintCallback)(const char* pStr);
48 
49 
50  /*!
51  @cond PRIVATE
52  @brief TransportAnalyzer クラスのインスタンスを作成します(シングルトンパターン)。
53 
54  @return インスタンスの作成に成功すれば、成功の Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
55  @retval ResultNotInitialized transport モジュールが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
56  @retval ResultInvalidState CreateInstance() を呼ぶタイミングが誤っています。 BeginSetup() ~ EndSetup() 間で呼び出す必要があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
57  @retval ResultAlreadyExists 既にインスタンスは作成されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
58  @retval ResultAllocationFailed 内部でメモリ確保に失敗しました。 common::Initialize() で Pia に供給するメモリを増やす必要があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
59  @see DestroyInstance, GetInstance, Setting
60  @endcond
61  */
62  static Result CreateInstance();
63 
64 
65  /*!
66  @cond PRIVATE
67  @brief TransportAnalyzer クラスのインスタンスを破棄します(シングルトンパターン)。
68  インスタンスが存在していなかった場合は、何もしません。
69 
70  @see CreateInstance, GetInstance
71  @endcond
72  */
73  static void DestroyInstance();
74 
75 
76  /*!
77  @brief TransportAnalyzer クラスのインスタンスを得ます(シングルトンパターン)。
78  事前に CreateInstance() によってインスタンスを作成していない場合は、
79  NULL ポインタが返されます。
80  この関数はスレッドセーフです。
81 
82  @return TransportAnalyzer インスタンスへのポインタ。
83  @see CreateInstance, DestroyInstance
84  */
86  {
87  return s_pInstance;
88  }
89 
90  /*!
91  @cond PRIVATE
92  @brief 初期化処理を実行します。
93 
94  @return 初期化処理が成功すれば、IsSuccess() が true となる Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
95  @retval ResultAlreadyInitialized 既に Initialize() は実行されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
96  @retval ResultAllocationFailed 内部でメモリ確保に失敗しました。 common::Initialize() で Pia に供給するメモリを増やす必要があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
97  @endcond
98  */
99  Result Initialize();
100 
101 
102  /*!
103  @cond PRIVATE
104  @brief 終了処理を実行します。
105  @endcond
106  */
107  void Finalize();
108 
109 
110  /*!
111  @cond PRIVATE
112  @brief 解析を開始します。
113 
114  @return 処理が成功すれば、IsSuccess() が true となる Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
115  @retval ResultNotInitialized TransportAnalyzer インスタンスが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
116  @retval ResultInvalidState この関数を呼び出すタイミングが誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
117  @endcond
118  */
119  Result Startup();
120 
121 
122  /*!
123  @cond PRIVATE
124  @brief 解析を終了します。
125  @endcond
126  */
127  void Cleanup();
128 
129 
130  /*!
131  @brief データを更新します。
132 
133  @details Transport::Setting 構造体の analysisInterval メンバ変数に正の値をセットして、
134  分析データの自動プリントを有効にした状態であれば、アプリケーションはこの API を
135  呼び出す必要はありません。
136  analysisInterval メンバ変数に 0 の値をセットし、自動プリント機能を無効にした
137  状態でアプリケーションが分析データを取得する際は、明示的にこの API を呼びだし、
138  データの更新を行う必要があります。
139 
140  @return 処理が成功すれば、IsSuccess() が true となる Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
141  @retval ResultNotInitialized TransportAnalyzer インスタンスが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
142  @retval ResultInvalidState この関数を呼び出すタイミングが誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
143  */
144  Result Update();
145 
146 
147  /*!
148  @brief データを取得します。
149  */
151  {
152  return m_Data;
153  }
154 
155 
156  /*!
157  @brief グラフに区切りをいれるための文字列をコンソールに出力します。
158 
159  @param[in] pComment 区切り線に付ける名前の文字列を指すポインタ。文字列に空白類文字を含めることはできません。また、NULL を指定することもできません。
160 
161  @retval ResultInvalidArgument 引数が誤っています。NULL ポインタや、空白類文字を含む文字列を与えることはできません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
162  @retval ResultInvalidState この関数を呼び出すタイミングが誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
163  */
164  Result SetMarker(const char* pComment);
165 
166  /*!
167  @brief プリントコールバックを登録します。
168 
169  @param[in] pCallback 登録するコールバック関数ポインタ。
170 
171  @return この関数を呼び出す前に登録されていたプリントコールバックが返されます。
172  */
174 
175 
176  // コンストラクタです。
178 
179 
180  // デストラクタです。
182 
183 
184  /*!
185  @cond PRIVATE
186  @brief モニタリングデータを書き込みます。
187  @endcond
188  */
189  void SetMonitoringData();
190 
191 
192  /*!
193  @brief デバッグに有用な情報をプリントします。
194 
195  @param[in] flag トレースフラグの論理和。詳細は @ref TraceFlag 型を参照してください。
196  */
197  void Trace(uint64_t flag) const;
198 
199 private:
200  ConnectionAnalyzer* m_pConnectionAnalyzer;
201  bool m_IsStartup;
202  struct TransportAnalysisData m_Data;
203 
204  common::Time m_StartupTime; // Startup() が呼ばれた時刻。
205 
206  static TransportAnalyzer* s_pInstance;
207 };
208 }
209 }
210 } // end of namespace nn::pia::transport