*

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

    関連記事

    no image

    UIAlertのTextFieldでキーボードが表示されない(iOS7)

    TextField付きのUIAlertViewでたまにキーボードが表示されないことがあり、 ながら

    記事を読む

    IMG_2206.JPG

    【イーモン】プロモーションムービー

    デザフェスで使ったプロモーションムービーです! 当日は、AppleTVをつかってiP

    記事を読む

    products-ico5.png

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

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

    記事を読む

    ace.png

    イーモン v2.2審査

    v2.2を審査に出しました! イーモンxエースクラウンの特別クエストが追加されます!

    記事を読む

    cocos2dx_portrait.png

    Macでcocos2dxをiOSとAndroid向けにビルド

    前回Androidの開発環境をセットアップでAndroidの開発環境が準備をしました。 今

    記事を読む

    kii1.png

    KiiCloudでファイルアップロード

    KiiCloudではサーバーと通信が必要な処理は、同期タイプ(Synchronous)と非同タイプ(

    記事を読む

    tmp.png

    最近のAppStore審査【iOS8】

    紹介動画でリジェクト!?(App Preview) AppStoreのアプリ紹介にに機能や

    記事を読む

    df40.png

    【イーモン】デザフェス用ミニゲーム

    2014年11月8日のデザインフェスタ用に作ったミニゲームです! シルエットまたは単語の意味が

    記事を読む

    icloud.jpeg

    iCloudその1:NSMetadataQueryDidUpdateNotification

    iCloudのファイル管理についてよくわかってないので、以下の点について実際に確認しながらまとめてい

    記事を読む

    2015_ec1.png

    イーモン プレビュー動画

    動画2作目、お正月っぽく

    記事を読む

    Sponsored Link

    Message

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

    Sponsored Link

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

    Google+ Google
    PAGE TOP ↑