*

cocos2dxでhttp通信のprogressを表示する

公開日: : cocos2d-x, iOS

Sample

cocos2d-xでは、ダウンロードの進捗を取得するインターフェイスが用意されていないようなので。

プログレスの値を保存しておく変数を追加

保存先は通信ごとに保存するのでHttpReuqestが手頃。
コールバック関数とプログレスの値を保存する変数を追加する。


class CC_DLL HttpRequest : public Ref
{
...
#if 1//add
public:
    static int HttpRequest::progressCallback(void *clientp, double dlTotal, double dlNow, double ulTotal, double ulCurrent) {
        HttpRequest *self = (HttpRequest *)clientp;
        self->_dlTotal = dlTotal;
        self->_dlNow = dlNow;
        return 0;
    }
    double getTotalSize() const {return _dlTotal;}
    double getCurrentSize() const {return _dlNow;}
private:
    double _dlTotal;
    double _dlNow;
#endif
};


CURLOPT_PROGRESSFUNCTIONを設定

HttpClient.cppに追加以下のコードを追加する。
これでコールバックが呼ばれるようになる。

bool CURLRail::init(HttpRequest *request, write_callback callback, void *stream, write_callback headerCallback, void *headerStream, char *errorBuffer)

       return setOption(CURLOPT_URL, request->getUrl())
#if 1//add 
        && setOption(CURLOPT_NOPROGRESS, false)
        && setOption(CURLOPT_PROGRESSFUNCTION, HttpRequest::progressCallback)
        && setOption(CURLOPT_PROGRESSDATA, request)
#endif
        && setOption(CURLOPT_WRITEFUNCTION, callback)
        && setOption(CURLOPT_WRITEDATA, stream)
        && setOption(CURLOPT_HEADERFUNCTION, headerCallback)
        && setOption(CURLOPT_HEADERDATA, headerStream);
...
}

サンプルコード

HttpReuqestを保存しておいて、タイマーなどで定期的に値を参照する。


void download(const std::string &url) {
    auto request = new HttpRequest();   
    request->setUrl(url);
	...
    bool ret = HttpClient::getInstance()->send(request);

    auto progressAction = RepeatForever::create(Sequence::create(DelayTime::create(0.1f),
                                                                 CallFunc::create([request] () {
		CCLOG("%d%%", (int)(100 * request->getCurrentSize() / request->getTotalSize()));
        }),

    Director::getInstance()->getRunningScene()->runAction(progressAction);
}

参考

  • CURLOPT_PROGRESSFUNCTION
  • cocos2d-xの通信で転送量を取得出来るように(お手軽に)
  • Sponsored Link

    関連記事

    products-ico5.png

    cocos2d-x v2.2からv3.3への移行

    最近、イーモンの更新でiTunesにバイナリをアップロードしたら、 2015年2月から64

    記事を読む

    icloud.jpeg

    アプリからiCloudを使うための準備

    iOSではアプリがiCloud上にデータを保存するための仕組みが提供されている。 iCloudは

    記事を読む

    5017d1a195d95dfed9f60e9fd5d82c13.png

    苦手な英語の発音を真面目に考えてみた

    最近、英語の発音に真面目に取り組んでます。 これまで読み書きが中心で、リスニングやスピーキン

    記事を読む

    ace.png

    イーモンxエースクラウン「Aの塔」決定

    あの英和辞典エースクラウンがイーモンに登場します! エースクラウンで取り上げられている会

    記事を読む

    emon.png

    【イーモン】v1.5リリース

    やっとv1.5リリースできました。 継続的にプレイを続けてもらえるように ゲームのバランス

    記事を読む

    AppIcon60x60@2x.png

    ホーム画面にショートカットアイコン(スキームアイコン)を作成する

    iOSのSafariには共有メニューにがあり、表示させているページへのショートカットアイコン

    記事を読む

    checkbox.png

    確認ダイアログ付きチェックボックス(Checkbox)

    図のようなチェックボックスとアラートの組合せを実装しようとした際にiOSには外観などを簡単にカスタ

    記事を読む

    cocos2d-xのSupporting IPv6-only Networks対応

    2016年6月1日より、AppStoreに更新されるすべてのアプリは、IPv6-only netwo

    記事を読む

    monster_kolion.png

    【イーモン】11月8日デザフェス出展!

    デザインフェスタに出展します! デザフェス出展者ページ 英語学習アプリ【イーモン】のキャラ

    記事を読む

    iOS7向けアプリアイコンを一括変換

    iOSがiOS7にバージョンアップされ、アプリに必要なアイコン画像のサイズがさらに増えました(

    記事を読む

    Sponsored Link

    Message

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    Sponsored Link

    • 発音辞書イーモン
    • English Monsters
    • sLog(時間管理アプリ)
    • 生粋のC++プログラマーです。 最近は、Objective-Cやxcode、cocos2d-xなどを学びながらiPhoneアプリを開発しています。

    Google+ Google
    PAGE TOP ↑