SuperTweet interface driver classes.

Dependents:   SuperTweet_TestProgram StarBoardOrangeExpansion1 GSL_04-Network_Twitter

SuperTweetV1XML.cpp

Committer:
shintamainjp
Date:
2010-10-12
Revision:
0:d48d92e6c145
Child:
1:2d211e591fc8

File content as of revision 0:d48d92e6c145:

/**
 * SuperTweet API interface driver. (Version 0.0.1)
 *
 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
 * http://shinta.main.jp/
 */

#include "SuperTweetV1XML.h"

SuperTweetV1XML::SuperTweetV1XML(const std::string account, const std::string password)
        : SuperTweet(account, password) {
}

SuperTweetV1XML::~SuperTweetV1XML() {
}

HTTPResult SuperTweetV1XML::getStatusesUserTimeline(void (*func)(char *buf, size_t siz)) {
    HTTPMap map;
    HTTPStream stream;
    const std::string url = URLBASE_V1 + "statuses/user_timeline.xml";
    char buf[BUFSIZ + 1] = {0};

    result = HTTP_OK;
    completed = false;
    stream.readNext((byte*)buf, sizeof(buf) - 1);
    HTTPResult r = client.get(url.c_str(), &stream, this, &SuperTweetV1XML::callback);
    while (!completed) {
        Net::poll();
        if (stream.readable()) {
            buf[stream.readLen()] = 0;
            func(buf, stream.readLen());
            stream.readNext((byte*)buf, sizeof(buf) - 1);
        }
    }
    return result;
}

HTTPResult SuperTweetV1XML::getStatusesHomeTimeline(void (*func)(char *buf, size_t siz)) {
    HTTPMap map;
    HTTPStream stream;
    const std::string url = URLBASE_V1 + "statuses/home_timeline.xml";
    char buf[BUFSIZ + 1] = {0};

    result = HTTP_OK;
    completed = false;
    stream.readNext((byte*)buf, sizeof(buf) - 1);
    HTTPResult r = client.get(url.c_str(), &stream, this, &SuperTweetV1XML::callback);
    if (r != HTTP_OK) {
    while (!completed) {
        Net::poll();
        if (stream.readable()) {
            buf[stream.readLen()] = 0;
            func(buf, stream.readLen());
            stream.readNext((byte*)buf, sizeof(buf) - 1);
        }
    }
    }
    return result;
}

HTTPResult SuperTweetV1XML::postStatusesUpdate(const std::string datatext, void (*func)(char *buf, size_t siz)) {
    HTTPMap map;
    HTTPStream stream;
    map["status"] = datatext;
    const std::string url = URLBASE_V1 + "statuses/update.xml";
    char buf[BUFSIZ + 1] = {0};

    result = HTTP_OK;
    completed = false;
    stream.readNext((byte*)buf, sizeof(buf) - 1);
    HTTPResult r = client.post(url.c_str(), map, &stream, this, &SuperTweetV1XML::callback);
    while (!completed) {
        Net::poll();
        if (stream.readable()) {
            buf[stream.readLen()] = 0;
            func(buf, stream.readLen());
            stream.readNext((byte*)buf, sizeof(buf) - 1);
        }
    }
    return result;
}

void SuperTweetV1XML::callback(HTTPResult r) {
    result = r;
    completed = true;
}