rdiscord_sdk 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +13 -0
  3. data/.vscode/c_cpp_properties.json +24 -0
  4. data/.vscode/settings.json +102 -0
  5. data/Gemfile +11 -0
  6. data/Gemfile.lock +46 -0
  7. data/INTERNALS.md +0 -0
  8. data/LICENSE +674 -0
  9. data/README.md +187 -0
  10. data/Rakefile +17 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +8 -0
  13. data/ext/rdiscord_sdk/activity.cpp +297 -0
  14. data/ext/rdiscord_sdk/activity.h +17 -0
  15. data/ext/rdiscord_sdk/common.cpp +65 -0
  16. data/ext/rdiscord_sdk/common.h +88 -0
  17. data/ext/rdiscord_sdk/extconf.rb +54 -0
  18. data/ext/rdiscord_sdk/gem_activity_manager.cpp +273 -0
  19. data/ext/rdiscord_sdk/gem_activity_manager.h +8 -0
  20. data/ext/rdiscord_sdk/gem_user_manager.cpp +114 -0
  21. data/ext/rdiscord_sdk/gem_user_manager.h +8 -0
  22. data/ext/rdiscord_sdk/rdiscord_sdk.cpp +77 -0
  23. data/ext/rdiscord_sdk/rdiscord_sdk.h +17 -0
  24. data/ext/rdiscord_sdk/user.cpp +98 -0
  25. data/ext/rdiscord_sdk/user.h +19 -0
  26. data/lib/rdiscord_sdk/enums.rb +162 -0
  27. data/lib/rdiscord_sdk/rdiscord_sdk.so +0 -0
  28. data/lib/rdiscord_sdk/version.rb +16 -0
  29. data/lib/rdiscord_sdk.rb +3 -0
  30. data/rdiscord_sdk.gemspec +34 -0
  31. data/third-party/include/achievement_manager.cpp +98 -0
  32. data/third-party/include/achievement_manager.h +34 -0
  33. data/third-party/include/activity_manager.cpp +177 -0
  34. data/third-party/include/activity_manager.h +42 -0
  35. data/third-party/include/application_manager.cpp +78 -0
  36. data/third-party/include/application_manager.h +30 -0
  37. data/third-party/include/core.cpp +182 -0
  38. data/third-party/include/core.h +64 -0
  39. data/third-party/include/discord.h +16 -0
  40. data/third-party/include/event.h +59 -0
  41. data/third-party/include/ffi.h +942 -0
  42. data/third-party/include/image_manager.cpp +57 -0
  43. data/third-party/include/image_manager.h +28 -0
  44. data/third-party/include/lobby_manager.cpp +547 -0
  45. data/third-party/include/lobby_manager.h +88 -0
  46. data/third-party/include/network_manager.cpp +103 -0
  47. data/third-party/include/network_manager.h +63 -0
  48. data/third-party/include/overlay_manager.cpp +112 -0
  49. data/third-party/include/overlay_manager.h +33 -0
  50. data/third-party/include/relationship_manager.cpp +90 -0
  51. data/third-party/include/relationship_manager.h +32 -0
  52. data/third-party/include/storage_manager.cpp +158 -0
  53. data/third-party/include/storage_manager.h +46 -0
  54. data/third-party/include/store_manager.cpp +160 -0
  55. data/third-party/include/store_manager.h +38 -0
  56. data/third-party/include/types.cpp +769 -0
  57. data/third-party/include/types.h +492 -0
  58. data/third-party/include/user_manager.cpp +80 -0
  59. data/third-party/include/user_manager.h +31 -0
  60. data/third-party/include/voice_manager.cpp +124 -0
  61. data/third-party/include/voice_manager.h +37 -0
  62. data/third-party/lib/x86/discord_game_sdk.dll +0 -0
  63. data/third-party/lib/x86/discord_game_sdk.dll.lib +0 -0
  64. data/third-party/lib/x86_64/discord_game_sdk.bundle +0 -0
  65. data/third-party/lib/x86_64/discord_game_sdk.dll +0 -0
  66. data/third-party/lib/x86_64/discord_game_sdk.dll.lib +0 -0
  67. data/third-party/lib/x86_64/discord_game_sdk.dylib +0 -0
  68. data/third-party/lib/x86_64/discord_game_sdk.so +0 -0
  69. metadata +114 -0
@@ -0,0 +1,182 @@
1
+ #if !defined(_CRT_SECURE_NO_WARNINGS)
2
+ #define _CRT_SECURE_NO_WARNINGS
3
+ #endif
4
+
5
+ #include "core.h"
6
+
7
+ #include <cstring>
8
+ #include <memory>
9
+
10
+ namespace discord {
11
+
12
+ Result Core::Create(ClientId clientId, std::uint64_t flags, Core** instance)
13
+ {
14
+ if (!instance) {
15
+ return Result::InternalError;
16
+ }
17
+
18
+ (*instance) = new Core();
19
+ DiscordCreateParams params{};
20
+ DiscordCreateParamsSetDefault(&params);
21
+ params.client_id = clientId;
22
+ params.flags = flags;
23
+ params.events = nullptr;
24
+ params.event_data = *instance;
25
+ params.user_events = &UserManager::events_;
26
+ params.activity_events = &ActivityManager::events_;
27
+ params.relationship_events = &RelationshipManager::events_;
28
+ params.lobby_events = &LobbyManager::events_;
29
+ params.network_events = &NetworkManager::events_;
30
+ params.overlay_events = &OverlayManager::events_;
31
+ params.store_events = &StoreManager::events_;
32
+ params.voice_events = &VoiceManager::events_;
33
+ params.achievement_events = &AchievementManager::events_;
34
+ auto result = DiscordCreate(DISCORD_VERSION, &params, &((*instance)->internal_));
35
+ if (result != DiscordResult_Ok || !(*instance)->internal_) {
36
+ delete (*instance);
37
+ (*instance) = nullptr;
38
+ }
39
+
40
+ return static_cast<Result>(result);
41
+ }
42
+
43
+ Core::~Core()
44
+ {
45
+ if (internal_) {
46
+ internal_->destroy(internal_);
47
+ internal_ = nullptr;
48
+ }
49
+ }
50
+
51
+ Result Core::RunCallbacks()
52
+ {
53
+ auto result = internal_->run_callbacks(internal_);
54
+ return static_cast<Result>(result);
55
+ }
56
+
57
+ void Core::SetLogHook(LogLevel minLevel, std::function<void(LogLevel, char const*)> hook)
58
+ {
59
+ setLogHook_.DisconnectAll();
60
+ setLogHook_.Connect(std::move(hook));
61
+ static auto wrapper =
62
+ [](void* callbackData, EDiscordLogLevel level, char const* message) -> void {
63
+ auto cb(reinterpret_cast<decltype(setLogHook_)*>(callbackData));
64
+ if (!cb) {
65
+ return;
66
+ }
67
+ (*cb)(static_cast<LogLevel>(level), static_cast<const char*>(message));
68
+ };
69
+
70
+ internal_->set_log_hook(
71
+ internal_, static_cast<EDiscordLogLevel>(minLevel), &setLogHook_, wrapper);
72
+ }
73
+
74
+ discord::ApplicationManager& Core::ApplicationManager()
75
+ {
76
+ if (!applicationManager_.internal_) {
77
+ applicationManager_.internal_ = internal_->get_application_manager(internal_);
78
+ }
79
+
80
+ return applicationManager_;
81
+ }
82
+
83
+ discord::UserManager& Core::UserManager()
84
+ {
85
+ if (!userManager_.internal_) {
86
+ userManager_.internal_ = internal_->get_user_manager(internal_);
87
+ }
88
+
89
+ return userManager_;
90
+ }
91
+
92
+ discord::ImageManager& Core::ImageManager()
93
+ {
94
+ if (!imageManager_.internal_) {
95
+ imageManager_.internal_ = internal_->get_image_manager(internal_);
96
+ }
97
+
98
+ return imageManager_;
99
+ }
100
+
101
+ discord::ActivityManager& Core::ActivityManager()
102
+ {
103
+ if (!activityManager_.internal_) {
104
+ activityManager_.internal_ = internal_->get_activity_manager(internal_);
105
+ }
106
+
107
+ return activityManager_;
108
+ }
109
+
110
+ discord::RelationshipManager& Core::RelationshipManager()
111
+ {
112
+ if (!relationshipManager_.internal_) {
113
+ relationshipManager_.internal_ = internal_->get_relationship_manager(internal_);
114
+ }
115
+
116
+ return relationshipManager_;
117
+ }
118
+
119
+ discord::LobbyManager& Core::LobbyManager()
120
+ {
121
+ if (!lobbyManager_.internal_) {
122
+ lobbyManager_.internal_ = internal_->get_lobby_manager(internal_);
123
+ }
124
+
125
+ return lobbyManager_;
126
+ }
127
+
128
+ discord::NetworkManager& Core::NetworkManager()
129
+ {
130
+ if (!networkManager_.internal_) {
131
+ networkManager_.internal_ = internal_->get_network_manager(internal_);
132
+ }
133
+
134
+ return networkManager_;
135
+ }
136
+
137
+ discord::OverlayManager& Core::OverlayManager()
138
+ {
139
+ if (!overlayManager_.internal_) {
140
+ overlayManager_.internal_ = internal_->get_overlay_manager(internal_);
141
+ }
142
+
143
+ return overlayManager_;
144
+ }
145
+
146
+ discord::StorageManager& Core::StorageManager()
147
+ {
148
+ if (!storageManager_.internal_) {
149
+ storageManager_.internal_ = internal_->get_storage_manager(internal_);
150
+ }
151
+
152
+ return storageManager_;
153
+ }
154
+
155
+ discord::StoreManager& Core::StoreManager()
156
+ {
157
+ if (!storeManager_.internal_) {
158
+ storeManager_.internal_ = internal_->get_store_manager(internal_);
159
+ }
160
+
161
+ return storeManager_;
162
+ }
163
+
164
+ discord::VoiceManager& Core::VoiceManager()
165
+ {
166
+ if (!voiceManager_.internal_) {
167
+ voiceManager_.internal_ = internal_->get_voice_manager(internal_);
168
+ }
169
+
170
+ return voiceManager_;
171
+ }
172
+
173
+ discord::AchievementManager& Core::AchievementManager()
174
+ {
175
+ if (!achievementManager_.internal_) {
176
+ achievementManager_.internal_ = internal_->get_achievement_manager(internal_);
177
+ }
178
+
179
+ return achievementManager_;
180
+ }
181
+
182
+ } // namespace discord
@@ -0,0 +1,64 @@
1
+ #pragma once
2
+
3
+ #include "types.h"
4
+ #include "application_manager.h"
5
+ #include "user_manager.h"
6
+ #include "image_manager.h"
7
+ #include "activity_manager.h"
8
+ #include "relationship_manager.h"
9
+ #include "lobby_manager.h"
10
+ #include "network_manager.h"
11
+ #include "overlay_manager.h"
12
+ #include "storage_manager.h"
13
+ #include "store_manager.h"
14
+ #include "voice_manager.h"
15
+ #include "achievement_manager.h"
16
+
17
+ namespace discord {
18
+
19
+ class Core final {
20
+ public:
21
+ static Result Create(ClientId clientId, std::uint64_t flags, Core** instance);
22
+
23
+ ~Core();
24
+
25
+ Result RunCallbacks();
26
+ void SetLogHook(LogLevel minLevel, std::function<void(LogLevel, char const*)> hook);
27
+
28
+ discord::ApplicationManager& ApplicationManager();
29
+ discord::UserManager& UserManager();
30
+ discord::ImageManager& ImageManager();
31
+ discord::ActivityManager& ActivityManager();
32
+ discord::RelationshipManager& RelationshipManager();
33
+ discord::LobbyManager& LobbyManager();
34
+ discord::NetworkManager& NetworkManager();
35
+ discord::OverlayManager& OverlayManager();
36
+ discord::StorageManager& StorageManager();
37
+ discord::StoreManager& StoreManager();
38
+ discord::VoiceManager& VoiceManager();
39
+ discord::AchievementManager& AchievementManager();
40
+
41
+ private:
42
+ Core() = default;
43
+ Core(Core const& rhs) = delete;
44
+ Core& operator=(Core const& rhs) = delete;
45
+ Core(Core&& rhs) = delete;
46
+ Core& operator=(Core&& rhs) = delete;
47
+
48
+ IDiscordCore* internal_;
49
+ Event<LogLevel, char const*> setLogHook_;
50
+ discord::ApplicationManager applicationManager_;
51
+ discord::UserManager userManager_;
52
+ discord::ImageManager imageManager_;
53
+ discord::ActivityManager activityManager_;
54
+ discord::RelationshipManager relationshipManager_;
55
+ discord::LobbyManager lobbyManager_;
56
+ discord::NetworkManager networkManager_;
57
+ discord::OverlayManager overlayManager_;
58
+ discord::StorageManager storageManager_;
59
+ discord::StoreManager storeManager_;
60
+ discord::VoiceManager voiceManager_;
61
+ discord::AchievementManager achievementManager_;
62
+ };
63
+
64
+ } // namespace discord
@@ -0,0 +1,16 @@
1
+ #pragma once
2
+
3
+ #include "types.h"
4
+ #include "core.h"
5
+ #include "application_manager.h"
6
+ #include "user_manager.h"
7
+ #include "image_manager.h"
8
+ #include "activity_manager.h"
9
+ #include "relationship_manager.h"
10
+ #include "lobby_manager.h"
11
+ #include "network_manager.h"
12
+ #include "overlay_manager.h"
13
+ #include "storage_manager.h"
14
+ #include "store_manager.h"
15
+ #include "voice_manager.h"
16
+ #include "achievement_manager.h"
@@ -0,0 +1,59 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <vector>
5
+
6
+ namespace discord {
7
+
8
+ template <typename... Args>
9
+ class Event final {
10
+ public:
11
+ using Token = int;
12
+
13
+ Event() { slots_.reserve(4); }
14
+
15
+ Event(Event const&) = default;
16
+ Event(Event&&) = default;
17
+ ~Event() = default;
18
+
19
+ Event& operator=(Event const&) = default;
20
+ Event& operator=(Event&&) = default;
21
+
22
+ template <typename EventHandler>
23
+ Token Connect(EventHandler slot)
24
+ {
25
+ slots_.emplace_back(Slot{nextToken_, std::move(slot)});
26
+ return nextToken_++;
27
+ }
28
+
29
+ void Disconnect(Token token)
30
+ {
31
+ for (auto& slot : slots_) {
32
+ if (slot.token == token) {
33
+ slot = slots_.back();
34
+ slots_.pop_back();
35
+ break;
36
+ }
37
+ }
38
+ }
39
+
40
+ void DisconnectAll() { slots_ = {}; }
41
+
42
+ void operator()(Args... args)
43
+ {
44
+ for (auto const& slot : slots_) {
45
+ slot.fn(std::forward<Args>(args)...);
46
+ }
47
+ }
48
+
49
+ private:
50
+ struct Slot {
51
+ Token token;
52
+ std::function<void(Args...)> fn;
53
+ };
54
+
55
+ Token nextToken_{};
56
+ std::vector<Slot> slots_{};
57
+ };
58
+
59
+ } // namespace discord