Network total reforge. Team-List and Race-Data handled
This commit is contained in:
13
Source/DTFluxNetwork/Private/Clients/DTFluxHttpClient.cpp
Normal file
13
Source/DTFluxNetwork/Private/Clients/DTFluxHttpClient.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Clients/DTFluxHttpClient.h"
|
||||
|
||||
|
||||
FDTFluxHttpClient::FDTFluxHttpClient()
|
||||
{
|
||||
}
|
||||
|
||||
FDTFluxHttpClient::~FDTFluxHttpClient()
|
||||
{
|
||||
}
|
||||
141
Source/DTFluxNetwork/Private/Clients/DTFluxWebSocketClient.cpp
Normal file
141
Source/DTFluxNetwork/Private/Clients/DTFluxWebSocketClient.cpp
Normal file
@ -0,0 +1,141 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Clients/DTFluxWebSocketClient.h"
|
||||
|
||||
#include "DTFluxNetworkModule.h"
|
||||
#include "IWebSocket.h"
|
||||
#include "WebSocketsModule.h"
|
||||
#include "Utils/WebSocketStatusCode.h"
|
||||
|
||||
int32 FDTFluxWebSocketClient::LastId = 0;
|
||||
FName FDTFluxWebSocketClient::DefaultId = FName("DTFluxWsClient");
|
||||
|
||||
FDTFluxWebSocketClient::FDTFluxWebSocketClient()
|
||||
{
|
||||
ClientId = FName("DTFluxWsClient_" + FDTFluxWebSocketClient::LastId);
|
||||
FDTFluxWebSocketClient::LastId++;
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::Connect()
|
||||
{
|
||||
Ws = FWebSocketsModule::Get().CreateWebSocket(WsAddress);
|
||||
if(Ws.IsValid())
|
||||
{
|
||||
Bind_Internal();
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Connecting"))
|
||||
Ws->Connect();
|
||||
}
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::Reconnect()
|
||||
{
|
||||
if(Ws.IsValid())
|
||||
{
|
||||
if(Ws->IsConnected())
|
||||
{
|
||||
Ws->Close();
|
||||
Ws->Connect();
|
||||
return;
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Connecting"))
|
||||
Ws->Connect();
|
||||
return;
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Error, TEXT("Undelying IWebSocket is Invalid, Cannot Connect !!!"))
|
||||
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::Disconnect()
|
||||
{
|
||||
if(Ws.IsValid())
|
||||
{
|
||||
if(Ws->IsConnected())
|
||||
{
|
||||
EWebSocketCloseCode ReasonCode = EWebSocketCloseCode::Normal;
|
||||
Ws->Close(static_cast<int32>(ReasonCode), FString("Normal Disconnect, BYE !!!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FDTFluxWsClientError FDTFluxWebSocketClient::GetError()
|
||||
{
|
||||
FDTFluxWsClientError Error;
|
||||
if(Errors.Num() > 0)
|
||||
{
|
||||
return Errors.Pop(EAllowShrinking::Yes);
|
||||
}
|
||||
return FDTFluxWsClientError::CreateNoError(ClientId);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::ClearErrors()
|
||||
{
|
||||
Errors.Empty();
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::AddError(const FDTFluxWsClientError Error)
|
||||
{
|
||||
Errors.Add(Error);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::Send(const FString& Message) const
|
||||
{
|
||||
Ws->Send(Message);
|
||||
}
|
||||
|
||||
|
||||
void FDTFluxWebSocketClient::Bind_Internal()
|
||||
{
|
||||
Ws->OnConnected().AddRaw(this, &FDTFluxWebSocketClient::OnConnected_Internal);
|
||||
Ws->OnClosed().AddRaw(this, &FDTFluxWebSocketClient::OnClientClosed_Internal);
|
||||
Ws->OnConnectionError().AddRaw(this, &FDTFluxWebSocketClient::OnClientError_Internal);
|
||||
Ws->OnMessage().AddRaw(this, &FDTFluxWebSocketClient::OnClientReceiveMessage_Internal);
|
||||
Ws->OnBinaryMessage().AddRaw(this, &FDTFluxWebSocketClient::OnClientReceiveBinaryMessage_Internal);
|
||||
Ws->OnMessageSent().AddRaw(this, &FDTFluxWebSocketClient::OnMessageSent_Internal);
|
||||
Ws->OnRawMessage().AddRaw(this, &FDTFluxWebSocketClient::OnClientReceiveRawMessage_Internal);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnConnected_Internal()
|
||||
{
|
||||
DTFluxWsClientConnectedEvent.Broadcast();
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnClientClosed_Internal(int32 StatusCode, const FString& Reason, bool bWasClean)
|
||||
{
|
||||
DTFluxWsClientClosedEvent.Broadcast(StatusCode, Reason, bWasClean);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnClientError_Internal(const FString& ErrorMessage)
|
||||
{
|
||||
DTFluxWsClientConnectionErrorEvent.Broadcast(ErrorMessage);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnClientReceiveMessage_Internal(const FString& Message)
|
||||
{
|
||||
DTFluxWsClientMessageEvent.Broadcast(Message);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnClientReceiveBinaryMessage_Internal(const void* Data, SIZE_T Size, bool bIsLastFragment)
|
||||
{
|
||||
DTFluxWsClientBinaryMessageEvent.Broadcast(Data,Size, bIsLastFragment);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnClientReceiveRawMessage_Internal(const void* Data, SIZE_T Size, SIZE_T BytesRemaining)
|
||||
{
|
||||
DTFluxWsClientRawMessageEvent.Broadcast(Data, Size, BytesRemaining);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::OnMessageSent_Internal(const FString& MessageString)
|
||||
{
|
||||
DTFluxWsClientMessageSentEvent.Broadcast(MessageString);
|
||||
}
|
||||
|
||||
void FDTFluxWebSocketClient::SendMessage_internal(const FString& Message)
|
||||
{
|
||||
if(Ws.IsValid() && Ws->IsConnected())
|
||||
{
|
||||
Ws->Send(Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
19
Source/DTFluxNetwork/Private/DTFluxNetworkModule.cpp
Normal file
19
Source/DTFluxNetwork/Private/DTFluxNetworkModule.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
#include "DTFluxNetworkModule.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "FDTFluxNetworkModule"
|
||||
|
||||
DTFLUXNETWORK_API DEFINE_LOG_CATEGORY(logDTFluxNetwork);
|
||||
|
||||
void FDTFluxNetworkModule::StartupModule()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void FDTFluxNetworkModule::ShutdownModule()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(FDTFluxNetworkModule, DTFluxNetwork)
|
||||
@ -0,0 +1 @@
|
||||
#include "Struct/DTFluxRaceDataServerResponse.h"
|
||||
@ -0,0 +1,292 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#include "Subsystems/DTFluxNetworkSubsystem.h"
|
||||
|
||||
#include "DTFluxCoreModule.h"
|
||||
#include "DTFluxNetworkModule.h"
|
||||
#include "DTFluxNetworkSettings.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
#include "Clients/DTFluxHttpClient.h"
|
||||
#include "Clients/DTFluxWebSocketClient.h"
|
||||
#include "Struct/DTFluxServerResponseStruct.h"
|
||||
#include "Struct/DTFluxRequestStructs.h"
|
||||
#include "Struct/DTFluxRaceDataServerResponse.h"
|
||||
#include "Struct/DTFluxTeamListServerResponse.h"
|
||||
#include "Types/Struct/DTFluxRaceDataStructs.h"
|
||||
|
||||
|
||||
void UFDTFluxNetworkSubsystem::Connect()
|
||||
{
|
||||
WsClient->SetAddress(ConstructWsAddress(WsSettings.Address, WsSettings.Path, WsSettings.Port));
|
||||
WsClient->Connect();
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::SendRequest(const EDTFluxRequestType RequestType, int InContestId, int InStageId,
|
||||
int InSplitId)
|
||||
{
|
||||
FString Message;
|
||||
switch (RequestType)
|
||||
{
|
||||
case EDTFluxRequestType::ContestRanking:
|
||||
FJsonObjectConverter::UStructToJsonObjectString(FDTFluxContestRankingRequest(InContestId), Message);
|
||||
break;
|
||||
case EDTFluxRequestType::StageRanking:
|
||||
FJsonObjectConverter::UStructToJsonObjectString(FDTFluxStageRankingRequest(InContestId, InStageId), Message);
|
||||
break;
|
||||
case EDTFluxRequestType::SplitRanking:
|
||||
FJsonObjectConverter::UStructToJsonObjectString(FDTFluxSplitRankingRequest(InContestId, InStageId, InSplitId), Message);
|
||||
break;
|
||||
case EDTFluxRequestType::TeamList:
|
||||
FJsonObjectConverter::UStructToJsonObjectString(FDTFluxTeamListRequest(), Message);
|
||||
break;
|
||||
case EDTFluxRequestType::RaceData:
|
||||
FJsonObjectConverter::UStructToJsonObjectString(FDTFluxRaceDataRequest(), Message);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
//Dirty trick to fix Case
|
||||
Message = Message.Replace(TEXT("Id"),TEXT( "ID"), ESearchCase::CaseSensitive);
|
||||
UE_LOG(logDTFluxCore, Warning, TEXT("Sending Request %s"), *Message);
|
||||
SendMessage(Message);
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::SendMessage(const FString& Message)
|
||||
{
|
||||
WsClient->Send(Message);
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
||||
{
|
||||
Super::Initialize(Collection);
|
||||
FDTFluxCoreModule& DTFluxCore = FModuleManager::Get().LoadModuleChecked<FDTFluxCoreModule>("DTFluxCore");
|
||||
FString StatusString = UEnum::GetValueAsString(WsStatus);
|
||||
UE_LOG(logDTFluxNetwork, Log, TEXT("Status is %s"), *StatusString);
|
||||
UDTFluxNetworkSettings* NetworkSettings = GetMutableDefault<UDTFluxNetworkSettings>();
|
||||
UDTFluxNetworkSettings::GetWebSocketSettings(NetworkSettings, WsSettings);
|
||||
UDTFluxNetworkSettings::GetHTTPSettings(NetworkSettings, HttpSettings);
|
||||
WsClient = MakeShareable<FDTFluxWebSocketClient>(new FDTFluxWebSocketClient());
|
||||
HttpClient = MakeShareable<FDTFluxHttpClient>(new FDTFluxHttpClient());
|
||||
RegisterWebSocketEvents();
|
||||
RegisterHttpEvents();
|
||||
#if WITH_EDITOR
|
||||
NetworkSettings->OnDTFluxWebSocketSettingsChanged.AddUFunction(this, FName("WsSettingsChanged"));
|
||||
NetworkSettings->OnDTFluxHttpSettingsChanged.AddUFunction(this, FName("HttpSettingsChanged"));
|
||||
#endif
|
||||
if(WsSettings.bShouldConnectAtStartup)
|
||||
{
|
||||
WsClient->SetAddress(ConstructWsAddress(WsSettings.Address, WsSettings.Path, WsSettings.Port));
|
||||
WsClient->Connect();
|
||||
}
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::Deinitialize()
|
||||
{
|
||||
Super::Deinitialize();
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::WsSettingsChanged(const FDTFluxWsSettings& NewWsSettings)
|
||||
{
|
||||
// TODO Implement a ClientSelector To retrieve impacted WsClients and populate changes or maybe create a delegate
|
||||
bool bNeedsReload = WsSettings != NewWsSettings;
|
||||
|
||||
WsSettings = NewWsSettings;
|
||||
// UE_LOG(logDTFluxNetwork, Warning, TEXT("WSocket Settings Changed \n\t Address : %s Path : %s Port : %i\n\tbShouldConnectAtStatup : %s, bShouldAutoReconnectOnClosed %s, bShouldAutoReconnectOnError %s"),
|
||||
// *NewWsSettings.Address, *NewWsSettings.Path, NewWsSettings.Port,
|
||||
// NewWsSettings.bShouldConnectAtStartup ? TEXT("True") : TEXT("False"),
|
||||
// NewWsSettings.bShouldAutoReconnectOnClosed ? TEXT("True") : TEXT("False"),
|
||||
// NewWsSettings.bShouldAutoReconnectOnError ? TEXT("True") : TEXT("False") );
|
||||
if( bNeedsReload || WsSettings.bShouldConnectAtStartup)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("WSocket Settings needs Reloding client"))
|
||||
ReconnectWs(FName("Ws_Client_0"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UFDTFluxNetworkSubsystem::HttpSettingsChanged(const FDTFluxHttpSettings& NewHttpSettings)
|
||||
{
|
||||
// TODO Implement a ClientSelector To retrieve impacted HttpClients and populate changes or maybe create a delegate
|
||||
HttpSettings = NewHttpSettings;
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::ReconnectWs(const FName WsClientId)
|
||||
{
|
||||
FString NewAddress = ConstructWsAddress(WsSettings.Address, WsSettings.Path, WsSettings.Port);
|
||||
WsClient->SetAddress(NewAddress);
|
||||
WsClient->Reconnect();
|
||||
}
|
||||
void UFDTFluxNetworkSubsystem::ReconnectHttp(const FName WsClientId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::RegisterWebSocketEvents()
|
||||
{
|
||||
OnWsConnectedEventDelegateHandle =
|
||||
WsClient->RegisterConnectedEvent().AddUObject(this, &UFDTFluxNetworkSubsystem::OnWebSocketConnected_Subsystem);
|
||||
OnWsConnectionErrorEventDelegateHandle =
|
||||
WsClient->RegisterConnectionError()
|
||||
.AddUObject(this, &UFDTFluxNetworkSubsystem::OnWebSocketConnectionError_Subsystem);
|
||||
OnWsClosedEventDelegateHandle =
|
||||
WsClient->RegisterClosedEvent()
|
||||
.AddUObject(this, &UFDTFluxNetworkSubsystem::OnWebSocketClosedEvent_Subsystem);
|
||||
OnWsMessageEventDelegateHandle =
|
||||
WsClient->RegisterMessageEvent()
|
||||
.AddUObject(this, &UFDTFluxNetworkSubsystem::OnWebSocketMessageEvent_Subsystem);
|
||||
OnWsMessageSentEventDelegateHandle =
|
||||
WsClient->RegisterMessageSentEvent()
|
||||
.AddUObject(this, &UFDTFluxNetworkSubsystem::OnWebSocketMessageSentEvent_Subsystem);
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::RegisterHttpEvents()
|
||||
{
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::UnregisterWebSocketEvents()
|
||||
{
|
||||
if(OnWsConnectedEventDelegateHandle.IsValid())
|
||||
{
|
||||
WsClient->UnregisterConnectedEvent().Remove(OnWsConnectedEventDelegateHandle);
|
||||
}
|
||||
if(OnWsConnectionErrorEventDelegateHandle.IsValid())
|
||||
{
|
||||
WsClient->UnregisterConnectionError();
|
||||
}
|
||||
if(OnWsClosedEventDelegateHandle.IsValid())
|
||||
{
|
||||
WsClient->UnregisterClosedEvent();
|
||||
}
|
||||
if(OnWsMessageEventDelegateHandle.IsValid())
|
||||
{
|
||||
WsClient->UnregisterMessageEvent();
|
||||
}
|
||||
if(OnWsMessageSentEventDelegateHandle.IsValid())
|
||||
{
|
||||
WsClient->UnregisterRawMessageEvent();
|
||||
}
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::UnregisterHttpEvents()
|
||||
{
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::OnWebSocketConnected_Subsystem()
|
||||
{
|
||||
OnWebSocketConnected.Broadcast();
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws Is Connected with %s"), *WsClient->GetAddress())
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::OnWebSocketConnectionError_Subsystem(const FString& Error)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws Error with %s : %s"), *WsClient->GetAddress(), *Error);
|
||||
if(WsSettings.bShouldAutoReconnectOnError)
|
||||
{
|
||||
WsClient->Reconnect();
|
||||
}
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::OnWebSocketClosedEvent_Subsystem(int32 StatusCode, const FString& Reason, bool bWasClean)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws Error with %s :\n Reason : %s \tStatusCode : %i, bWasClean : %s"),
|
||||
*WsClient->GetAddress(), *Reason, StatusCode, bWasClean ? TEXT("True") : TEXT("False"));
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::OnWebSocketMessageEvent_Subsystem(const FString& MessageString)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws %s :\nMessage Received : %s"), *WsClient->GetAddress(), *MessageString);
|
||||
//Do Something With the message
|
||||
FDTFluxServerResponse Response;
|
||||
Response.ReceivedAt = FDateTime::Now();
|
||||
Response.RawMessage = MessageString;
|
||||
Response.FailureReason = FText::FromString("--");
|
||||
if(FJsonObjectConverter::JsonObjectStringToUStruct(MessageString, &Response, 0, 0, false, &(Response.FailureReason)))
|
||||
{
|
||||
if(Response.Code == -1)
|
||||
{
|
||||
// return DataReceived.Broadcast(Response);
|
||||
if(Response.Type.Contains("race-data"))
|
||||
{
|
||||
|
||||
FDTFluxRaceDataResponse RaceData;
|
||||
FJsonObjectConverter::JsonObjectStringToUStruct<FDTFluxRaceDataResponse>(Response.RawMessage, &RaceData);
|
||||
//convert
|
||||
FDTFluxRaceData RaceDataDefinition;
|
||||
for(auto Contest : RaceData.Datas)
|
||||
{
|
||||
FDTFluxContest NewContest;
|
||||
NewContest.Name = Contest.Name;
|
||||
NewContest.ContestId = Contest.Id;
|
||||
NewContest.Date = Contest.Date;
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Contest %i [%s] Starting at %s \nStages: \n"), Contest.Id, *Contest.Date.ToString(),*Contest.Name);
|
||||
for(auto Stage : Contest.Stages)
|
||||
{
|
||||
FDTFluxStage NewStage;
|
||||
NewStage.StageId = Stage.Id;
|
||||
NewStage.Name = Stage.Name;
|
||||
FString StartTimeFString = FString::Printf(TEXT("%s %s"),
|
||||
*NewContest.Date.ToFormattedString(TEXT("%Y-%m-%d")),
|
||||
*Stage.StartTime
|
||||
);
|
||||
FString EndTimeFString = FString::Printf(TEXT("%s %s"),
|
||||
*NewContest.Date.ToFormattedString(TEXT("%Y-%m-%d")),
|
||||
*Stage.EndTime
|
||||
);
|
||||
FString CutOffFString = FString::Printf(TEXT("%s %s"),
|
||||
*NewContest.Date.ToFormattedString(TEXT("%Y-%m-%d")),
|
||||
*Stage.CutOff
|
||||
);
|
||||
FDateTime::Parse(StartTimeFString, NewStage.StartTime);
|
||||
FDateTime::Parse(EndTimeFString, NewStage.EndTime);
|
||||
FDateTime::Parse(CutOffFString, NewStage.CutOff);
|
||||
NewContest.Stages.Add(NewStage);
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Stage %i [%s]: \nSTartTime Received [%s] -> Datetime[%s], CutOff [%s], EndTime [%s] \n"), Stage.Id, *Stage.Name,
|
||||
*Stage.StartTime, *NewStage.StartTime.ToString(), *NewStage.CutOff.ToString(), *NewStage.EndTime.ToString());
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Contest %i [%s]\nSplits: \n"), Contest.Id, *Contest.Name);
|
||||
for(auto Split: Contest.Splits)
|
||||
{
|
||||
FDTFluxSplit NewSplit;
|
||||
NewSplit.SplitId = Split.Id;
|
||||
NewSplit.Name = Split.Name;
|
||||
NewContest.Splits.Add(NewSplit);
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Split %i [%s]: \n"), Split.Id, *Split.Name);
|
||||
}
|
||||
RaceDataDefinition.Datas.Add(NewContest);
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Sending %i Contests"), RaceDataDefinition.Datas.Num());
|
||||
return OnRaceDataReceived.Broadcast(RaceDataDefinition);
|
||||
}
|
||||
if(Response.Type.Contains("team-list"))
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws Team-List Data"));
|
||||
FDTFluxTeamListDefinition TeamListDefinition;
|
||||
FJsonObjectConverter::JsonObjectStringToUStruct<FDTFluxTeamListDefinition>(Response.RawMessage, &TeamListDefinition);
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws Team-List Data Sent"));
|
||||
return OnTeamListReceived.Broadcast(TeamListDefinition);
|
||||
}
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Error, TEXT("Ws %s :\nMessage Cannot be Parsed\n%s"), *WsClient->GetAddress(), *MessageString);
|
||||
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Error, TEXT("Ws %s :\nMessage Received : %s Cannot be Parsed"), *WsClient->GetAddress(), *MessageString);
|
||||
// return DataReceived.Broadcast(Response);
|
||||
|
||||
}
|
||||
|
||||
void UFDTFluxNetworkSubsystem::OnWebSocketMessageSentEvent_Subsystem(const FString& MessageSent)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("Ws %s :\nMessage Sent: %s"), *WsClient->GetAddress(), *MessageSent);
|
||||
}
|
||||
|
||||
FString UFDTFluxNetworkSubsystem::ConstructWsAddress(const FString& Address, const FString& Path, const int& Port)
|
||||
{
|
||||
FString NewAddress;
|
||||
if( !Address.Contains("ws://") && !Address.Contains("wss://"))
|
||||
{
|
||||
NewAddress += FString("ws://");
|
||||
}
|
||||
NewAddress +=Address + FString(":") + FString::FromInt(Port) + Path;
|
||||
return NewAddress;
|
||||
// UE_LOG(logDTFluxNetwork, Log, TEXT("NewAddress : %s"), *NewAddress);
|
||||
}
|
||||
Reference in New Issue
Block a user