rdiscord_sdk 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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