77 lines
2.4 KiB
C++

// Copyright 2018-current Getnamo. All Rights Reserved
#pragma once
#include "Dom/JsonValue.h"
#include "Dom/JsonObject.h"
#include "sio_client.h"
#include "SIOJsonValue.h"
#include "SIOMessageConvert.generated.h"
DECLARE_LOG_CATEGORY_EXTERN(SocketIO, Log, All);
/**
* All params defining a connection URL.
*/
USTRUCT(BlueprintType)
struct SOCKETIOCLIENT_API FSIOConnectParams
{
GENERATED_USTRUCT_BODY();
/** Default connection address string in form e.g. http://localhost:80. */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
FString AddressAndPort;
/** A map of query parameters to be added to connection url*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
TMap<FString, FString> Query;
/** A map of headers to be added to connection url*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
TMap<FString, FString> Headers;
/** Optional authorization auth:{token:""} to send to the server upon initial connection */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
FString AuthToken;
/** Optional custom auth key:map pairs added, this is separate from token:"" pair */
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
TMap<FString, FString> ExtraAuth;
/** Optional path part of URL string. Default is 'socket.io'*/
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = SocketIOConnectionParams)
FString Path;
FSIOConnectParams()
{
AddressAndPort = TEXT("http://localhost:3000");
Path = TEXT("socket.io");
AuthToken = TEXT("");
}
};
/**
* Static Conversion Utilities
*/
UCLASS()
class SOCKETIOCLIENT_API USIOMessageConvert : public UObject
{
GENERATED_BODY()
public:
//To from:
//sio::message <-> FJsonValue
static TSharedPtr<FJsonValue> ToJsonValue(const sio::message::ptr& Message);
static sio::message::ptr ToSIOMessage(const TSharedPtr<FJsonValue>& JsonValue);
//std::string <-> FString
static std::string StdString(FString UEString);
static FString FStringFromStd(std::string StdString);
static std::map<std::string, std::string> JsonObjectToStdStringMap(TSharedPtr<FJsonObject> InObject);
static TMap<FString, FString> JsonObjectToFStringMap(TSharedPtr<FJsonObject> InObject);
static std::map<std::string, std::string> FStringMapToStdStringMap(const TMap<FString, FString>& InMap);
};