nlib
nn::nlib::CurlInputStream クラスfinal

libcurlを用いてダウンロードを行うためのストリームクラスです。 [詳解]

#include "nn/nlib/CurlInputStream.h"

+ nn::nlib::CurlInputStream の継承関係図

公開メンバ関数

CURL * GetEasyHandle () const noexcept
 libcurleasy_handleを返します。 [詳解]
 
CURLcode GetCurlError () const noexcept
 libcurleasy_handleを引数にとる関数で発生したエラーコードを返します。 [詳解]
 
CURLMcode GetCurlMultiError () const noexcept
 libcurlmulti_handleを引数にとる関数で発生したエラーコードを返します。 [詳解]
 
NLIB_CHECK_RESULT errno_t Init (BufferSize buffer_size) noexcept
 ストリームを初期化します。 [詳解]
 
NLIB_CHECK_RESULT errno_t Init () noexcept
 Init(BUFFER_SIZE_1X)を実行します。
 
CURLcode SetUrl (const char *url) noexcept
 読み込むURLを設定します。 [詳解]
 
bool StartDownload () noexcept
 
基本的なメンバ関数
 CurlInputStream () noexcept
 デフォルトコンストラクタです。更にInit()でストリームを初期化する必要があります。
 
virtual ~CurlInputStream () noexcept override
 デストラクタです。 [詳解]
 
- 基底クラス nn::nlib::InputStream に属する継承公開メンバ関数
errno_t GetErrorValue () const noexcept
 エラー値を取得します。 [詳解]
 
size_t Pos () const noexcept
 ストリーム上の現在位置を返します。 [詳解]
 
uint64_t Pos64 () const noexcept
 ストリーム上の現在位置を64bit値で返します。 [詳解]
 
bool IsEos () noexcept
 ストリームを最後まで読み終えている場合trueを返します。最後まで読み終えていない場合やエラーが発生している場合はfalseを返します。 [詳解]
 
int Read () noexcept
 ストリームから1バイトを読み込みます。 [詳解]
 
NLIB_CHECK_RESULT int Peek () noexcept
 ストリームを消費せずに次の1バイトを読み込みます。 [詳解]
 
size_t Skip (size_t nbytes) noexcept
 nBytes を読み飛ばします。 [詳解]
 
size_t Read (void *ptr, size_t nbytes) noexcept
 ptr で示されるメモリにnBytes 読み込みます。 [詳解]
 
bool Close () noexcept
 ストリームを閉じます。成功した場合にはtrueを返します。 [詳解]
 
 operator bool () const
 内部でエラーが発生していなければtrueを返します。
 
constexpr InputStream () noexcept
 コンストラクタです。派生クラスから呼び出されます。
 
virtual ~InputStream () noexcept
 デストラクタです。派生クラスから呼び出されます。
 

その他の継承メンバ

- 基底クラス nn::nlib::InputStream に属する継承限定公開メンバ関数
void ResetBuffer (void *p, size_t nbytes) noexcept
 InputStreamが持つバッファを設定します。 [詳解]
 
void SetError (errno_t e) const noexcept
 InputStreamにエラーを設定します。 [詳解]
 

詳解

libcurlを用いてダウンロードを行うためのストリームクラスです。

説明
このクラスを用いることで、libcurlによって取得したデータをInputStreamのインターフェイスで扱うことができるようになります。 典型的には以下のようなコードを記述して利用することになります。
if (nlib_is_error(stream.Init())) {
// ERROR
}
stream.SetUrl("http://www.nintendo.co.jp/");
if (nlib_is_error(stream.StartDownload())) {
// ERROR
}
int c;
while ((c = stream.Read()) != -1) {
// process data
....
}
if (nlib_is_error(s)) {
// ERROR
}
stream.Close(); // 'stream' is reusable after Close().
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_5.png

CurlInputStream.h18 行目に定義があります。

構築子と解体子

§ ~CurlInputStream()

nn::nlib::CurlInputStream::~CurlInputStream ( )
overridevirtualnoexcept

デストラクタです。

説明
内部でcurl_multi_cleanup()及びcurl_easy_cleanup()が実行されます。

関数詳解

§ GetCurlError()

nn::nlib::CurlInputStream::GetCurlError ( ) const
noexcept

libcurleasy_handleを引数にとる関数で発生したエラーコードを返します。

戻り値
CURLcode型の値
説明
libcurlに起因するエラーでストリームがエラーを返した場合、エラーコードを取得できます。 エラーコードの詳細はlibcurlのマニュアルを参照してください。
参照
http://curl.haxx.se/libcurl/c/libcurl-errors.html#CURLcode

§ GetCurlMultiError()

nn::nlib::CurlInputStream::GetCurlMultiError ( ) const
noexcept

libcurlmulti_handleを引数にとる関数で発生したエラーコードを返します。

戻り値
CURLMcode型の値
説明
libcurlに起因するエラーでストリームがエラーを返した場合、エラーコードを取得できます。 エラーコードの詳細はlibcurlのマニュアルを参照してください。
参照
http://curl.haxx.se/libcurl/c/libcurl-errors.html#CURLMcode

§ GetEasyHandle()

nn::nlib::CurlInputStream::GetEasyHandle ( ) const
noexcept

libcurleasy_handleを返します。

戻り値
libcurleasy_handle
説明
Init()を実行した後、オプションを設定するために利用する必要があります。
参照
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

§ Init()

nn::nlib::CurlInputStream::Init ( BufferSize  buffer_size)
noexcept

ストリームを初期化します。

引数
[in]buffer_sizeストリームが保持するバッファ・サイズ
戻り値
0成功した場合
EALREADY既に初期化済みの場合
ENOMEMメモリの確保に失敗した場合やlibcurlのハンドルの初期化に失敗した場合
ENOTSUPlibcurlが古い等の理由でオプションの設定に失敗した場合
説明
引数によりストリームのバッファ・サイズが設定されます。
buffer_size ストリームのバッファ・サイズ
BUFFER_SIZE_1X CURL_MAX_WRITE_SIZE
BUFFER_SIZE_2X CURL_MAX_WRITE_SIZE * 2
BUFFER_SIZE_3X CURL_MAX_WRITE_SIZE * 3
BUFFER_SIZE_4X CURL_MAX_WRITE_SIZE * 4
ストリームのバッファを確保した後、curl_easy_init(), curl_multi_init(), curl_multi_add_handle()によりハンドルが初期化されます。 その後、curl_easy_setopt()で以下のようなオプションを設定します。
オプション名
CURLOPT_WRITEFUNCTION CurlInputStream内部のコールバック関数
CURLOPT_WRITEDATA CurlInputStream内部の領域
CURLOPT_TIMEOUT 5
CURLOPT_LOW_SPEED_LIMIT 1024
CURLOPT_LOW_SPEED_TIME 5
CURLOPT_FOLLOWLOCATION 1
CURLOPT_MAXREDIRS 8
CURLOPT_ACCEPT_ENCODING "gzip,deflate"
この関数の実行後、GetEasyHandle()によりeasy_handleを取得しURL等の動作オプションを設定する必要があります。 ただし、CURLOPT_WRITEFUNCTION, CURLOPT_WRITEDATAの設定を上書きしてはいけません。

§ SetUrl()

nn::nlib::CurlInputStream::SetUrl ( const char *  url)
noexcept

読み込むURLを設定します。

引数
[in]urlURL文字列
戻り値
CURLcode型の値
説明
内部でcurl_easy_setopt()を用いて、CURLOPT_URLオプションを設定します。

§ StartDownload()

nn::nlib::CurlInputStream::StartDownload ( )
noexcept
戻り値
成功した場合はtrue
説明
この関数を実行することで読み込みを開始します。 この関数を呼ばずにRead()でストリームを読んでも問題ありませんが、データを受信するまでブロックします。 読み込みを開始してから実際に読み込むまでに何らかの処理をしたい場合にはこの関数を利用することができます。
失敗した場合はストリームにエラーをセットします。

このクラス詳解は次のファイルから抽出されました: