1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: dlp_Server.h 4 5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 14 *---------------------------------------------------------------------------*/ 15 #ifndef NN_DLP_CTR_DLP_SERVER_H_ 16 #define NN_DLP_CTR_DLP_SERVER_H_ 17 18 #include <nn/dlp/CTR/dlp_Type.h> 19 20 #ifdef __cplusplus 21 22 namespace nn { 23 namespace dlp { 24 namespace CTR { 25 26 /*!--------------------------------------------------------------------------* 27 @brief ダウンロードプレイのサーバのクラスです。 28 *--------------------------------------------------------------------------*/ 29 class Server 30 { 31 private: Server()32 Server() {}; ~Server()33 ~Server() {}; 34 35 public: 36 /*!--------------------------------------------------------------------------* 37 @brief サーバの初期化に必要なバッファのサイズを取得します。 38 39 @param[in] maxClientNum サーバに接続可能なクライアントの最大数(1 ~ MAX_CLIENT_NUM)を指定します。 40 41 @return 処理の結果が返ってきます。 42 43 *--------------------------------------------------------------------------*/ 44 static size_t GetBufferSize(u8 maxClientNum); 45 46 47 /*!--------------------------------------------------------------------------* 48 @brief サーバを初期化します。 49 50 pBuffer に GetBufferSize() で指定されたサイズの 4096 Byte 境界 のバッファを指定してください。バッファにデバイスメモリを使用しないでください。<BR> 51 配信できるタイトルのサイズは 最大で 16MB です。<BR> 52 53 @param[in] eventHandle ダウンロードプレイからのシグナルを待つ nn::os::Event のハンドルを指定します。 Event はアプリケーションで初期化してください。また、イベントの情報は GetEventDesc で取得します。 54 @param[in] maxClientNum サーバに接続可能なクライアントの最大数(1 ~ MAX_CLIENT_NUM)を指定します。 55 @param[in] programId 配信するタイトルの プログラム ID を指定してください。 56 @param[in] pBuffer DLP の作業バッファへのポインタ。4096 バイト境界にしてください。 57 @param[in] bufferSize 作業バッファのサイズ。4096 バイト境界にしてください。 58 59 @return 処理の結果が返ってきます。 60 *--------------------------------------------------------------------------*/ 61 static nn::Result Initialize( 62 nn::Handle eventHandle, 63 u8 maxClientNum, 64 nn::ProgramId programId, 65 void* pBuffer, 66 size_t bufferSize); 67 68 69 /*!--------------------------------------------------------------------------* 70 @brief サーバを終了します。 71 72 @return 処理の結果が返ってきます。 73 *--------------------------------------------------------------------------*/ 74 static nn::Result Finalize(); 75 76 77 /*!--------------------------------------------------------------------------* 78 @brief サーバの状態を取得します。 79 80 @param[out] pState サーバの状態を返します。 81 82 @return 処理の結果が返ってきます。 83 *--------------------------------------------------------------------------*/ 84 static nn::Result GetState(ServerState* pState); 85 86 87 /*!--------------------------------------------------------------------------* 88 @brief 到着しているイベントをキューから取得します。 89 90 現在のキューのサイズはイベント32個分です。キューがいっぱいになると、古いイベントから消去され新しいイベントが追加されます。<BR> 91 イベントがない場合、本API はブロックせず ResultNoData() の返すエラーコードを 返します。<BR> 92 なお、 イベントを取得しなくても各種状態取得 API を利用すれば処理を行えます。 93 94 @param[out] pEventDesc イベントを読み込み先を指定します。 95 96 @return 処理の結果が返ってきます。 97 *--------------------------------------------------------------------------*/ 98 static nn::Result GetEventDesc(EventDesc* pEventDesc); 99 100 101 /*!--------------------------------------------------------------------------* 102 @brief ダウンロードセッションを開始します。 103 104 @param[in] isManualAccept true : AcceptClient でクライアントの接続を許可します。 false : 無条件に接続を許可します。 105 106 @return 処理の結果が返ってきます。 107 *--------------------------------------------------------------------------*/ 108 static nn::Result OpenSessions(bool isManualAccept = false); 109 110 111 /*!--------------------------------------------------------------------------* 112 @brief クライアントの接続を許可します。 113 114 SERVER_STATE_OPENED_SESSIONS 状態(OpenSessions() を呼んでから StartDistribute() を呼ぶまで) で使用できます。<BR> 115 isManualAccept 引数 を true で OpenSession() を呼ぶと、クライアントは接続後に CLIENT_STATE_WAITING_ACCEPT 状態になり<BR> 116 サーバからの許可を待ち続けます。このクライアントの接続を許可するには本 API を呼んでください。<BR> 117 呼び出し後、クライアントは CLIENT_STATE_WAITING_INVITE 状態へ遷移します。なお、接続を拒否する場合、DisconnectClient() でクライアントを切断してください。 118 119 @param[in] nodeId クライアントのノード ID を指定します。 120 121 @return 処理の結果が返ってきます。 122 *--------------------------------------------------------------------------*/ 123 static nn::Result AcceptClient(u16 nodeId); 124 125 126 /*!--------------------------------------------------------------------------* 127 @brief クライアントのネットワーク接続を強制的に切断します。 128 129 SERVER_STATE_OPENED_SESSIONS 状態(OpenSessions() を呼んでから StartDistribute() を呼ぶまで) において<BR> 130 接続しているクライアントをネットワークから切断します。 131 132 @param[in] nodeId クライアントのノード ID を指定します。 133 134 @return 処理の結果が返ってきます。 135 *--------------------------------------------------------------------------*/ 136 static nn::Result DisconnectClient(u16 nodeId); 137 138 139 /*!--------------------------------------------------------------------------* 140 @brief 全てのダウンロードセッションのデータ配信を開始します。 141 142 OpenSessions() の後に使用します。本 API 呼び出し以降、クライアントは接続できません。<BR> 143 CLIENT_STATE_WAITING_ACCEPT 状態のクライアントは切断します。<BR> 144 サーバはシステムアップデートを行ったクライアントがリブート後に再接続してくるのを待ち続けます。<BR> 145 しかし、クライアントが必ず再接続するとは限りませんので、ユーザがいつでも配信をキャンセルできるように配慮してください。 146 147 @return 処理の結果が返ってきます。 148 *--------------------------------------------------------------------------*/ 149 static nn::Result StartDistribute(); 150 151 152 /*!--------------------------------------------------------------------------* 153 @brief 全てのクライアントをリブートします。 154 155 ダウンロードを完了(SERVER_STATE_COMPLETE_DISTRIBUTION)状態で、接続している全てのクライアント<BR> 156 をリブートします。 157 158 @return 処理の結果が返ってきます。 159 *--------------------------------------------------------------------------*/ 160 static nn::Result RebootAllClient(); 161 162 163 /*!--------------------------------------------------------------------------* 164 @brief ダウンロードセッションを停止します。 165 166 @return 処理の結果が返ってきます。 167 *--------------------------------------------------------------------------*/ 168 static nn::Result CloseSessions(); 169 170 171 /*!--------------------------------------------------------------------------* 172 @brief 接続しているクライアントの数を取得します。 173 174 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 175 176 @param[out] pNum pClients に格納されたクライアント ID の数を返します。 177 @param[out] pClients クライアントのノードIDを返します。 178 @param[in] size pClients の配列の個数を指定します。 179 180 @return 処理の結果が返ってきます。 181 *--------------------------------------------------------------------------*/ 182 static nn::Result GetConnectingClients(u16* pNum, u16* pClients, u16 size); 183 184 185 /*!--------------------------------------------------------------------------* 186 @brief クライアントの情報を取得します。 187 188 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 189 190 @param[out] pNodeInfo クライアントの情報を返します。 191 @param[in] nodeId クライアントのノードIDを指定します。 192 193 @return 処理の結果が返ってきます。 194 *--------------------------------------------------------------------------*/ 195 static nn::Result GetClientInfo( 196 NodeInfo* pClientInfo, 197 u16 nodeId); 198 199 200 /*!--------------------------------------------------------------------------* 201 @brief クライアントの状態、ダウンロードの進捗などを取得します。 202 203 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 204 205 @param[out] pClientStatus クライアントの情報、状態、ダウンロードの進捗などを返します。 206 @param[in] nodeId クライアントのノードIDを指定します。 207 208 @return 処理の結果が返ってきます。 209 *--------------------------------------------------------------------------*/ 210 static nn::Result GetClientStatus( 211 ClientStatus* pClientStatus, 212 u16 nodeId); 213 214 215 /*!--------------------------------------------------------------------------* 216 @brief クライアントに子機のバージョンを無視して強制的にダウンロードさせます。 217 218 通常、クライアントは自身の持っていない子機か、自身にインポートされているものより新しい子機をダウンロードしますが、<BR> 219 クライアントのインポート状態に関わらず子機をダウンロードさせます。本API は SERVER_STATE_INITIALIZED 状態で使用してください。 <BR> 220 本API はデバッグ用の API です。開発実機以外で用いても強制的にダウンロードさせることはできません。 221 222 @param[in] enable true のとき強制的にダウンロードさせます。false のときは通常のダウンロード方法に戻します。 223 224 @return 処理の結果が返ってきます。 225 *--------------------------------------------------------------------------*/ 226 static nn::Result ForceClientToDownload(bool enable=true); 227 228 }; 229 230 } // namespace CTR 231 } // namespace dlp 232 } // namespace nn 233 234 235 #endif // __cplusplus 236 #endif // ifndef NN_DLP_CTR_DLP_SERVER_H_ 237 238