summaryrefslogtreecommitdiff
path: root/discord/discord.hpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-08-19 01:07:55 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-08-19 01:07:55 -0400
commit3c3fe3b9f727c1e398760b139a2ef2da41d3cbda (patch)
treecc25fe85a659c043440f5ec98f8b97a17ef10e52 /discord/discord.hpp
parent18af78e6af49821f8c7adb5b4325d75c8bf4fd03 (diff)
downloadabaddon-portaudio-3c3fe3b9f727c1e398760b139a2ef2da41d3cbda.tar.gz
abaddon-portaudio-3c3fe3b9f727c1e398760b139a2ef2da41d3cbda.zip
settings, token entry, receive READY
Diffstat (limited to 'discord/discord.hpp')
-rw-r--r--discord/discord.hpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 692d57b..5a2d256 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -2,13 +2,20 @@
#include "websocket.hpp"
#include <nlohmann/json.hpp>
#include <thread>
+#include <unordered_map>
enum class GatewayOp : int {
+ Event = 0,
Heartbeat = 1,
+ Identify = 2,
Hello = 10,
HeartbeatAck = 11,
};
+enum class GatewayEvent : int {
+ READY,
+};
+
struct GatewayMessage {
GatewayOp Opcode;
nlohmann::json Data;
@@ -23,6 +30,28 @@ struct HelloMessageData {
friend void from_json(const nlohmann::json &j, HelloMessageData &m);
};
+struct ReadyEventData {
+ std::string AnalyticsToken; // opt
+
+};
+
+struct IdentifyProperties {
+ std::string OS;
+ std::string Browser;
+ std::string Device;
+
+ friend void to_json(nlohmann::json &j, const IdentifyProperties &m);
+};
+
+struct IdentifyMessage : GatewayMessage {
+ std::string Token;
+ IdentifyProperties Properties;
+ bool DoesSupportCompression = false;
+ int LargeThreshold = 0;
+
+ friend void to_json(nlohmann::json &j, const IdentifyMessage &m);
+};
+
struct HeartbeatMessage : GatewayMessage {
int Sequence;
@@ -49,23 +78,32 @@ private:
bool terminate = false;
};
+class Abaddon;
class DiscordClient {
public:
static const constexpr char *DiscordGateway = "wss://gateway.discord.gg/?v=6&encoding=json";
static const constexpr char *DiscordAPI = "https://discord.com/api";
+ static const constexpr char *GatewayIdentity = "Discord";
public:
DiscordClient();
+ void SetAbaddon(Abaddon *ptr);
void Start();
void Stop();
bool IsStarted() const;
private:
void HandleGatewayMessage(nlohmann::json msg);
+ void HandleGatewayReady(const GatewayMessage &msg);
void HeartbeatThread();
+ void SendIdentify();
+
+ Abaddon *m_abaddon = nullptr;
Websocket m_websocket;
bool m_client_connected = false;
+ std::unordered_map<std::string, GatewayEvent> m_event_map;
+ void LoadEventMap();
std::thread m_heartbeat_thread;
int m_last_sequence = -1;