summaryrefslogtreecommitdiff
path: root/src/discord/websocket.cpp
diff options
context:
space:
mode:
authorDylam De La Torre <DyXel04@gmail.com>2021-11-23 05:21:56 +0100
committerGitHub <noreply@github.com>2021-11-23 04:21:56 +0000
commita51a54bc5979a2491f152abc47ad54e6b63f27c8 (patch)
treece67092b2f6df366033a65a6111e4650866766b2 /src/discord/websocket.cpp
parentd88079000a79e6bcbe51c5a2868d57b303b5fcb6 (diff)
downloadabaddon-portaudio-a51a54bc5979a2491f152abc47ad54e6b63f27c8.tar.gz
abaddon-portaudio-a51a54bc5979a2491f152abc47ad54e6b63f27c8.zip
Restructure source and resource files (#46)
importantly, res is now res/res and css is now res/css
Diffstat (limited to 'src/discord/websocket.cpp')
-rw-r--r--src/discord/websocket.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/discord/websocket.cpp b/src/discord/websocket.cpp
new file mode 100644
index 0000000..ff50cd3
--- /dev/null
+++ b/src/discord/websocket.cpp
@@ -0,0 +1,66 @@
+#include "websocket.hpp"
+#include <functional>
+
+Websocket::Websocket() {}
+
+void Websocket::StartConnection(std::string url) {
+ m_websocket.disableAutomaticReconnection();
+ m_websocket.setUrl(url);
+ m_websocket.setOnMessageCallback(std::bind(&Websocket::OnMessage, this, std::placeholders::_1));
+ m_websocket.setExtraHeaders(ix::WebSocketHttpHeaders { { "User-Agent", m_agent } }); // idk if this actually works
+ m_websocket.start();
+}
+
+void Websocket::SetUserAgent(std::string agent) {
+ m_agent = agent;
+}
+
+void Websocket::Stop() {
+ Stop(ix::WebSocketCloseConstants::kNormalClosureCode);
+}
+
+void Websocket::Stop(uint16_t code) {
+ m_websocket.stop(code);
+}
+
+bool Websocket::IsOpen() const {
+ auto state = m_websocket.getReadyState();
+ return state == ix::ReadyState::Open;
+}
+
+void Websocket::Send(const std::string &str) {
+ printf("sending %s\n", str.c_str());
+ m_websocket.sendText(str);
+}
+
+void Websocket::Send(const nlohmann::json &j) {
+ Send(j.dump());
+}
+
+void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) {
+ switch (msg->type) {
+ case ix::WebSocketMessageType::Open: {
+ m_signal_open.emit();
+ } break;
+ case ix::WebSocketMessageType::Close: {
+ m_signal_close.emit(msg->closeInfo.code);
+ } break;
+ case ix::WebSocketMessageType::Message: {
+ m_signal_message.emit(msg->str);
+ } break;
+ default:
+ break;
+ }
+}
+
+Websocket::type_signal_open Websocket::signal_open() {
+ return m_signal_open;
+}
+
+Websocket::type_signal_close Websocket::signal_close() {
+ return m_signal_close;
+}
+
+Websocket::type_signal_message Websocket::signal_message() {
+ return m_signal_message;
+}