Skip to content
This repository was archived by the owner on Mar 17, 2025. It is now read-only.
2 changes: 1 addition & 1 deletion examples/FirebaseSerialHost_ESP8266/push.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
PUSH /seria/push_test "this is a test string \ "
PUSH /serial/push_test "this is a test string \ "
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eh, this is a trivial typo fix seems easiest to just lump it in here.

74 changes: 37 additions & 37 deletions src/Firebase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
using std::unique_ptr;

namespace {
String makeFirebaseURL(const String& path, const String& auth) {
String url;
std::string makeFirebaseURL(const std::string& path, const std::string& auth) {
std::string url;
if (path[0] != '/') {
url = "/";
}
Expand All @@ -32,71 +32,71 @@ String makeFirebaseURL(const String& path, const String& auth) {

} // namespace

Firebase::Firebase(const String& host, const String& auth) : host_(host), auth_(auth) {
Firebase::Firebase(const std::string& host, const std::string& auth) : host_(host), auth_(auth) {
http_.reset(FirebaseHttpClient::create());
http_->setReuseConnection(true);
}

const String& Firebase::auth() const {
const std::string& Firebase::auth() const {
return auth_;
}

FirebaseGet Firebase::get(const String& path) {
FirebaseGet Firebase::get(const std::string& path) {
return FirebaseGet(host_, auth_, path, http_.get());
}

unique_ptr<FirebaseGet> Firebase::getPtr(const String& path) {
unique_ptr<FirebaseGet> Firebase::getPtr(const std::string& path) {
return unique_ptr<FirebaseGet>(new FirebaseGet(host_, auth_, path, http_.get()));
}

FirebaseSet Firebase::set(const String& path, const String& value) {
FirebaseSet Firebase::set(const std::string& path, const std::string& value) {
return FirebaseSet(host_, auth_, path, value, http_.get());
}

unique_ptr<FirebaseSet> Firebase::setPtr(const String& path,
const String& value) {
unique_ptr<FirebaseSet> Firebase::setPtr(const std::string& path,
const std::string& value) {
return unique_ptr<FirebaseSet>(
new FirebaseSet(host_, auth_, path, value, http_.get()));
}

FirebasePush Firebase::push(const String& path, const String& value) {
FirebasePush Firebase::push(const std::string& path, const std::string& value) {
return FirebasePush(host_, auth_, path, value, http_.get());
}
unique_ptr<FirebasePush> Firebase::pushPtr(const String& path, const String& value) {
unique_ptr<FirebasePush> Firebase::pushPtr(const std::string& path, const std::string& value) {
return unique_ptr<FirebasePush>(
new FirebasePush(host_, auth_, path, value, http_.get()));
}

FirebaseRemove Firebase::remove(const String& path) {
FirebaseRemove Firebase::remove(const std::string& path) {
return FirebaseRemove(host_, auth_, path, http_.get());
}

unique_ptr<FirebaseRemove> Firebase::removePtr(const String& path) {
unique_ptr<FirebaseRemove> Firebase::removePtr(const std::string& path) {
return unique_ptr<FirebaseRemove>(
new FirebaseRemove(host_, auth_, path, http_.get()));
}

FirebaseStream Firebase::stream(const String& path) {
FirebaseStream Firebase::stream(const std::string& path) {
// TODO: create new client dedicated to stream.
return FirebaseStream(host_, auth_, path, http_.get());
}

unique_ptr<FirebaseStream> Firebase::streamPtr(const String& path) {
unique_ptr<FirebaseStream> Firebase::streamPtr(const std::string& path) {
// TODO: create new client dedicated to stream.
return unique_ptr<FirebaseStream>(
new FirebaseStream(host_, auth_, path, http_.get()));
}

// FirebaseCall
FirebaseCall::FirebaseCall(const String& host, const String& auth,
const char* method, const String& path,
const String& data, FirebaseHttpClient* http) : http_(http) {
String path_with_auth = makeFirebaseURL(path, auth);
FirebaseCall::FirebaseCall(const std::string& host, const std::string& auth,
const char* method, const std::string& path,
const std::string& data, FirebaseHttpClient* http) : http_(http) {
std::string path_with_auth = makeFirebaseURL(path, auth);
http_->setReuseConnection(true);
http_->begin(host, path_with_auth);

bool followRedirect = false;
if (String(method) == "STREAM") {
if (std::string(method) == "STREAM") {
method = "GET";
http_->addHeader("Accept", "text/event-stream");
followRedirect = true;
Expand All @@ -112,18 +112,18 @@ FirebaseCall::FirebaseCall(const String& host, const String& auth,
// TODO: Add a max redirect check
if (followRedirect) {
while (status == HttpStatus::TEMPORARY_REDIRECT) {
String location = http_->header("Location");
std::string location = http_->header("Location");
http_->setReuseConnection(false);
http_->end();
http_->setReuseConnection(true);
http_->begin(location);
status = http_->sendRequest("GET", String());
status = http_->sendRequest("GET", std::string());
}
}

if (status != 200) {
error_ = FirebaseError(status,
String(method) + " " + path_with_auth +
std::string(method) + " " + path_with_auth +
": " + http_->errorToString(status));
}

Expand All @@ -137,19 +137,19 @@ const JsonObject& FirebaseCall::json() {
//TODO(edcoyne): This is not efficient, we should do something smarter with
//the buffers.
buffer_ = DynamicJsonBuffer();
return buffer_.parseObject(response());
return buffer_.parseObject(response().c_str());
}

// FirebaseGet
FirebaseGet::FirebaseGet(const String& host, const String& auth,
const String& path,
FirebaseGet::FirebaseGet(const std::string& host, const std::string& auth,
const std::string& path,
FirebaseHttpClient* http)
: FirebaseCall(host, auth, "GET", path, "", http) {
}

// FirebaseSet
FirebaseSet::FirebaseSet(const String& host, const String& auth,
const String& path, const String& value,
FirebaseSet::FirebaseSet(const std::string& host, const std::string& auth,
const std::string& path, const std::string& value,
FirebaseHttpClient* http)
: FirebaseCall(host, auth, "PUT", path, value, http) {
if (!error()) {
Expand All @@ -158,8 +158,8 @@ FirebaseSet::FirebaseSet(const String& host, const String& auth,
}
}
// FirebasePush
FirebasePush::FirebasePush(const String& host, const String& auth,
const String& path, const String& value,
FirebasePush::FirebasePush(const std::string& host, const std::string& auth,
const std::string& path, const std::string& value,
FirebaseHttpClient* http)
: FirebaseCall(host, auth, "POST", path, value, http) {
if (!error()) {
Expand All @@ -168,15 +168,15 @@ FirebasePush::FirebasePush(const String& host, const String& auth,
}

// FirebasePush
FirebaseRemove::FirebaseRemove(const String& host, const String& auth,
const String& path,
FirebaseRemove::FirebaseRemove(const std::string& host, const std::string& auth,
const std::string& path,
FirebaseHttpClient* http)
: FirebaseCall(host, auth, "DELETE", path, "", http) {
}

// FirebaseStream
FirebaseStream::FirebaseStream(const String& host, const String& auth,
const String& path,
FirebaseStream::FirebaseStream(const std::string& host, const std::string& auth,
const std::string& path,
FirebaseHttpClient* http)
: FirebaseCall(host, auth, "STREAM", path, "", http) {
}
Expand All @@ -185,18 +185,18 @@ bool FirebaseStream::available() {
return http_->getStreamPtr()->available();
}

FirebaseStream::Event FirebaseStream::read(String& event) {
FirebaseStream::Event FirebaseStream::read(std::string& event) {
auto client = http_->getStreamPtr();
Event type;
String typeStr = client->readStringUntil('\n').substring(7);
std::string typeStr = client->readStringUntil('\n').substring(7).c_str();
if (typeStr == "put") {
type = Event::PUT;
} else if (typeStr == "patch") {
type = Event::PATCH;
} else {
type = Event::UNKNOWN;
}
event = client->readStringUntil('\n').substring(6);
event = client->readStringUntil('\n').substring(6).c_str();
client->readStringUntil('\n'); // consume separator
return type;
}
76 changes: 38 additions & 38 deletions src/Firebase.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,67 +37,67 @@ class FirebaseStream;
// Firebase REST API client.
class Firebase {
public:
Firebase(const String& host, const String& auth = "");
Firebase(const std::string& host, const std::string& auth = "");

const String& auth() const;
const std::string& auth() const;

// Fetch json encoded `value` at `path`.
FirebaseGet get(const String& path);
virtual std::unique_ptr<FirebaseGet> getPtr(const String& path);
FirebaseGet get(const std::string& path);
virtual std::unique_ptr<FirebaseGet> getPtr(const std::string& path);

// Set json encoded `value` at `path`.
FirebaseSet set(const String& path, const String& json);
virtual std::unique_ptr<FirebaseSet> setPtr(const String& path, const String& json);
FirebaseSet set(const std::string& path, const std::string& json);
virtual std::unique_ptr<FirebaseSet> setPtr(const std::string& path, const std::string& json);

// Add new json encoded `value` to list at `path`.
FirebasePush push(const String& path, const String& json);
virtual std::unique_ptr<FirebasePush> pushPtr(const String& path, const String& json);
FirebasePush push(const std::string& path, const std::string& json);
virtual std::unique_ptr<FirebasePush> pushPtr(const std::string& path, const std::string& json);

// Delete value at `path`.
FirebaseRemove remove(const String& path);
virtual std::unique_ptr<FirebaseRemove> removePtr(const String& path);
FirebaseRemove remove(const std::string& path);
virtual std::unique_ptr<FirebaseRemove> removePtr(const std::string& path);

// Start a stream of events that affect value at `path`.
FirebaseStream stream(const String& path);
virtual std::unique_ptr<FirebaseStream> streamPtr(const String& path);
FirebaseStream stream(const std::string& path);
virtual std::unique_ptr<FirebaseStream> streamPtr(const std::string& path);

protected:
// Used for testing.
Firebase() {}

private:
std::unique_ptr<FirebaseHttpClient> http_;
String host_;
String auth_;
std::string host_;
std::string auth_;
};

class FirebaseError {
public:
FirebaseError() {}
FirebaseError(int code, const String& message) : code_(code), message_(message) {
FirebaseError(int code, const std::string& message) : code_(code), message_(message) {
}
operator bool() const { return code_ != 0; }
int code() const { return code_; }
const String& message() const { return message_; }
const std::string& message() const { return message_; }
private:
int code_ = 0;
String message_ = "";
std::string message_ = "";
};

class FirebaseCall {
public:
FirebaseCall() {}
FirebaseCall(const String& host, const String& auth,
const char* method, const String& path,
const String& data = "",
FirebaseCall(const std::string& host, const std::string& auth,
const char* method, const std::string& path,
const std::string& data = "",
FirebaseHttpClient* http = NULL);
virtual ~FirebaseCall() {}

virtual const FirebaseError& error() const {
return error_;
}

virtual const String& response() const {
virtual const std::string& response() const {
return response_;
}

Expand All @@ -106,59 +106,59 @@ class FirebaseCall {
protected:
FirebaseHttpClient* http_;
FirebaseError error_;
String response_;
std::string response_;
DynamicJsonBuffer buffer_;
};

class FirebaseGet : public FirebaseCall {
public:
FirebaseGet() {}
FirebaseGet(const String& host, const String& auth,
const String& path, FirebaseHttpClient* http = NULL);
FirebaseGet(const std::string& host, const std::string& auth,
const std::string& path, FirebaseHttpClient* http = NULL);

private:
String json_;
std::string json_;
};

class FirebaseSet: public FirebaseCall {
public:
FirebaseSet() {}
FirebaseSet(const String& host, const String& auth,
const String& path, const String& value, FirebaseHttpClient* http = NULL);
FirebaseSet(const std::string& host, const std::string& auth,
const std::string& path, const std::string& value, FirebaseHttpClient* http = NULL);


private:
String json_;
std::string json_;
};

class FirebasePush : public FirebaseCall {
public:
FirebasePush() {}
FirebasePush(const String& host, const String& auth,
const String& path, const String& value, FirebaseHttpClient* http = NULL);
FirebasePush(const std::string& host, const std::string& auth,
const std::string& path, const std::string& value, FirebaseHttpClient* http = NULL);
virtual ~FirebasePush() {}

virtual const String& name() const {
virtual const std::string& name() const {
return name_;
}

private:
String name_;
std::string name_;
};

class FirebaseRemove : public FirebaseCall {
public:
FirebaseRemove() {}
FirebaseRemove(const String& host, const String& auth,
const String& path, FirebaseHttpClient* http = NULL);
FirebaseRemove(const std::string& host, const std::string& auth,
const std::string& path, FirebaseHttpClient* http = NULL);
};


class FirebaseStream : public FirebaseCall {
public:
FirebaseStream() {}
FirebaseStream(const String& host, const String& auth,
const String& path, FirebaseHttpClient* http = NULL);
FirebaseStream(const std::string& host, const std::string& auth,
const std::string& path, FirebaseHttpClient* http = NULL);
virtual ~FirebaseStream() {}

// Return if there is any event available to read.
Expand All @@ -171,7 +171,7 @@ class FirebaseStream : public FirebaseCall {
PATCH
};

static inline String EventToName(Event event) {
static inline std::string EventToName(Event event) {
switch(event) {
case UNKNOWN:
return "UNKNOWN";
Expand All @@ -185,7 +185,7 @@ class FirebaseStream : public FirebaseCall {
}

// Read next json encoded `event` from stream.
virtual Event read(String& event);
virtual Event read(std::string& event);

const FirebaseError& error() const {
return _error;
Expand Down
Loading