/*---------------------------------------------------------------------------* Project: Horizon File: dlp_Server.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #ifndef NN_DLP_CTR_DLP_SERVER_H_ #define NN_DLP_CTR_DLP_SERVER_H_ #include #ifdef __cplusplus namespace nn { namespace dlp { namespace CTR { /*!--------------------------------------------------------------------------* @brief ダウンロードプレイのサーバのクラスです。 *--------------------------------------------------------------------------*/ class Server { private: Server() {}; ~Server() {}; public: /*!--------------------------------------------------------------------------* @brief サーバの初期化に必要なバッファのサイズを取得します。 @param[in] maxClientNum サーバに接続可能なクライアントの最大数(1 ~ MAX_CLIENT_NUM)を指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static size_t GetBufferSize(u8 maxClientNum); /*!--------------------------------------------------------------------------* @brief サーバを初期化します。 pBuffer に GetBufferSize() で指定されたサイズの 4096 Byte 境界 のバッファを指定してください。バッファにデバイスメモリを使用しないでください。
配信できるタイトルのサイズは 最大で 16MB です。
@param[in] eventHandle ダウンロードプレイからのシグナルを待つ nn::os::Event のハンドルを指定します。 Event はアプリケーションで初期化してください。また、イベントの情報は GetEventDesc で取得します。 @param[in] maxClientNum サーバに接続可能なクライアントの最大数(1 ~ MAX_CLIENT_NUM)を指定します。 @param[in] programId 配信するタイトルの プログラム ID を指定してください。 @param[in] pBuffer DLP の作業バッファへのポインタ。4096 バイト境界にしてください。 @param[in] bufferSize 作業バッファのサイズ。4096 バイト境界にしてください。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result Initialize( nn::Handle eventHandle, u8 maxClientNum, nn::ProgramId programId, void* pBuffer, size_t bufferSize); /*!--------------------------------------------------------------------------* @brief サーバを終了します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result Finalize(); /*!--------------------------------------------------------------------------* @brief サーバの状態を取得します。 @param[out] pState サーバの状態を返します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result GetState(ServerState* pState); /*!--------------------------------------------------------------------------* @brief 到着しているイベントをキューから取得します。 現在のキューのサイズはイベント32個分です。キューがいっぱいになると、古いイベントから消去され新しいイベントが追加されます。
イベントがない場合、本API はブロックせず ResultNoData() の返すエラーコードを 返します。
なお、 イベントを取得しなくても各種状態取得 API を利用すれば処理を行えます。 @param[out] pEventDesc イベントを読み込み先を指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result GetEventDesc(EventDesc* pEventDesc); /*!--------------------------------------------------------------------------* @brief ダウンロードセッションを開始します。 @param[in] isManualAccept true : AcceptClient でクライアントの接続を許可します。 false : 無条件に接続を許可します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result OpenSessions(bool isManualAccept = false); /*!--------------------------------------------------------------------------* @brief クライアントの接続を許可します。 SERVER_STATE_OPENED_SESSIONS 状態(OpenSessions() を呼んでから StartDistribute() を呼ぶまで) で使用できます。
isManualAccept 引数 を true で OpenSession() を呼ぶと、クライアントは接続後に CLIENT_STATE_WAITING_ACCEPT 状態になり
サーバからの許可を待ち続けます。このクライアントの接続を許可するには本 API を呼んでください。
呼び出し後、クライアントは CLIENT_STATE_WAITING_INVITE 状態へ遷移します。なお、接続を拒否する場合、DisconnectClient() でクライアントを切断してください。 @param[in] nodeId クライアントのノード ID を指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result AcceptClient(u16 nodeId); /*!--------------------------------------------------------------------------* @brief クライアントのネットワーク接続を強制的に切断します。 SERVER_STATE_OPENED_SESSIONS 状態(OpenSessions() を呼んでから StartDistribute() を呼ぶまで) において
接続しているクライアントをネットワークから切断します。 @param[in] nodeId クライアントのノード ID を指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result DisconnectClient(u16 nodeId); /*!--------------------------------------------------------------------------* @brief 全てのダウンロードセッションのデータ配信を開始します。 OpenSessions() の後に使用します。本 API 呼び出し以降、クライアントは接続できません。
CLIENT_STATE_WAITING_ACCEPT 状態のクライアントは切断します。
サーバはシステムアップデートを行ったクライアントがリブート後に再接続してくるのを待ち続けます。
しかし、クライアントが必ず再接続するとは限りませんので、ユーザがいつでも配信をキャンセルできるように配慮してください。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result StartDistribute(); /*!--------------------------------------------------------------------------* @brief 全てのクライアントをリブートします。 ダウンロードを完了(SERVER_STATE_COMPLETE_DISTRIBUTION)状態で、接続している全てのクライアント
をリブートします。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result RebootAllClient(); /*!--------------------------------------------------------------------------* @brief ダウンロードセッションを停止します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result CloseSessions(); /*!--------------------------------------------------------------------------* @brief 接続しているクライアントの数を取得します。 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 @param[out] pNum pClients に格納されたクライアント ID の数を返します。 @param[out] pClients クライアントのノードIDを返します。 @param[in] size pClients の配列の個数を指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result GetConnectingClients(u16* pNum, u16* pClients, u16 size); /*!--------------------------------------------------------------------------* @brief クライアントの情報を取得します。 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 @param[out] pNodeInfo クライアントの情報を返します。 @param[in] nodeId クライアントのノードIDを指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result GetClientInfo( NodeInfo* pClientInfo, u16 nodeId); /*!--------------------------------------------------------------------------* @brief クライアントの状態、ダウンロードの進捗などを取得します。 OpenSessions() が成功した後、SERVER_STATE_ERROR 状態でない限り使用できます。 @param[out] pClientStatus クライアントの情報、状態、ダウンロードの進捗などを返します。 @param[in] nodeId クライアントのノードIDを指定します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result GetClientStatus( ClientStatus* pClientStatus, u16 nodeId); /*!--------------------------------------------------------------------------* @brief クライアントに子機のバージョンを無視して強制的にダウンロードさせます。 通常、クライアントは自身の持っていない子機か、自身にインポートされているものより新しい子機をダウンロードしますが、
クライアントのインポート状態に関わらず子機をダウンロードさせます。本API は SERVER_STATE_INITIALIZED 状態で使用してください。
本API はデバッグ用の API です。開発実機以外で用いても強制的にダウンロードさせることはできません。 @param[in] enable true のとき強制的にダウンロードさせます。false のときは通常のダウンロード方法に戻します。 @return 処理の結果が返ってきます。 *--------------------------------------------------------------------------*/ static nn::Result ForceClientToDownload(bool enable=true); }; } // namespace CTR } // namespace dlp } // namespace nn #endif // __cplusplus #endif // ifndef NN_DLP_CTR_DLP_SERVER_H_