在ue4中,探索正则表达式的好处

  1. 发起http get请求:
void ServersAddressHelper::HttpGetReq(const FString url, const TFunction<void(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)>& Complate)
{
    
    
	auto Http = &FHttpModule::Get();
	TSharedRef<IHttpRequest> Request = Http->CreateRequest();
	Request->SetURL(url);
	Request->SetVerb("GET");
	Request->SetHeader(TEXT("User-Agent"), "X-UnrealEngine-Agent");
	Request->SetHeader("Content-Type", TEXT("application/json"));
	Request->OnProcessRequestComplete().BindLambda(Complate);
	Request->ProcessRequest();
}
  1. 分析HttpGetReq:在该函数中,传入了2个参数,一个是URL,一个是TFunction的模板函数类型【Complate】;并且Request->OnProcessRequestComplete绑定了【Complate】,意味着,当请求完成时,Complate将会被调用,同时说明,调用ServersAddressHelper::HttpGetReq对于不同的请求,对于请求结果可以通过自定义函数【Complate】,来实现不同的逻辑;从而,把http get请求,接口化,即所有httpGet请求,都可以调用ServersAddressHelper::HttpGetReq,通过定义函数或正则表达式,来实现对请求结果的不同处理
  2. 使用http get请求:
void ServersAddressHelper::requestPullHallServerList(const TFunction<void(const TArray<FGateServerFile>&)> call)
{
    
    
	httpGetReq(
		UACSettingForLogin::getInstance()->pullServerListUrlForDev,

		//! call
		[call](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) {
    
    

		TArray<FGateServerFile> result;
		if (bWasSuccessful && Response && EHttpResponseCodes::IsOk(Response->GetResponseCode()))
		{
    
    
			FString ServerContent = Response->GetContentAsString();
			TArray<FString> arrayServer;
			ServerContent.ParseIntoArray(arrayServer, TEXT("\n"));
			for (FString temp : arrayServer)
			{
    
    
				//对内容进行解析
			}
		}
		call(result);
	});
}
  1. 分析requestPullHallServerList:在该函数中,调用httpGetReq,利用正则表达式,实现了在哪里请求,就在哪里处理结果;好处非常明显,不用额外声明函数去处理结果,也不用跳转查看处理结果的实现。还不用担心别人调用你处理特殊请求的内容,因为没有声明,且正则表达式在调用的函数作用域完成,别人就无法使用
  2. 对于http get的复用用法,还可以通过声明函数接口,通过c++继承的方式,去重写请求完成后的方法,这也有2种方式:
    第一种:直接在真正的逻辑类中,继承接口类【通常是多重继承,因为你的逻辑实现类可能还有基类】,在真正逻辑类中重载实现处理完成get请求的逻辑;
    第二种,不在真正逻辑类中,继承;重新声明一个请求类【ClassHttpGet】,并继承http get接口类;然后在声明的类【ClassHttpGet】中,重载实现处理完成get请求的逻辑,可以在真正的逻辑类中,实例化【ClassHttpGet】,也可以专门声明一个网络管理类
    PS:提供了3中方式,哪个好,每个人心中都有选择
  3. 总结:如果想对于某个逻辑函数,需要在调用的时候处理不同的逻辑,且处理的逻辑无法被其他地方复用或者不想暴露调用时,处理逻辑的内容;正则表达式,配合带有类似函数指针的函数,这将时很完美处理的方法

猜你喜欢

转载自blog.csdn.net/qq_21919621/article/details/108546274