gpt4 book ai didi

c++ - C++ 中的同步 HTTP 请求

转载 作者:行者123 更新时间:2023-11-28 06:19:22 25 4
gpt4 key购买 nike

我已经设置了一个使用 PHP 脚本和 MySQL 数据库运行的多人游戏专用服务器。我正在尝试通过 HTTP 访问服务器以发送/接收游戏数据,从获取服务器状态这样简单的事情开始。

我已经能够使用 Unreal Doc 的 IHttpRequest 成功联系到服务器:

void ANetwork::getContentsOfURL(FString URL)
{
serverResponse = NULL;

TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
HttpRequest->SetURL(URL);
HttpRequest->SetVerb(TEXT("POST"));

//Creating JSON Object
FString json = "{\"auth\":\"" + authenticator = "\"";

json += "}";

HttpRequest->SetContentAsString(json);
HttpRequest->OnProcessRequestComplete().BindUObject(this, &ANetwork::OnResponseReceived);
HttpRequest->ProcessRequest();
}

void ANetwork::OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, Response->GetContentAsString());

if (!Response.IsValid())
{
serverResponse = "FAIL";
}
else
{
serverResponse = Response->GetContentAsString();
}
}

这会将正确的代码回显给调试器,所以我知道服务器正在工作并且代码实际上正在获取它需要获取的内容。但是,我需要能够将 HTTP 响应作为 FString 获取并将其返回给调用方,以便我可以在游戏中使用它。现在这个方法是异步的,这会阻止我返回响应。

如何发出同步 HTTP 请求,以便将响应作为字符串返回给调用者?

FString ANetwork::getContentsOfURL(FString URL)

最佳答案

在 getContentsOfUrl 的底部重置(取消信号)事件。等待它发出信号。从 OnResponseReceived 发出事件信号。

创建事件 https://msdn.microsoft.com/en-us/library/windows/desktop/ms682396(v=vs.85).aspx重置事件 https://msdn.microsoft.com/en-us/library/windows/desktop/ms685081(v=vs.85).aspx WaitForSingleObject https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx SetEvent(发出信号)https://msdn.microsoft.com/en-us/library/windows/desktop/ms686211(v=vs.85).aspx

HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// bottom getCongentsOfUrl:
ResetEvent(hEvent); // optional because inital state is unsignaled
WaitForSingleObject(hEvent);

// OnResponseReceived
SetEvent(hEvent)

关于c++ - C++ 中的同步 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com