diff --git a/examples/unrealstatus/Plugins/DiscordRpc/DiscordRpc.uplugin b/examples/unrealstatus/Plugins/DiscordRpc/DiscordRpc.uplugin deleted file mode 100644 index 309df12..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/DiscordRpc.uplugin +++ /dev/null @@ -1,29 +0,0 @@ -{ - "FileVersion": 3, - "Version": 1, - "VersionName": "1.0", - "FriendlyName": "Discord RPC", - "Description": "Wrap the Discord RPC library.", - "Category": "Messaging", - "CreatedBy": "Chris Marsh ", - "CreatedByURL": "https://discordapp.com/", - "DocsURL": "", - "MarketplaceURL": "", - "SupportURL": "", - "CanContainContent": true, - "IsBetaVersion": true, - "Installed": false, - "Modules": [ - { - "Name": "DiscordRpc", - "Type": "Runtime", - "LoadingPhase": "PreDefault", - "WhitelistPlatforms" : - [ - "Win64", - "Linux", - "Mac" - ] - } - ] -} \ No newline at end of file diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Resources/Icon128.png b/examples/unrealstatus/Plugins/DiscordRpc/Resources/Icon128.png deleted file mode 100644 index 8b7f8e1..0000000 Binary files a/examples/unrealstatus/Plugins/DiscordRpc/Resources/Icon128.png and /dev/null differ diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Resources/discord.png b/examples/unrealstatus/Plugins/DiscordRpc/Resources/discord.png deleted file mode 100644 index 8b7f8e1..0000000 Binary files a/examples/unrealstatus/Plugins/DiscordRpc/Resources/discord.png and /dev/null differ diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/DiscordRpc.Build.cs b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/DiscordRpc.Build.cs deleted file mode 100644 index 4b06325..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/DiscordRpc.Build.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. - -using UnrealBuildTool; -using System.IO; - -public class DiscordRpc : ModuleRules -{ -#if WITH_FORWARDED_MODULE_RULES_CTOR - public DiscordRpc(ReadOnlyTargetRules Target) : base(Target) -#else - public DiscordRpc(TargetInfo Target) -#endif - { - Definitions.Add("DISCORD_DYNAMIC_LIB=1"); - - PublicIncludePaths.AddRange( - new string[] { - "DiscordRpc/Public" - } - ); - - PrivateIncludePaths.AddRange( - new string[] { - "DiscordRpc/Private" - } - ); - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "DiscordRpcLibrary" - } - ); - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - "Slate", - "SlateCore", - "Projects" - } - ); - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - - string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..", "Source", "ThirdParty", "DiscordRpcLibrary")); - PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); - } -} \ No newline at end of file diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpc.cpp b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpc.cpp deleted file mode 100644 index db70ad0..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpc.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. - -#include "DiscordRpcPrivatePCH.h" -#include "IPluginManager.h" -#include "ModuleManager.h" - -#define LOCTEXT_NAMESPACE "FDiscordRpcModule" - -void FDiscordRpcModule::StartupModule() -{ -#if !PLATFORM_LINUX -#if defined(DISCORD_DYNAMIC_LIB) - // Get the base directory of this plugin - FString BaseDir = IPluginManager::Get().FindPlugin("DiscordRpc")->GetBaseDir(); - const FString SDKDir = FPaths::Combine(*BaseDir, TEXT("Source"), TEXT("ThirdParty"), TEXT("DiscordRpcLibrary")); -#if PLATFORM_WINDOWS - const FString LibName = TEXT("discord-rpc"); - const FString LibDir = FPaths::Combine(*SDKDir, TEXT("Win64")); - if (!LoadDependency(LibDir, LibName, DiscordRpcLibraryHandle)) { - FMessageDialog::Open(EAppMsgType::Ok, LOCTEXT(LOCTEXT_NAMESPACE, "Failed to load DiscordRpc plugin. Plug-in will not be functional.")); - FreeDependency(DiscordRpcLibraryHandle); - } -#elif PLATFORM_MAC - const FString LibName = TEXT("libdiscord-rpc"); - const FString LibDir = FPaths::Combine(*SDKDir, TEXT("Mac")); - if (!LoadDependency(LibDir, LibName, DiscordRpcLibraryHandle)) { - FMessageDialog::Open(EAppMsgType::Ok, LOCTEXT(LOCTEXT_NAMESPACE, "Failed to load DiscordRpc plugin. Plug-in will not be functional.")); - FreeDependency(DiscordRpcLibraryHandle); - } -#endif -#endif -#endif -} - -void FDiscordRpcModule::ShutdownModule() -{ - // Free the dll handle -#if !PLATFORM_LINUX -#if defined(DISCORD_DYNAMIC_LIB) - FreeDependency(DiscordRpcLibraryHandle); -#endif -#endif -} - -bool FDiscordRpcModule::LoadDependency(const FString& Dir, const FString& Name, void*& Handle) -{ - FString Lib = Name + TEXT(".") + FPlatformProcess::GetModuleExtension(); - FString Path = Dir.IsEmpty() ? *Lib : FPaths::Combine(*Dir, *Lib); - - Handle = FPlatformProcess::GetDllHandle(*Path); - - if (Handle == nullptr) - { - return false; - } - - return true; -} - -void FDiscordRpcModule::FreeDependency(void*& Handle) -{ - if (Handle != nullptr) - { - FPlatformProcess::FreeDllHandle(Handle); - Handle = nullptr; - } -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FDiscordRpcModule, DiscordRpc) \ No newline at end of file diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp deleted file mode 100644 index fc6b21b..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcBlueprint.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include "DiscordRpcPrivatePCH.h" -#include "DiscordRpcBlueprint.h" -#include "discord-rpc.h" - -DEFINE_LOG_CATEGORY(Discord) - -static UDiscordRpc* self = nullptr; - -static void ReadyHandler() -{ - UE_LOG(Discord, Log, TEXT("Discord connected")); - if (self) { - self->IsConnected = true; - self->OnConnected.Broadcast(); - } -} - -static void DisconnectHandler(int errorCode, const char* message) -{ - auto msg = FString(message); - UE_LOG(Discord, Log, TEXT("Discord disconnected (%d): %s"), errorCode, *msg); - if (self) { - self->IsConnected = false; - self->OnDisconnected.Broadcast(errorCode, msg); - } -} - -static void ErroredHandler(int errorCode, const char* message) -{ - auto msg = FString(message); - UE_LOG(Discord, Log, TEXT("Discord error (%d): %s"), errorCode, *msg); - if (self) { - self->OnErrored.Broadcast(errorCode, msg); - } -} - -static void JoinGameHandler(const char* joinSecret) -{ - auto secret = FString(joinSecret); - UE_LOG(Discord, Log, TEXT("Discord join %s"), *secret); - if (self) { - self->OnJoin.Broadcast(secret); - } -} - -static void SpectateGameHandler(const char* spectateSecret) -{ - auto secret = FString(spectateSecret); - UE_LOG(Discord, Log, TEXT("Discord spectate %s"), *secret); - if (self) { - self->OnSpectate.Broadcast(secret); - } -} - -static void JoinRequestHandler(const DiscordJoinRequest* request) -{ - FDiscordJoinRequestData jr; - jr.userId = ANSI_TO_TCHAR(request->userId); - jr.username = ANSI_TO_TCHAR(request->username); - jr.discriminator = ANSI_TO_TCHAR(request->discriminator); - jr.avatar = ANSI_TO_TCHAR(request->avatar); - UE_LOG(Discord, Log, TEXT("Discord join request from %s#%s"), *jr.username, *jr.discriminator); - if (self) { - self->OnJoinRequest.Broadcast(jr); - } -} - -void UDiscordRpc::Initialize(const FString& applicationId, - bool autoRegister, - const FString& optionalSteamId) -{ - self = this; - IsConnected = false; - DiscordEventHandlers handlers{}; - handlers.ready = ReadyHandler; - handlers.disconnected = DisconnectHandler; - handlers.errored = ErroredHandler; - if (OnJoin.IsBound()) { - handlers.joinGame = JoinGameHandler; - } - if (OnSpectate.IsBound()) { - handlers.spectateGame = SpectateGameHandler; - } - if (OnJoinRequest.IsBound()) { - handlers.joinRequest = JoinRequestHandler; - } - auto appId = StringCast(*applicationId); - auto steamId = StringCast(*optionalSteamId); - Discord_Initialize( - (const char*)appId.Get(), &handlers, autoRegister, (const char*)steamId.Get()); -} - -void UDiscordRpc::Shutdown() -{ - Discord_Shutdown(); - self = nullptr; -} - -void UDiscordRpc::RunCallbacks() -{ - Discord_RunCallbacks(); -} - -void UDiscordRpc::UpdatePresence() -{ - DiscordRichPresence rp{}; - - auto state = StringCast(*RichPresence.state); - rp.state = state.Get(); - - auto details = StringCast(*RichPresence.details); - rp.details = details.Get(); - - auto largeImageKey = StringCast(*RichPresence.largeImageKey); - rp.largeImageKey = largeImageKey.Get(); - - auto largeImageText = StringCast(*RichPresence.largeImageText); - rp.largeImageText = largeImageText.Get(); - - auto smallImageKey = StringCast(*RichPresence.smallImageKey); - rp.smallImageKey = smallImageKey.Get(); - - auto smallImageText = StringCast(*RichPresence.smallImageText); - rp.smallImageText = smallImageText.Get(); - - auto partyId = StringCast(*RichPresence.partyId); - rp.partyId = partyId.Get(); - - auto matchSecret = StringCast(*RichPresence.matchSecret); - rp.matchSecret = matchSecret.Get(); - - auto joinSecret = StringCast(*RichPresence.joinSecret); - rp.joinSecret = joinSecret.Get(); - - auto spectateSecret = StringCast(*RichPresence.spectateSecret); - rp.spectateSecret = spectateSecret.Get(); - - rp.startTimestamp = RichPresence.startTimestamp; - rp.endTimestamp = RichPresence.endTimestamp; - rp.partySize = RichPresence.partySize; - rp.partyMax = RichPresence.partyMax; - rp.instance = RichPresence.instance; - - Discord_UpdatePresence(&rp); -} - -void UDiscordRpc::ClearPresence() -{ - Discord_ClearPresence(); -} diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h deleted file mode 100644 index 0c66aba..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Private/DiscordRpcPrivatePCH.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "Core.h" -#include "DiscordRpc.h" \ No newline at end of file diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpc.h b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpc.h deleted file mode 100644 index 727833b..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpc.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. - -#pragma once - -#include "ModuleManager.h" - -class FDiscordRpcModule : public IModuleInterface { -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - /** Handle to the test dll we will load */ - void* DiscordRpcLibraryHandle; - - /** StartupModule is covered with defines, these functions are the place to put breakpoints */ - static bool LoadDependency(const FString& Dir, const FString& Name, void*& Handle); - static void FreeDependency(void*& Handle); -}; \ No newline at end of file diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h b/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h deleted file mode 100644 index 7fbad7b..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/DiscordRpc/Public/DiscordRpcBlueprint.h +++ /dev/null @@ -1,154 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "Engine.h" -#include "DiscordRpcBlueprint.generated.h" - -// unreal's header tool hates clang-format -// clang-format off - -/** -* Ask to join callback data -*/ -USTRUCT(BlueprintType) -struct FDiscordJoinRequestData { - GENERATED_USTRUCT_BODY() - - UPROPERTY(BlueprintReadOnly) - FString userId; - UPROPERTY(BlueprintReadOnly) - FString username; - UPROPERTY(BlueprintReadOnly) - FString discriminator; - UPROPERTY(BlueprintReadOnly) - FString avatar; -}; - - -DECLARE_LOG_CATEGORY_EXTERN(Discord, Log, All); - -DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDiscordConnected); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDiscordDisconnected, int, errorCode, const FString&, errorMessage); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDiscordErrored, int, errorCode, const FString&, errorMessage); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordJoin, const FString&, joinSecret); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordSpectate, const FString&, spectateSecret); -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDiscordJoinRequest, const FDiscordJoinRequestData&, joinRequest); - -// clang-format on - -/** - * Rich presence data - */ -USTRUCT(BlueprintType) -struct FDiscordRichPresence { - GENERATED_USTRUCT_BODY() - - UPROPERTY(BlueprintReadWrite) - FString state; - UPROPERTY(BlueprintReadWrite) - FString details; - // todo, timestamps are 64bit, does that even matter? - UPROPERTY(BlueprintReadWrite) - int startTimestamp; - UPROPERTY(BlueprintReadWrite) - int endTimestamp; - UPROPERTY(BlueprintReadWrite) - FString largeImageKey; - UPROPERTY(BlueprintReadWrite) - FString largeImageText; - UPROPERTY(BlueprintReadWrite) - FString smallImageKey; - UPROPERTY(BlueprintReadWrite) - FString smallImageText; - UPROPERTY(BlueprintReadWrite) - FString partyId; - UPROPERTY(BlueprintReadWrite) - int partySize; - UPROPERTY(BlueprintReadWrite) - int partyMax; - UPROPERTY(BlueprintReadWrite) - FString matchSecret; - UPROPERTY(BlueprintReadWrite) - FString joinSecret; - UPROPERTY(BlueprintReadWrite) - FString spectateSecret; - UPROPERTY(BlueprintReadWrite) - bool instance; -}; - -/** - * - */ -UCLASS(BlueprintType, meta = (DisplayName = "Discord RPC"), Category = "Discord") -class DISCORDRPC_API UDiscordRpc : public UObject { - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, - meta = (DisplayName = "Initialize connection", Keywords = "Discord rpc"), - Category = "Discord") - void Initialize(const FString& applicationId, - bool autoRegister, - const FString& optionalSteamId); - - UFUNCTION(BlueprintCallable, - meta = (DisplayName = "Shut down connection", Keywords = "Discord rpc"), - Category = "Discord") - void Shutdown(); - - UFUNCTION(BlueprintCallable, - meta = (DisplayName = "Check for callbacks", Keywords = "Discord rpc"), - Category = "Discord") - void RunCallbacks(); - - UFUNCTION(BlueprintCallable, - meta = (DisplayName = "Send presence", Keywords = "Discord rpc"), - Category = "Discord") - void UpdatePresence(); - - UFUNCTION(BlueprintCallable, - meta = (DisplayName = "Clear presence", Keywords = "Discord rpc"), - Category = "Discord") - void ClearPresence(); - - UPROPERTY(BlueprintReadOnly, - meta = (DisplayName = "Is Discord connected", Keywords = "Discord rpc"), - Category = "Discord") - bool IsConnected; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "On connection", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordConnected OnConnected; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "On disconnection", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordDisconnected OnDisconnected; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "On error message", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordErrored OnErrored; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "When Discord user presses join", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordJoin OnJoin; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "When Discord user presses spectate", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordSpectate OnSpectate; - - UPROPERTY(BlueprintAssignable, - meta = (DisplayName = "When Discord another user sends a join request", - Keywords = "Discord rpc"), - Category = "Discord") - FDiscordJoinRequest OnJoinRequest; - - UPROPERTY(BlueprintReadWrite, - meta = (DisplayName = "Rich presence info", Keywords = "Discord rpc"), - Category = "Discord") - FDiscordRichPresence RichPresence; -}; diff --git a/examples/unrealstatus/Plugins/DiscordRpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs b/examples/unrealstatus/Plugins/DiscordRpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs deleted file mode 100644 index ba8d834..0000000 --- a/examples/unrealstatus/Plugins/DiscordRpc/Source/ThirdParty/DiscordRpcLibrary/DiscordRpcLibrary.Build.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -using System.IO; -using UnrealBuildTool; - -public class DiscordRpcLibrary : ModuleRules -{ -#if WITH_FORWARDED_MODULE_RULES_CTOR - public DiscordRpcLibrary(ReadOnlyTargetRules Target) : base(Target) -#else - public DiscordRpcLibrary(TargetInfo Target) -#endif - { - Type = ModuleType.External; - Definitions.Add("DISCORD_DYNAMIC_LIB=1"); - - string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..", "ThirdParty", "DiscordRpcLibrary")); - - if (Target.Platform == UnrealTargetPlatform.Win64) - { - string lib = Path.Combine(BaseDirectory, "Win64"); - - // Include headers - PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); - - // Add the import library - PublicLibraryPaths.Add(lib); - PublicAdditionalLibraries.Add(Path.Combine(lib, "discord-rpc.lib")); - - // Dynamic - RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "discord-rpc.dll"))); - PublicDelayLoadDLLs.Add("discord-rpc.dll"); - } - else if (Target.Platform == UnrealTargetPlatform.Linux) - { - string lib = Path.Combine(BaseDirectory, "Linux", "x86_64-unknown-linux-gnu"); - - // Include headers - PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); - - // Add the import library - PublicLibraryPaths.Add(lib); - PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.so")); - RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.so"))); - } - else if (Target.Platform == UnrealTargetPlatform.Mac) - { - string lib = Path.Combine(BaseDirectory, "Mac"); - - // Include headers - PublicIncludePaths.Add(Path.Combine(BaseDirectory, "Include")); - - // Add the import library - PublicLibraryPaths.Add(lib); - PublicAdditionalLibraries.Add(Path.Combine(lib, "libdiscord-rpc.dylib")); - RuntimeDependencies.Add(new RuntimeDependency(Path.Combine(lib, "libdiscord-rpc.dylib"))); - } - } -} \ No newline at end of file