网页浏览总次数

星期一, 七月 01, 2024

UE4联网检查,C++封装好后在蓝图中调用

 UE4联网检查,C++封装好,蓝图调用(不要的命名空间可以删除掉,下面代码没删)


思路:给网站发送一个http请求,看是否能访问成功,成功后传入一个bool参数到蓝图中,再在蓝图中保存结果到一个bool变量,给蓝图使用。


//.h文件

#include "CoreMinimal.h"

#include "Kismet/BlueprintFunctionLibrary.h"

#include "BFL_CommonFunction.generated.h"


UCLASS()

class ZOMBIE_API UBFL_CommonFunction : public UBlueprintFunctionLibrary

{

GENERATED_BODY()

 

public:

UFUNCTION(BlueprintCallable, Category = "FarCheckNet")

static void FarCheckNet();

};

 

//.cpp文件

#include "BFL_CommonFunction.h"

 

#include "A_GameController.h"

#include "kismet/GameplayStatics.h"

#include "BFL_FileControl.h"

 

//检查是否联网

#include "Http.h"

 

//检查是否联网

void UBFL_CommonFunction::FarCheckNet()

{

bool bSuccess = false;//请求结果

 

TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest();

HttpRequest->SetURL("http://www.baidu.com");//后续同时访问国内一个网站 再访问国外一个,任意一个成功则有网,全不成功无网

HttpRequest->SetVerb("GET");

 

//绑定一个Lambda表达式,当请求结果成功或失败后 执行

HttpRequest->OnProcessRequestComplete().BindLambda([&bSuccess](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bHttpRequestSuccess) {

if (bHttpRequestSuccess && Response.IsValid())

{

int32 StatusCode = Response->GetResponseCode();

if (StatusCode == 200)//访问网站成功

{

bSuccess = true;

AA_GameController::SetNetConnectStat(bSuccess);//直接通过类调用静态函数

}

else

{

//UE_LOG(LogTemp, Warning, TEXT("Failed to access the website. Status code: %d"), StatusCode);

AA_GameController::SetNetConnectStat(false);//直接通过类调用静态函数

}

}

else

{

//UE_LOG(LogTemp, Warning, TEXT("Failed to send HTTP request."));

AA_GameController::SetNetConnectStat(false);//直接通过类调用静态函数

}

});

 

HttpRequest->ProcessRequest();//异步请求

 

float StartTime = FPlatformTime::Seconds();

while (!bSuccess)//不成功则每隔0.01f检查一次是否请求完成

{

float CurrentTime = FPlatformTime::Seconds();

if (CurrentTime - StartTime > 2.0f) // 设置最大的等待时间为 2 秒 超过2s算超时,超时算没网络

{

AA_GameController::SetNetConnectStat(false);//直接通过类调用静态函数

break;

}

FPlatformProcess::Sleep(0.01f);

}

}


蓝图中调用


 



蓝图中的SetNetConnectStat函数,通过传入的bool参数,对蓝图中的变量进行设置,后续蓝图中就使用设置好的变量即可。