123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- #pragma once
- #include "AkInclude.h"
- #include "HAL/Runnable.h"
- #include "Dom/JsonObject.h"
- #include "HAL/ThreadSafeBool.h"
- DECLARE_DELEGATE_TwoParams(WampEventCallback, uint64_t, TSharedPtr<FJsonObject>);
- DECLARE_EVENT(FAkWaapiClient, WwiseProjectLoaded);
- DECLARE_EVENT(FAkWaapiClient, WAAPIConnectionLost);
- DECLARE_EVENT(FAkWaapiClient, BeginDestroyClient);
- #define WAAPI_LOCAL_HOST_IP_STRING "127.0.0.1"
- #define WAAPI_PORT 8080
- class FAkWaapiClient;
- struct KeyValueArgs
- {
- const FString KeyArg;
- const FString ValueArg;
- };
- class FAkWaapiClientConnectionHandler : public FRunnable
- {
- public:
- FAkWaapiClientConnectionHandler(FAkWaapiClient& in_Client);
- ~FAkWaapiClientConnectionHandler();
-
- virtual bool Init() override;
- virtual uint32 Run() override;
- virtual void Stop() override;
- virtual void Exit() override;
- void ResetReconnectionDelay();
- void RegisterAutoConnectChangedCallback();
- void Wake();
- private:
- FThreadSafeBool ThreadShouldExit = false;
- FThreadSafeCounter ReconnectDelay = 2;
- FThreadSafeCounter ConnectionMonitorDelay = 7;
- FThreadSafeCounter LogOutputCount = 0;
- int m_iMaxReconnectDelay = 32;
- FEvent* WaitEvent;
- FCriticalSection AkSettingsSection;
- FAkWaapiClient& m_Client;
- bool hadConnection = false;
- bool AttemptReconnect();
- FDelegateHandle AutoConnectChangedHandle;
- };
- class AKAUDIO_API FAkWaapiClient
- {
- public:
- virtual ~FAkWaapiClient();
-
- static void Initialize();
-
- static FAkWaapiClient* Get();
-
- static void DeleteInstance();
-
- WampEventCallback* GetWampEventCallback(const uint64_t& in_subscriptionId);
-
- static bool JsonObjectToString(const TSharedRef<FJsonObject>& in_jsonObject, FString& ou_jsonObjectString);
- bool IsConnected();
- bool AttemptConnection();
-
- static bool IsProjectDirty();
-
- bool Subscribe(const char* in_uri, const FString& in_options, WampEventCallback in_callback,
- uint64& out_subscriptionId, FString& out_result, int in_iTimeoutMs = 500);
- bool Subscribe(const char* in_uri, const TSharedRef<FJsonObject>& in_options, WampEventCallback in_callback,
- uint64& out_subscriptionId, TSharedPtr<FJsonObject>& out_result, int in_iTimeoutMs = 500);
-
- bool Unsubscribe(const uint64_t& in_subscriptionId, FString& out_result, int in_iTimeoutMs = 500, bool in_bSilenceLog = false);
- bool Unsubscribe(const uint64_t& in_subscriptionId, TSharedPtr<FJsonObject>& out_result, int in_iTimeoutMs = 500, bool in_bSilenceLog = false);
-
- bool RemoveWampEventCallback(const uint64_t in_subscriptionId);
-
- bool Call(const char* in_uri, const FString& in_args, const FString& in_options, FString& out_result, int in_iTimeoutMs = 500, bool silenceLog = false);
- bool Call(const char* in_uri, const TSharedRef<FJsonObject>& in_args, const TSharedRef<FJsonObject>& in_options,
- TSharedPtr<FJsonObject>& out_result, int in_iTimeoutMs = 500, bool silenceLog = false);
-
- bool Call(const char* inUri, const TArray<KeyValueArgs>& Values, TSharedPtr<FJsonObject>& outJsonResult);
-
- static void GetParentOfType(FGuid in_objectGUID, FGuid& in_outParentGUID, FString in_strType);
-
- static bool GetProjectPath(TSharedPtr<FJsonObject>& inOutJsonReslut, FString& ProjectPath);
- WwiseProjectLoaded OnProjectLoaded;
- WAAPIConnectionLost OnConnectionLost;
- BeginDestroyClient OnClientBeginDestroy;
-
- void ConnectionEstablished();
- void BroadcastConnectionLost();
- static bool IsProjectLoaded();
-
- bool IsDisconnecting();
- bool AppIsExiting();
- void SetConnectionClosing(bool isClosing);
-
- FAkWaapiClient(FAkWaapiClient const&) = delete;
- void operator=(FAkWaapiClient const&) = delete;
-
-
-
- enum class WAAPIGetFromOption : AkUInt16
- {
- ID = 0,
- SEARCH,
- PATH,
- OF_TYPE,
- QUERY
- };
- static FString GetFromOptionString(WAAPIGetFromOption from);
- enum class WAAPIGetTransformOption : AkUInt16
- {
- SELECT = 0,
- RANGE,
- WHERE,
- NONE
- };
- static FString GetTransformOptionString(WAAPIGetTransformOption transform);
- enum class WAAPIGetReturnOptionFlag : AkInt64
- {
- ID = 0x1,
- NAME = 0x2,
- NOTES = 0x4,
- TYPE = 0x8,
- PATH = 0x10,
- PARENT = 0x20,
- OWNER = 0x40,
- IS_PLAYABLE = 0x80,
- SHORT_ID = 0x100,
- CATEGORY = 0x200,
- FILEPATH = 0x400,
- WORKUNIT = 0x800,
- CHILDREN_COUNT = 0x1000,
- MUSIC_TRANSITION_ROOT = 0x2000,
- MUSIC_PLAYLIST_ROOT = 0x4000,
- SOUND_ORIGINAL_WAV_FILE_PATH = 0x8000,
- SOUND_CONVERTED_WEM_FILE_PATH = 0x10000,
- SOUNDBANK_BANK_FILE_PATH = 0x20000,
- AUDIO_SOURCE_PLAYBACK_DURATION = 0x40000,
- AUDIO_SOURCE_MAX_DURATION_SOURCE = 0x80000,
- AUDIO_SOURCE_TRIM_VALUES = 0x100000,
- WORKUNIT_IS_DEFAULT = 0x200000,
- WORKUNIT_TYPE = 0x400000,
- WORKUNIT_IS_DIRTY = 0x800000,
- NUM_FLAGS = 0x19
- };
-
-
-
-
- static TSharedRef<FJsonObject> CreateWAAPIGetArgumentJson(WAAPIGetFromOption in_FromOption, TArray<TSharedPtr<FJsonValue>> in_FromItems,
- WAAPIGetTransformOption in_TransformOption = WAAPIGetTransformOption::NONE,
- TArray<TSharedPtr<FJsonValue>> in_TransformItems = TArray<TSharedPtr<FJsonValue>>());
-
- static TSharedRef<FJsonObject> CreateWAAPIGetReturnOptionsJson(AkInt64 ReturnOptions);
- static WAAPIGetReturnOptionFlag GetReturnOptionFlagValue(int in_iFlagIndex);
-
- static FString GetReturnOptionString(WAAPIGetReturnOptionFlag returnOption);
-
- static bool WAAPIGet(WAAPIGetFromOption inFromField,
- TArray<TSharedPtr<FJsonValue>> inFromItems,
- AkInt64 inReturnOptionsFlags,
- TSharedPtr<FJsonObject>& outJsonResult,
- WAAPIGetTransformOption inTransformField = WAAPIGetTransformOption::NONE,
- TArray<TSharedPtr<FJsonValue>> inTransformItems = TArray<TSharedPtr<FJsonValue>>(),
- bool in_bSilenceLog = false);
-
- static bool GetGUIDForObjectOfTypeWithName(FGuid& io_GUID, const FString& in_sTypeName, const FString& in_sName);
-
- static void SaveProject();
-
-
-
- struct WAAPIStrings
- {
- static const FString BACK_SLASH;
- static const FString ID;
- static const FString RETURN;
- static const FString PATH;
- static const FString FILEPATH;
- static const FString FROM;
- static const FString NAME;
- static const FString TYPE;
- static const FString CHILDREN;
- static const FString CHILDREN_COUNT;
- static const FString ANCESTORS;
- static const FString DESCENDANTS;
- static const FString WOKUNIT_TYPE;
- static const FString FOLDER;
- static const FString PHYSICAL_FOLDER;
- static const FString SEARCH;
- static const FString PARENT;
- static const FString SELECT;
- static const FString TRANSFORM;
- static const FString OBJECT;
- static const FString OBJECTS;
- static const FString VALUE;
- static const FString COMMAND;
- static const FString TRANSPORT;
- static const FString ACTION;
- static const FString PLAY;
- static const FString STOP;
- static const FString STOPPED;
- static const FString DISPLAY_NAME;
- static const FString DELETE_ITEMS;
- static const FString DRAG_DROP_ITEMS;
- static const FString UNDO;
- static const FString REDO;
- static const FString STATE;
- static const FString OF_TYPE;
- static const FString PROJECT;
- static const FString PROPERTY;
- static const FString VOLUME;
- static const FString FIND_IN_PROJECT_EXPLORER;
- static const FString TRIMMED_DURATION;
- };
- struct WwiseTypeStrings
- {
- static const FString SOUND;
- static const FString WORKUNIT;
- };
- struct AudioPeaksStrings
- {
- struct Args
- {
- static const FString OBJECT;
- static const FString NUM_PEAKS;
- static const FString TIME_FROM;
- static const FString TIME_TO;
- static const FString CROSS_CHANNEL_PEAKS;
- };
- struct Results
- {
- static const FString PEAKS_BINARY;
- static const FString MAX_ABS_VALUE;
- static const FString PEAKS_ARRAY_LENGTH;
- static const FString PEAKS_DATA_SIZE;
- };
- };
- struct PropertyChangedStrings
- {
- struct RequiredOptions
- {
- static const FString OBJECT;
- static const FString PROPERTY;
- };
- struct OptionalOptions
- {
- static const FString RETURN;
- static const FString PLATFORM;
- };
- };
- struct AudioSourceProperties
- {
- static const FString TRIM_END;
- static const FString TRIM_BEGIN;
- };
- struct PlaybackDurationStrings
- {
- static const FString MIN;
- static const FString MAX;
- static const FString TYPE;
- };
- struct TrimValuesStrings
- {
- static const FString TRIM_BEGIN;
- static const FString TRIM_END;
- };
- bool bIsWrongProjectLoaded = false;
- private:
-
- FAkWaapiClient();
-
- static bool CheckProjectLoaded();
- struct FAkWaapiClientImpl* m_Impl;
- };
|