KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
ANetworkTesterActor.cpp
이 파일의 문서화 페이지로 가기
1// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
8
9#include "APlayerControl.h"
11#include "GameLogging.h"
12#include "NetworkData.h"
13#include "UDialogManager.h"
14#include "ULingoGameHelper.h"
16#include "UPopupManager.h"
17#include "UPopup_Interview.h"
19#include "UPopup_MsgBox.h"
21#include "Engine/Engine.h"
22#include "Onepiece/Onepiece.h"
23
25{
26 PrimaryActorTick.bCanEverTick = false;
27
28 VoiceConversationSystem = CreateDefaultSubobject<UVoiceConversationSystem>(TEXT("VoiceConversationSystem"));
29}
30
31// =============================================================================
32// User API Tests
33// =============================================================================
34
36{
37 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
38 {
39 PRINTLOG(TEXT("[TEST] RequestUserRegister - UserName: %s"), *UserName);
40 KLingoNetwork->RequestUserRegister(
42 FResponseUserRegisterDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseUserRegister)
43 );
44 }
45 else
46 {
47 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
48 }
49}
50
52{
53 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
54 {
55 PRINTLOG(TEXT("[TEST] RequestUserToken - UserName: %s"), *UserName);
56 KLingoNetwork->RequestUserToken(
58 FResponseUserTokenDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseUserToken)
59 );
60 }
61 else
62 {
63 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
64 }
65}
66
68{
69 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
70 {
71 PRINTLOG(TEXT("[TEST] RequestUserMe"));
72 KLingoNetwork->RequestUserMe( FResponseUserMeDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseUserMe) );
73 }
74 else
75 {
76 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
77 }
78}
79
81{
82 if (bWasSuccessful)
83 {
84 PRINTLOG(TEXT("--- User Register SUCCESS ---"));
85 ResponseData.PrintData();
86 }
87 else
88 {
89 PRINTLOG(TEXT("--- User Register FAILED ---"));
90 }
91}
92
93void ANetworkTesterActor::OnResponseUserToken(FResponseUserToken& ResponseData, bool bWasSuccessful)
94{
95 if (bWasSuccessful)
96 {
97 PRINTLOG(TEXT("--- User Token SUCCESS ---"));
99 }
100 else
101 {
102 PRINTLOG(TEXT("--- User Token FAILED ---"));
103 }
104}
105
106void ANetworkTesterActor::OnResponseUserMe(FResponseUserMe& ResponseData, bool bWasSuccessful)
107{
108 if (bWasSuccessful)
109 {
110 PRINTLOG(TEXT("--- User Me SUCCESS ---"));
111
112 if ( auto PC = ULingoGameHelper::GetPlayerControl(GetWorld()) )
113 PC->Server_SetUserInfo(ResponseData);
114 }
115 else
116 {
117 PRINTLOG(TEXT("--- User Me FAILED ---"));
118 }
119}
120
121// =============================================================================
122// New API Tests
123// =============================================================================
125{
126 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
127 {
128 PRINTLOG(TEXT("[TEST] RequestOcrExtract - ImagePath: %s"), *OcrImagePath);
129 // KLingoNetwork->RequestOcrExtract(
130 // OcrImagePath,
131 // FResponseOcrExtractDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseOcrExtract)
132 // );
133 }
134 else
135 {
136 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
137 }
138}
139
141{
142 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
143 {
144 PRINTLOG(TEXT("[TEST] RequestSpeakingQuestions - Question :%s, AudioPath: %s"), *SpeakingQuestion, *SpeakingAudioPath);
145 KLingoNetwork->RequestSpeakingJudges(
147 FResponseSpeakingJudesDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseSpeakingJudes)
148 );
149 }
150 else
151 {
152 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
153 }
154}
155
157{
158 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
159 {
160 PRINTLOG(TEXT("[TEST] RequestListenAudio - AudioText: %s"), *AudioText);
161 KLingoNetwork->RequestListenAudio(
162 AudioText,
163 FResponseListenAudioDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseListenAudio)
164 );
165 }
166 else
167 {
168 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
169 }
170}
171
173{
174 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
175 {
176 PRINTLOG(TEXT("[TEST] RequestInterviewHello"));
177 KLingoNetwork->RequestInterviewHello(
178 FResponseInterviewHelloDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseInterviewHello)
179 );
180 }
181 else
182 {
183 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
184 }
185}
186
188{
189 if (bWasSuccessful)
190 {
191 PRINTLOG(TEXT("--- OCR Extract SUCCESS ---"));
192 ResponseData.PrintData();
193 // PRINTLOG(TEXT("Success: %s"), ResponseData.success ? TEXT("true") : TEXT("false"));
194 // PRINTLOG(TEXT("Extracted Text: %s"), *ResponseData.extracted_text);
195 }
196 else
197 {
198 PRINTLOG(TEXT("--- OCR Extract FAILED ---"));
199 }
200}
201
203{
204 if (bWasSuccessful)
205 {
206 PRINTLOG(TEXT("--- Speaking Questions SUCCESS ---"));
207 ResponseData.PrintData();
208 UDialogManager::Get(GetWorld())->ShowToast(*ResponseData.final_feedback);
209 }
210 else
211 {
212 PRINTLOG(TEXT("--- Speaking Questions FAILED ---"));
213 }
214}
215
217{
218 if (bWasSuccessful)
219 {
220 PRINTLOG(TEXT("--- Listen Audio SUCCESS ---"));
221 ResponseData.PrintData();
222
223 UDialogManager::Get(GetWorld())->ShowToast(*ResponseData.audio_text);
224 VoiceConversationSystem->PlayVoiceAudio(ResponseData.audio_base64);
225 }
226 else
227 {
228 PRINTLOG(TEXT("--- Listen Audio FAILED ---"));
229 }
230}
231
232
234{
235 if (bWasSuccessful)
236 {
237 PRINTLOG(TEXT("--- InterViewHello Questions SUCCESS ---"));
238 ResponseData.PrintData();
239
240 if (auto Popup = UPopupManager::ShowPopupAs<UPopup_InterviewHello>(GetWorld(), EPopupType::InterviewHello))
241 {
242 Popup->InitPopup(ResponseData);
243 }
244 }
245 else
246 {
247 PRINTLOG(TEXT("--- InterViewHello Questions FAILED ---"));
248 }
249}
250
251
252// =============================================================================
253// Chat Answers API Tests
254// =============================================================================
255
257{
258 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
259 {
260 PRINTLOG(TEXT("[TEST] RequestChatAnswers - Context: %s, Question: %s"), *ChatContext, *ChatQuestion);
261 KLingoNetwork->RequestChatQuestion(
264 FResponseChatAnswersDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseChatAnswers)
265 );
266 }
267 else
268 {
269 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
270 }
271}
272
274{
275 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
276 {
277 PRINTLOG(TEXT("[TEST] RequestChatAnswersWithAudio - Context: %s, AudioPath: %s"), *ChatContext, *ChatAudioPath);
278 KLingoNetwork->RequestChatAudio(
281 FResponseChatAnswersDelegate::CreateUObject(this, &ANetworkTesterActor::OnResponseChatAnswers)
282 );
283 }
284 else
285 {
286 PRINTLOG(TEXT("UKLingoNetworkSystem not found!"));
287 }
288}
289
291{
292 if (bWasSuccessful)
293 {
294 PRINTLOG(TEXT("--- Chat Answers SUCCESS ---"));
295
296 // AI 응답을 Bot 정보로 채팅에 표시
297 if (auto* GS = GetWorld()->GetGameState<ALingoGameState>())
298 {
299 FText AIAnswer = FText::FromString(ResponseData.answer);
300 // Bot은 PlayerIndex -1 사용
301 GS->MulticastRPC_SendChat(GS->GetBotInfo(), AIAnswer, DefineData::BotID);
302
303 PRINTLOG(TEXT("[AI Chat] AI Answer: %s"), *ResponseData.answer);
304 }
305 }
306 else
307 {
308 PRINTLOG(TEXT("--- Chat Answers FAILED ---"));
309 }
310}
네트워크 진단용 테스트 액터를 선언합니다.
APlayerControl 선언에 대한 Doxygen 주석을 제공합니다.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
네트워크 요청과 응답에 사용되는 구조체 및 설정을 정의합니다.
UDialogManager 클래스를 선언합니다.
KLingo API 요청을 담당하는 서브시스템을 선언합니다.
STT·GPT·TTS 파이프라인을 연결하는 음성 대화 컴포넌트를 선언합니다.
FString ChatContext
Chat 답변 요청 테스트용 컨텍스트입니다.
void RequestOcrExtract()
OCR 텍스트 추출 요청을 전송합니다 (POST /writes/ocr/extract).
TObjectPtr< class UVoiceConversationSystem > VoiceConversationSystem
음성 대화 시스템 참조입니다.
void OnResponseInterviewHello(FResponseInterviewHello &ResponseData, bool bWasSuccessful)
FString OcrImagePath
OCR 테스트용 이미지 파일 경로입니다 (프로젝트 루트 기준).
void OnResponseUserToken(FResponseUserToken &ResponseData, bool bWasSuccessful)
void OnResponseChatAnswers(FResponseChatAnswers &ResponseData, bool bWasSuccessful)
void RequestListenAudio()
Listen 음성 생성 요청을 전송합니다.
void RequestChatAnswers()
Chat 답변 요청을 전송합니다 (텍스트 질문).
void RequestChatAnswersWithAudio()
Chat 답변 요청을 전송합니다 (음성 질문).
FString SpeakingAudioPath
Speaking 테스트용 오디오 파일 경로입니다 (프로젝트 루트 기준).
void RequestUserToken()
OAuth2 토큰 발급 요청을 전송합니다 (POST /users/token).
FString ChatQuestion
Chat 답변 요청 테스트용 질문입니다.
FString ChatAudioPath
Chat 답변 요청 테스트용 오디오 파일 경로입니다.
FString AudioText
TTS 테스트용 입력 텍스트입니다.
void OnResponseListenAudio(FResponseListenAudio &ResponseData, bool bWasSuccessful)
FString UserName
테스트에 사용할 사용자 이름입니다.
void RequestInterviewHello()
인터뷰 시작 요청을 전송합니다.
ANetworkTesterActor()
기본 컴포넌트를 구성하는 생성자입니다.
void OnResponseSpeakingJudes(FResponseSpeakingJudes &ResponseData, bool bWasSuccessful)
void RequestUserRegister()
사용자 등록 요청을 전송합니다 (POST /users/register).
void RequestUserMe()
현재 사용자 정보 조회 요청을 전송합니다 (GET /users/me).
FString SpeakingQuestion
Speaking 테스트용 질문 텍스트입니다.
void OnResponseOcrExtract(FResponseWriteSubmit &ResponseData, bool bWasSuccessful)
void OnResponseUserRegister(FResponseUserRegister &ResponseData, bool bWasSuccessful)
void OnResponseUserMe(FResponseUserMe &ResponseData, bool bWasSuccessful)
void RequestSpeakingQuestions()
Speaking 답변 요청을 전송합니다 (POST /speakings/questions).
static class APlayerControl * GetPlayerControl(const UObject *WorldContextObject)
static const int32 BotID
Definition Onepiece.h:56
Chat Answers 응답 구조체입니다.
void PrintData() const
디버그 로그에 응답 내용을 출력합니다.
void PrintData() const
디버그 로그에 응답 내용을 출력합니다.
TArray< uint8 > audio_base64
Speaking Questions 응답 구조체입니다.
void PrintData() const
디버그 로그에 응답 내용을 출력합니다.
void PrintData() const
디버그 로그에 응답 내용을 출력합니다.
Write Submit 응답 구조체입니다.
void PrintData() const
디버그 로그에 응답 내용을 출력합니다.