일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- local prediction
- 게임 개발
- 유니티
- Aegis
- unity
- 게임개발
- animation
- Multiplay
- Replication
- UI
- stride
- gameplay effect
- 언리얼엔진
- rpc
- MAC
- gameplay ability system
- nanite
- gas
- listen server
- gameplay tag
- os
- photon fusion2
- network object pooling
- map design
- attribute
- 언리얼 엔진
- CTF
- ability task
- gravity direction
- Unreal Engine
Archives
- Today
- Total
Replicated
[Drag Down] Spring Boot 서버와 연동 - register/login 본문
https://github.com/Coffeecaat/DragDown
GitHub - Coffeecaat/DragDown
Contribute to Coffeecaat/DragDown development by creating an account on GitHub.
github.com
GameInstanceSubsystem 기반으로 만들자
빌드 파일에 HTTP, Json 등 추가
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
#include "DDHttpApiSubsystem.generated.h"
/**
*
*/
UCLASS()
class DRAGDOWN_API UDDHttpApiSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "HTTP API")
void SendRegisterRequest(const FString& Username, const FString& Email, const FString& Password);
UFUNCTION(BlueprintCallable, Category = "HTTP API")
void SendLoginRequest(const FString& Username, const FString& Password);
protected:
void OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
};
void OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
이건 인자 형식 고정이다. 리스폰스 저렇게 받아야 함
// Fill out your copyright notice in the Description page of Project Settings.
#include "Subsystem/DDHttpApiSubsystem.h"
#include "HttpModule.h"
#include "Http.h"
#include "Json.h"
#include "JsonUtilities.h"
#include "DragDown.h"
void UDDHttpApiSubsystem::SendRegisterRequest(const FString& Username, const FString& Email, const FString& Password)
{
FString Url = TEXT("http://localhost:8080/api/auth/register");
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
JsonObject->SetStringField(TEXT("username"), Username);
JsonObject->SetStringField(TEXT("email"), Email);
JsonObject->SetStringField(TEXT("password"), Password);
FString OutputString;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutputString);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(Url);
Request->SetVerb("POST");
Request->SetHeader("Content-Type", "application/json");
Request->SetContentAsString(OutputString);
Request->OnProcessRequestComplete().BindUObject(this, &UDDHttpApiSubsystem::OnResponseReceived);
Request->ProcessRequest();
}
void UDDHttpApiSubsystem::SendLoginRequest(const FString& Username, const FString& Password)
{
FString Url = TEXT("http://localhost:8080/api/auth/login");
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
JsonObject->SetStringField(TEXT("username"), Username);
JsonObject->SetStringField(TEXT("password"), Password);
FString OutputString;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutputString);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(Url);
Request->SetVerb("POST");
Request->SetHeader("Content-Type", "application/json");
Request->SetContentAsString(OutputString);
Request->OnProcessRequestComplete().BindUObject(this, &UDDHttpApiSubsystem::OnResponseReceived);
Request->ProcessRequest();
}
void UDDHttpApiSubsystem::OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
if (bWasSuccessful && Response.IsValid())
{
int32 ResponseCode = Response->GetResponseCode();
FString ResponseContent = Response->GetContentAsString();
UE_LOG(LogDD, Log, TEXT("ResponseCode: %d"), ResponseCode);
UE_LOG(LogDD, Log, TEXT("ResponseContent: %s"), *ResponseContent);
}
else
{
UE_LOG(LogDD, Error, TEXT("Request Failed"));
}
}
토큰 털리기 싫으면 https 써야 하긴 하는데 어차피 테스트용 로컬이라 http로 했다
(아직 클라우드에 배포하진 않아서 그냥 로컬에 세팅하고 진행)
Json 만들고 OutputString에 직렬화
서버는 스프링부트, 데베는 PostgreSQL 쓰고 나중에 Redis 추가될 예정이라 한다
일단 백엔드 뭐가 쓰든 별 상관없이 작동하도록 만들어놔서 이름은 DDHttpApiSubsystem이라 했다
FHttpModule으로 리퀘스트 만들어서 회원가입/로그인 요청을 한다
나중에 디자인하고 일단 기능 구현
레지스터 성공
로그인 및 토큰 받기도 성공
'언리얼 엔진 > Drag Down (캡스톤 디자인)' 카테고리의 다른 글
** [Drag Down] Network Object Pooling (Subsystem + Interface + GameMode + DataAsset) ** (0) | 2025.04.16 |
---|---|
[Drag Down] 눈발사대 눈사람(주기적 발사 장애물) (0) | 2025.04.14 |
[Drag Down] 기본 캐릭터 디자인 (0) | 2025.04.13 |
[Drag Down] 맵 테마2: 해상 암초 (0) | 2025.04.11 |
[Drag Down] 맵 테마1: 서부 마을 (0) | 2025.04.11 |