CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
framework_PlayService.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/framework/framework_Definitions.h>
17 
18 #if NN_PIA_FRAMEWORK_ENABLE_PLAY
19 
20 #include <nn/pia/framework/framework_InetService.h>
21 
22 #include <nn/pia/play/play_PlayNetworkFactory.h>
23 
24 #include <gpg/gpg.h>
25 #include <jni.h>
26 
27 namespace nn
28 {
29 namespace pia
30 {
31 namespace framework
32 {
33 
34 /*!
35 @brief play モジュールの管理クラスです。
36 */
37 class PlayService : public InetService
38 {
39 public:
40  /*!
41  @brief Initialize() に各種パラメータを渡すための構造体です。
42  */
43  struct InitializePlayServiceSetting : public InitializeInetServiceSetting
44  {
45  jobject appActivity;
46  };
47 
48 protected:
49  static void OnAuthActionStartedCallback(gpg::AuthOperation op);
50  static void OnAuthActionFinishedCallback(gpg::AuthOperation op, gpg::AuthStatus status);
51  static void OnQuestCompletedCallback(gpg::Quest quest);
52 
53 public:
54  /*!
55  @cond PRIVATE
56  @brief コンストラクタです。
57  */
58  PlayService();
59  //! @endcond
60 
61  /*!
62  @cond PRIVATE
63  @brief デストラクタです。
64  */
65  virtual ~PlayService();
66  //! @endcond
67 
68  virtual Result LoginFriendServer()
69  {
70  return ResultSuccess();
71  }
72 
73  virtual Result LogoutFriendServer()
74  {
75  return ResultSuccess();
76  }
77 
78  /*!
79  @brief play 初期化処理です。
80  @param[in] setting play の初期化で必要なパラメータです。
81  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
82  */
83  virtual Result InitializeInet(const InitializeInetSetting& setting);
84 
85  /*!
86  @brief play 終了処理です。
87  */
88  virtual void FinalizeInet();
89 
90  /*!
91  @brief 初期化処理です。
92  @param[in] setting 各種パラメータが書き込まれた Setting 構造体です。
93  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
94  */
95  virtual Result InitializeInetService(const InitializeInetServiceSetting& setting);
96 
97  /*!
98  @brief 終了処理です。
99  */
100  virtual void FinalizeInetService();
101 
102  /*!
103  @cond PRIVATE
104  @brief ディスパッチ処理を行います。
105  */
106  virtual Result Dispatch();
107 
108  /*!
109  @cond PRIVATE
110  @brief サービス接続状態をチェックします。
111  */
112  virtual Result CheckConnection();
113 
114  /*!
115  @brief transport の初期化に必要な NetworkFactory を取得します。
116  @return NetworkFactory が返されます。
117  */
118  virtual transport::NetworkFactory* GetNetworkFactory();
119 
120  /*!
121  @brief ゲームサーバーへのログインを行います。
122  @param[in] setting ログインに必要なパラメータです。
123  @param[in] timeout タイムアウトまでの時間を指定します。
124  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
125  */
126  virtual Result LoginGameServer(const InitializeInetSetting& setting, uint32_t timeout = 30 * 1000);
127 
128  /*!
129  @brief ログイン処理中かをチェックします。
130  @return ログイン処理中であれば true が返ります。
131  */
132  virtual bool IsInLoginProcess()
133  {
134  return s_IsAuthActionInProcess;
135  }
136 
137  /*!
138  @brief ログアウト処理中かをチェックします。
139  @return ログアウト処理中であれば true が返ります。
140  */
141  virtual bool IsInLogoutProcess()
142  {
143  return s_IsAuthActionInProcess;
144  }
145 
146  /*!
147  @brief ゲームサーバーへのログインの前処理を行います。
148  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
149  @endif
150  */
151  virtual Result PreLoginProcess(const InitializeInetSetting& setting);
152 
153  /*!
154  @brief ログインの前処理中かをチェックします。
155  @return ログインの前処理中であれば true が返ります。
156  */
157  virtual bool IsInPreLoginProcess()
158  {
159  return false;
160  }
161 
162  /*!
163  @brief ゲームサーバーへのログイン完了後の処理を行います。
164  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
165  @endif
166  */
167  virtual Result PostLoginProcess();
168 
169  /*!
170  @brief ゲームサーバーからログアウトを行います。
171  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
172  */
173  virtual Result LogoutGameServer(bool isBlock, bool isInChangeStateAsync);
174 
175  virtual Result GetLogoutOutcome();
176 
177  bool IsLoggedIn(const InitializeInetSetting& setting) const;
178 
179  /*!
180  @brief ログインを開始します。
181  @details ログインの非同期処理を開始します。インターネット通信時にのみ成功します。
182  @ref State_NetworkStartedUp まで遷移済みである必要があります。
183  @ref InitializeInetSetting::isAutoInitializeAndLogin を true に設定していた時のみ成功します。
184  他の非同期処理が実行中でない場合のみ成功します。
185  開始した処理は @ref framework::Framework::Update() を定期的に呼び出すことで進行します。
186  処理の完了は @ref IsLoginCompleted でチェックし、結果は @ref GetLoginResult で確認できます。
187  @return 非同期処理の開始に成功すれば、成功の Result が返されます。失敗した場合、以下の Result を返します。
188  @retval nn::pia::ResultInvalidState 呼び出し時に適切な状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
189  @see IsLoginCompleted, GetLoginResult
190  */
191  Result LoginAsync();
192 
193  /*!
194  @brief LoginAsync の非同期処理の完了をチェックします。
195  @details @ref LoginAsync で開始された非同期処理は、本関数で完了をチェックできます。
196  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
197  @see LoginAsync, GetLoginResult
198  */
199  bool IsLoginCompleted() const;
200 
201  /*!
202  @brief LoginAsync の非同期処理の結果を取得します。
203  @details @ref LoginAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。
204  @return 非同期処理が成功した場合、 IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
205  @retval nn::pia::ResultInvalidState 非同期処理が完了していない場合、もしくは開始されていない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
206  @retval nn::pia::ResultGameServerProcessAborted ログインに失敗しました。セッション離脱処理、クリーンアップ処理、NEX サーバーからのログアウト処理を順に実行してください。
207  */
208  Result GetLoginResult() const;
209 
210  /*!
211  @brief ログアウトを開始します。
212  @details ログアウトの非同期処理を開始します。インターネット通信時にのみ成功します。
213  @ref State_NetworkStartedUp まで遷移済みである必要があります。
214  @ref InitializeInetSetting::isAutoInitializeAndLogin を true に設定していた時のみ成功します。
215  他の非同期処理が実行中でない場合のみ成功します。
216  開始した処理は @ref framework::Framework::Update() を定期的に呼び出すことで進行します。
217  処理の完了は @ref IsLogoutCompleted でチェックし、結果は @ref GetLogoutResult で確認できます。
218  @return 非同期処理の開始に成功すれば、成功の Result が返されます。失敗した場合、以下の Result を返します。
219  @retval nn::pia::ResultInvalidState 呼び出し時に適切な状態ではありませんでした。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
220  @see IsLogoutCompleted, GetLogoutResult
221  */
222  Result LogoutAsync();
223 
224  /*!
225  @brief LogoutAsync の非同期処理の完了をチェックします。
226  @details @ref LogoutAsync で開始された非同期処理は、本関数で完了をチェックできます。
227  @return 非同期処理が完了していた場合は true, 処理中の場合は false が返ります。非同期処理が行われていない場合も false が返ります。
228  @see LogoutAsync, GetLogoutResult
229  */
230  bool IsLogoutCompleted() const;
231 
232  /*!
233  @brief LogoutAsync の非同期処理の結果を取得します。
234  @details @ref LogoutAsync で開始された非同期処理が完了した後、本関数で結果を取得できます。
235  @return 非同期処理が成功した場合、 IsSuccess() が真となる Result を返します。失敗した場合、以下の Result を返します。
236  @retval nn::pia::ResultInvalidState 非同期処理が完了していない場合、もしくは開始されていない場合に返ります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
237  @retval nn::pia::ResultGameServerProcessAborted ログアウトに失敗しました。セッション離脱処理、クリーンアップ処理、NEX サーバーからのログアウト処理を順に実行してください。
238  */
239  Result GetLogoutResult() const;
240 
241  /*!
242  @brief ログイン状態であるかを取得します。
243  @return ログイン状態である場合は true、そうでない場合は false が返ります。
244  */
245  bool IsLoggedIn() const;
246 
247 private:
248  static bool s_IsAuthActionInProcess;
249  static bool s_IsAuthActionSuccess;
250 
251  bool m_IsNexInitialized;
252  bool m_IsInetInitialized;
253 
254  play::PlayNetworkFactory m_PlayNetworkFactory;
255 
256  std::unique_ptr<gpg::GameServices> m_GameServices;
257 
258  NN_PIA_DISALLOW_COPY(PlayService);
259 };
260 }
261 }
262 } // end of namespace nn::pia::framework
263 
264 #endif