aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/websocketpp_client.cpp25
-rw-r--r--src/nostr_service.cpp27
2 files changed, 29 insertions, 23 deletions
diff --git a/src/client/websocketpp_client.cpp b/src/client/websocketpp_client.cpp
index 5199343..981d4ec 100644
--- a/src/client/websocketpp_client.cpp
+++ b/src/client/websocketpp_client.cpp
@@ -1,10 +1,8 @@
-#include <nlohmann/json.hpp>
#include <websocketpp/client.hpp>
#include <websocketpp/config/asio_client.hpp>
#include "web_socket_client.hpp"
-using nlohmann::json;
using std::error_code;
using std::function;
using std::lock_guard;
@@ -86,26 +84,17 @@ public:
return make_tuple(uri, true);
};
- void receive(string uri, function<void(const string&, const string&)> messageHandler) override
+ void receive(string uri, function<void(const string&)> messageHandler) override
{
- this->_client.set_message_handler([this, messageHandler](
+ lock_guard<mutex> lock(this->_propertyMutex);
+ auto connectionHandle = this->_connectionHandles[uri];
+ auto connection = this->_client.get_con_from_hdl(connectionHandle);
+
+ connection->set_message_handler([messageHandler](
websocketpp::connection_hdl connectionHandle,
websocketpp_client::message_ptr message)
{
- json jarr = json::array();
- string payload = message->get_payload();
-
- jarr.parse(payload);
- string messageType = jarr[0];
-
- if (messageType == "EVENT")
- {
- string subscriptionId = jarr[1];
- string messageContents = jarr[2].dump();
- messageHandler(subscriptionId, messageContents);
- };
-
- // TODO: Add support for other message types.
+ messageHandler(message->get_payload());
});
};
diff --git a/src/nostr_service.cpp b/src/nostr_service.cpp
index 7efc11e..ac63f23 100644
--- a/src/nostr_service.cpp
+++ b/src/nostr_service.cpp
@@ -164,7 +164,7 @@ string NostrService::queryRelays(Filters filters)
});
};
-string NostrService::queryRelays(Filters filters, function<void(string, Event)> responseHandler)
+string NostrService::queryRelays(Filters filters, function<void(const string&, Event)> responseHandler)
{
RelayList successfulRelays;
RelayList failedRelays;
@@ -182,10 +182,8 @@ string NostrService::queryRelays(Filters filters, function<void(string, Event)>
});
requestFutures.push_back(move(requestFuture));
- this->_client->receive(relay, [responseHandler](string subscriptionId, string message) {
- Event event;
- event.deserialize(message);
- responseHandler(subscriptionId, event);
+ this->_client->receive(relay, [this, responseHandler](string payload) {
+ this->onMessage(payload, responseHandler);
});
}
@@ -460,6 +458,25 @@ bool NostrService::hasSubscription(string relay, string subscriptionId)
return false;
};
+void NostrService::onMessage(string message, function<void(const string&, Event)> eventHandler)
+{
+ json jarr = json::array();
+ jarr = json::parse(message);
+
+ string messageType = jarr[0];
+
+ if (messageType == "EVENT")
+ {
+ string subscriptionId = jarr[1];
+ string serializedEvent = jarr[2].dump();
+ Event event;
+ event.deserialize(message);
+ eventHandler(subscriptionId, event);
+ }
+
+ // Support other message types here, if necessary.
+};
+
void NostrService::onEvent(string subscriptionId, Event event)
{
lock_guard<mutex> lock(this->_propertyMutex);