KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
NetworkData.h
이 파일의 문서화 페이지로 가기
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
5#pragma once
6
7#include "CoreMinimal.h"
9#include "GenericPlatform/GenericPlatformHttp.h"
10#include "Templates/SharedPointer.h"
11#include "FResultStatData.h"
12#include "NetworkData.generated.h"
13
14// =================================================================================
15// Network Configuration
16// 서버 주소와 포트를 설정합니다.
17// =================================================================================
19{
23 static FString GetFullUrl(const FString& Endpoint)
24 {
26 const FServerConfig& Config = GetDefault<UCustomNetworkSettings>()->GetConfig(Mode);
27 return Config.GetFullUrl(Endpoint);
28 }
29
32 static FString GetFullUrlWithQuery(
33 const FString& Endpoint,
34 const TMap<FString, FString>& QueryParams)
35 {
36 FString BaseUrl = GetFullUrl(Endpoint);
37
38 if (QueryParams.Num() == 0)
39 return BaseUrl;
40
41 FString QueryString;
42 bool bFirst = true;
43
44 for (const auto& Pair : QueryParams)
45 {
46 if (Pair.Key.IsEmpty() || Pair.Value.IsEmpty())
47 continue;
48
49 FString EncodedKey = FGenericPlatformHttp::UrlEncode(Pair.Key);
50 FString EncodedValue = FGenericPlatformHttp::UrlEncode(Pair.Value);
51
52 if (bFirst)
53 {
54 QueryString += FString::Printf(TEXT("?%s=%s"), *EncodedKey, *EncodedValue);
55 bFirst = false;
56 }
57 else
58 {
59 QueryString += FString::Printf(TEXT("&%s=%s"), *EncodedKey, *EncodedValue);
60 }
61 }
62
63 return BaseUrl + QueryString;
64 }
65
68 static FString GetSocketURL()
69 {
71 const FServerConfig& Config = GetDefault<UCustomNetworkSettings>()->GetConfig(Mode);
72 return Config.WebSocketUrl;
73 }
74}
75
76namespace RequestAPI
77{
79 static FString Health = FString("/health");
80
81
82 static FString users_register = FString("/users/register");
83 static FString users_token = FString("/users/token");
84 static FString users_me = FString("/users/me");
85
87 static FString writes_submit = FString("/writes/submit");
88
89 static FString listenings_audio = FString("/listenings/audios");
90 static FString speakings_judes = FString("/speakings/judges");
91
92 static FString interview_hello = FString("/interview/hello");
93 static FString interview_answer = FString("/interview/answer/post");
94
96 static FString scenario = FString("/scenario/stages/current");
97
98 static FString read_result = FString("/scenario/stage/result/post");
99 static FString listen_result = FString("/scenario/stage/result/post");
100 static FString speak_result = FString("/scenario/stage/result/post");
101 static FString wriite_result = FString("/scenario/stage/result/post");
102
104 static FString evaluations_rooms = FString("/evaluations/rooms");
105
107 static FString chats_answers = FString("/chats/answers");
108
109 static FString chats_daily = FString("/chats/dailys");
110
111}
112
113
114USTRUCT(BlueprintType)
116{
117 GENERATED_BODY()
118
119 // id : 126
120 UPROPERTY(EditAnywhere, BlueprintReadWrite)
121 int32 Id = 0;
122
123 // type_code : 1
124 UPROPERTY(EditAnywhere, BlueprintReadWrite)
125 int32 TypeCode = 0;
126
127 // "eng":"What do you do on weekends?"
128 UPROPERTY(EditAnywhere, BlueprintReadWrite)
129 FString Eng;
130
131 // "kor":"주말에 보통 무엇을 합니까?"
132 UPROPERTY(EditAnywhere, BlueprintReadWrite)
133 FString Kor;
134
135 // "eng_key":"weekends"
136 UPROPERTY(EditAnywhere, BlueprintReadWrite)
137 FString EngKey;
138
139 // "kor_key":"주말"
140 UPROPERTY(EditAnywhere, BlueprintReadWrite)
141 FString KorKey;
142
143 // "created_at":"2025-11-28T15:51:30.017204"
144 UPROPERTY(EditAnywhere, BlueprintReadWrite)
145 FString CreatedAt;
146};
147
149USTRUCT(BlueprintType)
151{
152 GENERATED_BODY()
153
154 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
155 TArray<FInterviewQuestionData> Question;
156};
157
158
159
160// =================================================================================
161// Common Data Structures
162// =================================================================================
163
165USTRUCT(BlueprintType)
167{
168 GENERATED_BODY()
169
170 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
171 int32 UserIndex = 0;
172
173 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
174 FString Nickname;
175
176 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
177 int32 Gold = 0;
178
179 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
180 int32 Character = -1;
181
182 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
183 int32 CharacterColor = -1;
184
185 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
186 FString UnlockEquip;
187
188 UPROPERTY(BlueprintReadWrite, Category = "PlayerInfo")
189 bool bLogin = false;
190};
191
193USTRUCT(BlueprintType)
195{
196 GENERATED_BODY()
197
198 UPROPERTY(BlueprintReadWrite, Category = "Word")
199 FString Kor;
200
201 UPROPERTY(BlueprintReadWrite, Category = "Word")
202 FString Pronunciation;
203
204 FString ToRichTextString(int32 Index) const;
205};
206
208USTRUCT(BlueprintType)
210{
211 GENERATED_BODY()
212
213 UPROPERTY(BlueprintReadWrite, Category = "Word")
214 FString Kor;
215
216 UPROPERTY(BlueprintReadWrite, Category = "Word")
217 FString Eng;
218
219 UPROPERTY(BlueprintReadWrite, Category = "Word")
220 FString Pronunciation;
221
222 TArray<FPhonemeData> GetPhonemeData() const;
223};
224
225// =================================================================================
226// Read Quest Structures
227// =================================================================================
228
230USTRUCT(BlueprintType)
232{
233 GENERATED_BODY()
234
235 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
236 FString FindSymbol;
237
238 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
239 FString FindColor;
240};
241
243USTRUCT(BlueprintType)
245{
246 GENERATED_BODY()
247
248 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
249 int32 ReadIndex = 0;
250
251 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
252 int32 Difficulty = 0;
253
254 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
255 TArray<FReadTargetData> QuestTarget;
256
257 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
258 int32 CorrectAnswerIndex = 0;
259
260 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
261 FWordData WordData1;
262
263 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
264 FWordData WordData2;
265
266 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
267 FString FullData;
268};
269
270// =================================================================================
271// Listen Quest Structures
272// =================================================================================
273
275USTRUCT(BlueprintType)
277{
278 GENERATED_BODY()
279
280 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
281 FString FindTarget1;
282
283 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
284 FString FindTarget2;
285};
286
288USTRUCT(BlueprintType)
290{
291 GENERATED_BODY()
292
293 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
294 int32 ListenIndex = 0;
295
296 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
297 int32 Difficulty = 0;
298
299 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
300 TArray<FListenTargetData> QuestTarget;
301
302 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
303 int32 CorrectAnswerIndex = 0;
304
305 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
306 FWordData WordData1;
307
308 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
309 FWordData WordData2;
310
311 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
312 FString FullData;
313};
314
315// =================================================================================
316// Write Quest Request Structures
317// =================================================================================
318
320USTRUCT(BlueprintType)
322{
323 GENERATED_BODY()
324
325 UPROPERTY(BlueprintReadWrite, Category = "Write")
326 FString kor;
327
328 UPROPERTY(BlueprintReadWrite, Category = "Write")
329 FString eng;
330
331 UPROPERTY(BlueprintReadWrite, Category = "Write")
332 FString pronunciation;
333};
334
336USTRUCT(BlueprintType)
338{
339 GENERATED_BODY()
340
341 UPROPERTY(BlueprintReadWrite, Category = "Write")
342 int32 Id;
343
344 UPROPERTY(BlueprintReadWrite, Category = "Write")
345 FWriteWordData word_data;
346
347 UPROPERTY(BlueprintReadWrite, Category = "Write")
348 FString answer;
349
350 UPROPERTY(BlueprintReadWrite, Category = "Write")
351 FString answer_kor;
352};
353
355DECLARE_DELEGATE_TwoParams(FResponseWriteQuestionDelegate, FQuestWriteInfo&, bool);
357USTRUCT(BlueprintType)
359{
360 GENERATED_BODY()
361
362 UPROPERTY(BlueprintReadWrite, Category = "Write")
363 int32 user_id;
364
365 UPROPERTY(BlueprintReadWrite, Category = "Write")
366 TArray<FWriteQuestionData> question;
367
368 UPROPERTY(BlueprintReadWrite, Category = "Write")
369 bool bIsValid = false;
370
372 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
373
375 void PrintData() const;
376
378 bool IsValid() const;
379};
380
381// =================================================================================
382// Speak Quest Structures
383// =================================================================================
384
386USTRUCT(BlueprintType)
388{
389 GENERATED_BODY()
390
391 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
392 int32 SpeakIndex = 0;
393
394 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
395 int32 Difficulty = 0;
396
397 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
398 TArray<FString> AnswerPlayer;
399
400 UPROPERTY(BlueprintReadWrite, Category = "KLingo")
401 TArray<FString> QuestTarget;
402};
403
404// =================================================================================
405// Read Quest Role and Result Structures
406// =================================================================================
407
409USTRUCT(BlueprintType)
411{
412 GENERATED_BODY()
413
414 UPROPERTY(BlueprintReadWrite, Category = "Quest")
415 bool bSuccess = false; // 성공 여부
416
417 UPROPERTY(BlueprintReadWrite, Category = "Quest")
418 float RemainTime = 0.f; // 남은 시간
419
420 UPROPERTY(BlueprintReadWrite, Category = "Quest")
421 int32 AttemptCount = 0; // 시도 횟수
422
423 UPROPERTY(BlueprintReadWrite, Category = "Quest")
424 FString SelectedSymbol; // 선택한 심볼
425
426 UPROPERTY(BlueprintReadWrite, Category = "Quest")
427 FString SelectedColor; // 선택한 색상
428};
429
430// =================================================================================
431// Response Structures
432// =================================================================================
434DECLARE_DELEGATE_TwoParams(FResponseHealthDelegate, FResponseHealth&, bool);
435USTRUCT(BlueprintType)
437{
438 GENERATED_BODY()
439
440 UPROPERTY(BlueprintReadWrite)
441 int32 status = 0;
442
444 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
445
447 void PrintData();
448};
449
450
451DECLARE_DELEGATE_TwoParams(FResponseUserRegisterDelegate, FResponseUserRegister&, bool);
452USTRUCT(BlueprintType)
454{
455 GENERATED_BODY()
456
457 UPROPERTY(BlueprintReadWrite)
458 int32 id = 0;
459
460 UPROPERTY(BlueprintReadWrite)
461 FString username;
462
463 UPROPERTY(BlueprintReadWrite)
464 FString email;
465
466 UPROPERTY(BlueprintReadWrite)
467 bool is_active;
468
470 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
471
473 void PrintData() const;
474};
475
476
477DECLARE_DELEGATE_TwoParams(FResponseUserTokenDelegate, FResponseUserToken&, bool);
478USTRUCT(BlueprintType)
480{
481 GENERATED_BODY()
482
483 UPROPERTY(BlueprintReadWrite, Category = "Token")
484 FString access_token;
485
487 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
488
490 void PrintData() const;
491};
492
493
494DECLARE_DELEGATE_TwoParams(FResponseUserMeDelegate, FResponseUserMe&, bool);
495USTRUCT(BlueprintType)
497{
498 GENERATED_BODY()
499
500 UPROPERTY(BlueprintReadWrite, Category = "Me")
501 int id;
502
503 UPROPERTY(BlueprintReadWrite, Category = "Me")
504 FString username;
505
506 UPROPERTY(BlueprintReadWrite, Category = "Me")
507 FString fullname;
508
509 UPROPERTY(BlueprintReadWrite, Category = "Me")
510 bool is_active;
511
512 UPROPERTY(BlueprintReadWrite, Category = "Me")
513 FString my_avatar;
514
515 UPROPERTY(BlueprintReadWrite, Category = "Me")
516 FString my_color;
517
519 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
520
522 void PrintData() const;
523
524 EResourceTextureType GetChatProfileTextureType(int player_index) const;
525 FLinearColor GetChatProfileBg(int player_index) const;
526};
527
528
529DECLARE_DELEGATE_TwoParams(FResponseUserHostDelegate, FResponseUserHost&, bool);
530USTRUCT(BlueprintType)
532{
533 GENERATED_BODY()
534
535
536 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
537
539 void PrintData() const;
540};
541
542
543// =================================================================================
544// Scenario API Structures
545// =================================================================================
546
548USTRUCT(BlueprintType)
550{
551 GENERATED_BODY()
552
553 UPROPERTY(BlueprintReadWrite, Category = "Word")
554 FString name;
555
556 UPROPERTY(BlueprintReadWrite, Category = "Word")
557 FString code;
558
560 static FWordInfo GetRandomColor()
561 {
562 static const TArray<FWordInfo> ColorPool = {
563 { TEXT("빨강"), TEXT("1") },
564 { TEXT("파랑"), TEXT("2") },
565 { TEXT("노랑"), TEXT("3") },
566 { TEXT("초록"), TEXT("4") },
567 { TEXT("검정"), TEXT("5") },
568 { TEXT("흰색"), TEXT("6") },
569 { TEXT("회색"), TEXT("7") },
570 { TEXT("주황"), TEXT("8") },
571 { TEXT("분홍"), TEXT("9") },
572 { TEXT("갈색"), TEXT("10") },
573 { TEXT("남색"), TEXT("11") },
574 { TEXT("보라색"), TEXT("12") },
575 { TEXT("금색"), TEXT("13") },
576 { TEXT("은색"), TEXT("14") },
577 { TEXT("살구색"), TEXT("15") },
578 { TEXT("하늘색"), TEXT("16") },
579 { TEXT("자주색"), TEXT("17") },
580 { TEXT("청록색"), TEXT("18") },
581 { TEXT("황토색"), TEXT("19") },
582 { TEXT("진홍색"), TEXT("20") },
583 { TEXT("군청색"), TEXT("21") },
584 { TEXT("연두색"), TEXT("22") },
585 { TEXT("와인색"), TEXT("23") },
586 { TEXT("베이지색"), TEXT("24") }
587 };
588
589 const int Index = FMath::RandRange(0, ColorPool.Num() - 1);
590 return ColorPool[Index];
591 }
592
593
596 {
597 static const TArray<FWordInfo> AnimalPool = {
598 { TEXT("개"), TEXT("1") },
599 { TEXT("고양이"), TEXT("2") },
600 { TEXT("새"), TEXT("3") },
601 { TEXT("물고기"), TEXT("4") },
602 { TEXT("소"), TEXT("5") },
603 { TEXT("닭"), TEXT("6") },
604 { TEXT("돼지"), TEXT("7") },
605 { TEXT("토끼"), TEXT("8") },
606 { TEXT("말"), TEXT("9") },
607 { TEXT("양"), TEXT("10") },
608 { TEXT("사슴"), TEXT("11") },
609 { TEXT("호랑이"), TEXT("12") },
610 { TEXT("곰"), TEXT("13") },
611 { TEXT("여우"), TEXT("14") },
612 { TEXT("원숭이"), TEXT("15") },
613 { TEXT("펭귄"), TEXT("16") },
614 { TEXT("기린"), TEXT("17") },
615 { TEXT("코끼리"), TEXT("18") },
616 { TEXT("치타"), TEXT("19") },
617 { TEXT("물개"), TEXT("20") },
618 { TEXT("하마"), TEXT("21") },
619 { TEXT("낙타"), TEXT("22") },
620 { TEXT("돌고래"), TEXT("23") },
621 { TEXT("박쥐"), TEXT("24") }
622 };
623
624 const int Index = FMath::RandRange(0, AnimalPool.Num() - 1);
625 return AnimalPool[Index];
626 }
627
629 bool operator==(const FWordInfo& Other) const
630 {
631 return name == Other.name && code == Other.code;
632 }
633
634 bool operator!=(const FWordInfo& Other) const
635 {
636 return !(*this == Other);
637 }
638};
639
641inline uint32 GetTypeHash(const FWordInfo& Info)
642{
643 return HashCombine(GetTypeHash(Info.name), GetTypeHash(Info.code));
644}
645
647USTRUCT(BlueprintType)
649{
650 GENERATED_BODY()
651
652 UPROPERTY(BlueprintReadWrite, Category = "Scenario")
654
655 UPROPERTY(BlueprintReadWrite, Category = "Scenario")
657};
658
659// =================================================================================
660// Write Quest Response API Structures
661// =================================================================================
662
663USTRUCT(BlueprintType)
665{
666 GENERATED_BODY()
667
668 UPROPERTY(BlueprintReadWrite, Category = "Write")
669 bool is_pass = false;
670
671 UPROPERTY(BlueprintReadWrite, Category = "Write")
672 FString message;
673
674 UPROPERTY(BlueprintReadWrite, Category = "Write")
675 FString correction;
676};
677
678USTRUCT(BlueprintType)
680{
681 GENERATED_BODY()
682
683 UPROPERTY(BlueprintReadWrite, Category = "Write")
684 int32 score;
685
686 UPROPERTY(BlueprintReadWrite, Category = "Write")
687 FString target;
688
689 UPROPERTY(BlueprintReadWrite, Category = "Write")
690 FString input;
691
692 UPROPERTY(BlueprintReadWrite, Category = "Write")
693 FString stage;
694};
695
696USTRUCT(BlueprintType)
698{
699 GENERATED_BODY()
700
701 UPROPERTY(BlueprintReadWrite, Category = "Write")
703
704 UPROPERTY(BlueprintReadWrite, Category = "Write")
706};
707
709DECLARE_DELEGATE_TwoParams(FResponseWriteSubmitDelegate, FResponseWriteSubmit&, bool);
711USTRUCT(BlueprintType)
713{
714 GENERATED_BODY()
715
716 UPROPERTY(BlueprintReadWrite, Category = "Write")
717 TArray<FResponseWriteData> ResponseWriteDataArray;
718
720 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
721
723 void PrintData() const;
724};
725
726USTRUCT(BlueprintType)
728{
729 GENERATED_BODY()
730
731 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
732 int32 room_id;
733
734 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
735 int32 user_id;
736
737 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
738 int32 scenario_id;
739
740 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
741 int32 stage_type;
742
743 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
744 int32 state_type;
745
746 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
747 int32 result_time;
748
749 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
750 TArray<int32> wrong_idx;
751
753 bool ToJsonString(FString& OutJson) const;
754};
755
757DECLARE_DELEGATE_TwoParams(FResponseWriteResultDelegate, FResponseWriteResult&, bool);
759USTRUCT(BlueprintType)
761{
762 GENERATED_BODY()
763
764 UPROPERTY(BlueprintReadWrite, Category = "Write")
765 int32 score;
766
767 UPROPERTY(BlueprintReadWrite, Category = "Write")
768 FString desc;
769};
770
771USTRUCT(BlueprintType)
773{
774 GENERATED_BODY()
775
776 UPROPERTY(BlueprintReadWrite, Category = "Write")
777 FString grade;
778
779 UPROPERTY(BlueprintReadWrite, Category = "Write")
780 int32 average_score;
781
782 UPROPERTY(BlueprintReadWrite, Category = "Write")
783 int32 top_percent;
784
785 UPROPERTY(BlueprintReadWrite, Category = "Write")
786 TArray<FResponseWriteScores> scores;
787
789 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
790};
791
792// =================================================================================
793// Speaking Questions API Structures (Updated)
794// =================================================================================
795
797DECLARE_DELEGATE_TwoParams(FResponseListenAudioDelegate, FResponseListenAudio&, bool);
798USTRUCT(BlueprintType)
800{
801 GENERATED_BODY()
802
803 UPROPERTY(BlueprintReadWrite, Category = "Speaking")
804 FString audio_text;
805
806 UPROPERTY(BlueprintReadWrite)
807 TArray<uint8> audio_base64;
808
810 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
811
813 void PrintData() const;
814};
815
816
817
818// =================================================================================
819// Speaking Questions API Structures (Updated)
820// =================================================================================
821
823DECLARE_DELEGATE_TwoParams(FResponseSpeakingJudesDelegate, FResponseSpeakingJudes&, bool);
825USTRUCT(BlueprintType)
827{
828 GENERATED_BODY()
829
830 UPROPERTY(BlueprintReadWrite, Category = "Speaking")
831 int grammar_score;
832
833 UPROPERTY(BlueprintReadWrite, Category = "Speaking")
834 int context_score;
835
836 UPROPERTY(BlueprintReadWrite, Category = "Speaking")
837 int final_overall_score;
838
839 UPROPERTY(BlueprintReadWrite, Category = "Speaking")
840 FString final_feedback;
841
843 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
844
846 void PrintData() const;
847
848 TArray<FResultStatData> GetResultStatData() const;
849};
850
851
852DECLARE_DELEGATE_TwoParams(FResponseInterviewHelloDelegate, FResponseInterviewHello&, bool);
853USTRUCT(BlueprintType)
855{
856 GENERATED_BODY()
857
858 UPROPERTY(BlueprintReadWrite, Category = "Interview")
859 TArray<FInterviewQuestionData> Questions;
860
862 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
863
865 void PrintData() const;
866};
867
868USTRUCT(BlueprintType)
870{
871 GENERATED_BODY()
872
873 UPROPERTY(BlueprintReadWrite)
874 int interview_id;
875
876 UPROPERTY(BlueprintReadWrite)
877 FString answer;
878
879 UPROPERTY(BlueprintReadWrite)
880 int user_id;
881};
882
883USTRUCT(BlueprintType)
885{
886 GENERATED_BODY()
887
888 UPROPERTY(BlueprintReadWrite, Category = "Interview")
889 TArray<FInterviewAnswerData> answer;
890
892 bool ToJsonString(FString& OutJson) const;
893};
894
895DECLARE_DELEGATE_TwoParams(FResponseInterviewAnswerDelegate, FResponseInterviewAnswer&, bool);
896USTRUCT(BlueprintType)
898{
899 GENERATED_BODY()
900
901
902 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
903
905 void PrintData() const;
906};
907
908DECLARE_DELEGATE_TwoParams(FResponseReadScenarioDelegate, FResponseReadScenario&, bool);
909USTRUCT(BlueprintType)
911{
912 GENERATED_BODY()
913
914 UPROPERTY(BlueprintReadWrite, Category = "Read")
915 int32 index = 0;
916
917 UPROPERTY(BlueprintReadWrite, Category = "Read")
918 int32 dificulity = 0;
919
920 UPROPERTY(BlueprintReadWrite, Category = "Read")
921 int32 room_id = 0;
922
923 UPROPERTY(BlueprintReadWrite, Category = "Read")
924 TArray<FScenarioTargetData> target_data;
925
926 UPROPERTY(BlueprintReadWrite, Category = "Read")
927 int32 correct_answer_index = 0;
928
929 UPROPERTY(BlueprintReadWrite, Category = "Read")
930 FWordData word_data1;
931
932 UPROPERTY(BlueprintReadWrite, Category = "Read")
933 FWordData word_data2;
934
935 UPROPERTY(BlueprintReadWrite, Category = "Read")
936 FWordData full_data;
937
939 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
940
942 void PrintData() const;
943
944 TArray<FString> GetWord1List() const;
945 TArray<FString> GetWord2List() const;
946
947 FScenarioTargetData GetCorrectAnswerData() const;
948};
949
950USTRUCT(BlueprintType)
952{
953 GENERATED_BODY()
954
955 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
956 int32 room_id;
957
958 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
959 int32 user_id;
960
961 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
962 int32 scenario_id;
963
964 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
965 int32 stage_type;
966
967 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
968 int32 state_type;
969
970 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
971 int32 result_time;
972
973 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
974 TArray<int32> wrong_idx;
975
977 bool ToJsonString(FString& OutJson) const;
978};
979
981USTRUCT(BlueprintType)
983{
984 GENERATED_BODY()
985
986 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
987 float score = 0.0f;
988
989 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
990 FString desc;
991};
992
993DECLARE_DELEGATE_TwoParams(FResponseReadResultDelegate, FResponseReadResult&, bool);
994USTRUCT(BlueprintType)
996{
997 GENERATED_BODY()
998
999 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1000 FString grade;
1001
1002 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1003 float average_score;
1004
1005 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1006 float top_percent;
1007
1008 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1009 TArray<FReadScoreDetail> scores;
1010
1012 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1013
1015 void PrintData() const;
1016};
1017
1018
1019DECLARE_DELEGATE_TwoParams(FResponseListenScenarioDelegate, FResponseListenScenario&, bool);
1020USTRUCT(BlueprintType)
1022{
1023 GENERATED_BODY()
1024
1025 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1026 int32 index = 0;
1027
1028 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1029 int32 dificulity = 0;
1030
1031 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1032 int32 room_id = 0;
1033
1034 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1035 TArray<FScenarioTargetData> target_data;
1036
1037 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1038 int32 correct_answer_index = 0;
1039
1040 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1041 FWordData word_data1;
1042
1043 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1044 FWordData word_data2;
1045
1046 UPROPERTY(BlueprintReadWrite, Category = "Listen")
1047 FWordData full_data;
1048
1049 UPROPERTY(BlueprintReadWrite, NotReplicated, Category = "Listen")
1050 TArray<uint8> voice_data;
1051
1053 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1054
1056 void PrintData() const;
1057
1058 TArray<FString> GetWord1List() const;
1059 TArray<FString> GetWord2List() const;
1060
1061 FScenarioTargetData GetCorrectAnswerData() const;
1062};
1063
1064USTRUCT(BlueprintType)
1066{
1067 GENERATED_BODY()
1068
1069 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1070 int32 room_id;
1071
1072 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1073 int32 user_id;
1074
1075 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1076 int32 scenario_id;
1077
1078 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1079 int32 stage_type;
1080
1081 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1082 int32 state_type;
1083
1084 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1085 int32 result_time;
1086
1087 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1088 TArray<int32> wrong_idx;
1089
1091 bool ToJsonString(FString& OutJson) const;
1092};
1093
1095USTRUCT(BlueprintType)
1097{
1098 GENERATED_BODY()
1099
1100 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1101 float score = 0.0f;
1102
1103 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1104 FString desc;
1105};
1106
1107DECLARE_DELEGATE_TwoParams(FResponseListenResultDelegate, FResponseListenResult&, bool);
1108USTRUCT(BlueprintType)
1110{
1111 GENERATED_BODY()
1112
1113 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1114 FString grade;
1115
1116 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1117 float average_score;
1118
1119 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1120 float top_percent;
1121
1122 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1123 TArray<FListenScoreDetail> scores;
1124
1126 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1127
1129 void PrintData() const;
1130};
1131
1132
1133// =================================================================================
1134// Speak Quest Structures (KLingo SpeakStage)
1135// =================================================================================
1136
1139USTRUCT(BlueprintType)
1141{
1142 GENERATED_BODY()
1143
1144
1145 UPROPERTY(BlueprintReadWrite, Category = "SpeakQuest")
1146 FString kor;
1147
1149 UPROPERTY(BlueprintReadWrite, Category = "SpeakQuest")
1150 FString eng;
1151
1153 UPROPERTY(BlueprintReadWrite, Category = "SpeakQuest")
1154 FString pronunciation;
1155
1157 UPROPERTY(BlueprintReadWrite, NotReplicated, Category = "SpeakQuest")
1158 TArray<uint8> voice_data;
1159
1160 FString GetQuestionMessage() const;
1161};
1162
1163// =================================================================================
1164// Speak Scenario API Structures
1165// =================================================================================
1166
1168DECLARE_DELEGATE_TwoParams(FResponseSpeakScenarioDelegate, FResponseSpeakScenario&, bool);
1170USTRUCT(BlueprintType)
1172{
1173 GENERATED_BODY()
1174
1175 UPROPERTY(BlueprintReadWrite, Category = "Speak")
1176 int32 index = 0;
1177
1178 UPROPERTY(BlueprintReadWrite, Category = "Speak")
1179 int32 difficulty = 0;
1180
1181 UPROPERTY(BlueprintReadWrite, Category = "Speak")
1182 int32 room_id = 0;
1183
1185 UPROPERTY(BlueprintReadWrite, Category = "Speak")
1186 TArray<FSpeakStageQuestion> speak_quest_data;
1187
1189 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1190
1192 void PrintData() const;
1193};
1194
1195
1196USTRUCT(BlueprintType)
1198{
1199 GENERATED_BODY()
1200
1201 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1202 int32 room_id;
1203
1204 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1205 int32 user_id;
1206
1207 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1208 int32 scenario_id;
1209
1210 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1211 int32 stage_type;
1212
1213 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1214 int32 state_type;
1215
1216 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1217 int32 result_time;
1218
1219 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1220 TArray<int32> wrong_idx;
1221
1223 bool ToJsonString(FString& OutJson) const;
1224};
1225
1227USTRUCT(BlueprintType)
1229{
1230 GENERATED_BODY()
1231
1232 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1233 int32 score = 0;
1234
1235 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1236 FString desc;
1237};
1238
1239
1240DECLARE_DELEGATE_TwoParams(FResponseSpeakResultDelegate, FResponseSpeakResult&, bool);
1241USTRUCT(BlueprintType)
1243{
1244 GENERATED_BODY()
1245
1246 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1247 FString grade;
1248
1249 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1250 int32 average_score;
1251
1252 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1253 float top_percent;
1254
1255 UPROPERTY(BlueprintReadWrite, Category = "QuestResult")
1256 TArray<FSpeakScoreDetail> scores;
1257
1259 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1260
1262 void PrintData() const;
1263
1264 TArray<FResultStatData> GetResultStatData() const;
1265};
1266
1267
1268// =================================================================================
1269// Evaluation API Structures
1270// =================================================================================
1271
1273UENUM(BlueprintType)
1274enum class EScenarioType : uint8
1275{
1276 READING UMETA(DisplayName = "Reading"),
1277 LISTENING UMETA(DisplayName = "Listening"),
1278 WRITING UMETA(DisplayName = "Writing"),
1279 SPEAKING UMETA(DisplayName = "Speaking")
1280};
1281
1283USTRUCT(BlueprintType)
1285{
1286 GENERATED_BODY()
1287
1288 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1289 FString title;
1290
1291 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1292 FString message;
1293};
1294
1296USTRUCT(BlueprintType)
1298{
1299 GENERATED_BODY()
1300
1301 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1302 EScenarioType scenario_type;
1303
1304 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1305 FString display_name;
1306
1307 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1308 int32 final_score = 0;
1309
1310 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1311 FString grade;
1312
1313 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1314 FFeedbackSummary feedback_summary;
1315
1316 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1317 FString action_item;
1318};
1319
1321USTRUCT(BlueprintType)
1323{
1324 GENERATED_BODY()
1325
1326 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1327 int32 final_score = 0;
1328
1329 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1330 FString grade;
1331
1332 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1333 FString feedback_summary;
1334};
1335
1337DECLARE_DELEGATE_TwoParams(FResponseEvaluationResultDelegate, FResponseEvaluationResult&, bool);
1339USTRUCT(BlueprintType)
1341{
1342 GENERATED_BODY()
1343
1344 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1345 FTotalResult total_result;
1346
1347 UPROPERTY(BlueprintReadWrite, Category = "Evaluation")
1348 TArray<FScenarioResult> scenario_results;
1349
1351 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1352
1354 void PrintData() const;
1355};
1356
1357
1358// =================================================================================
1359// Chat Answers API Structures
1360// =================================================================================
1361
1363DECLARE_DELEGATE_TwoParams(FResponseChatAnswersDelegate, FResponseChatAnswers&, bool);
1365USTRUCT(BlueprintType)
1367{
1368 GENERATED_BODY()
1369
1370 UPROPERTY(BlueprintReadWrite, Category = "Chat")
1371 FString question;
1372
1373 UPROPERTY(BlueprintReadWrite, Category = "Chat")
1374 FString answer;
1375
1377 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1378
1380 void PrintData() const;
1381};
1382
1383
1384// =================================================================================
1385// Chat Dailys API Structures
1386// =================================================================================
1387
1389DECLARE_DELEGATE_TwoParams(FResponseChatDailysDelegate, FResponseChatDailys&, bool);
1391USTRUCT(BlueprintType)
1393{
1394 GENERATED_BODY()
1395
1396 UPROPERTY(BlueprintReadWrite, Category = "Chat")
1397 FString question;
1398
1399 UPROPERTY(BlueprintReadWrite, Category = "Chat")
1400 FString answer;
1401
1403 void SetFromHttpResponse(const TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe>& Response);
1404
1406 void PrintData() const;
1407};
EResourceTextureType
DECLARE_DELEGATE_TwoParams(FResponseWriteQuestionDelegate, FQuestWriteInfo &, bool)
Write Submit 응답 델리게이트입니다.
EScenarioType
시나리오 타입 열거형
uint32 GetTypeHash(const FWordInfo &Info)
TSet에서 사용하기 위한 해시 함수
서버 환경별 네트워크 설정을 노출하는 DeveloperSettings를 선언합니다.
EServerMode
서버 환경(개발/스테이징/라이브)을 나타내는 열거형입니다.
static EServerMode GetCurrentServerMode()
명령줄 또는 설정으로 선택된 서버 모드를 반환합니다.
static FString GetFullUrlWithQuery(const FString &Endpoint, const TMap< FString, FString > &QueryParams)
Query 파라미터가 포함된 전체 URL을 반환합니다. 파라미터가 없으면 기본 URL만 반환합니다.
Definition NetworkData.h:32
static FString GetSocketURL()
현재 서버 모드에서 사용할 WebSocket 주소를 반환합니다.
Definition NetworkData.h:68
static FString GetFullUrl(const FString &Endpoint)
현재 서버 모드에 맞는 HTTP 엔드포인트 URL을 생성합니다.
Definition NetworkData.h:23
static FString listen_result
Definition NetworkData.h:99
static FString users_register
Definition NetworkData.h:82
static FString wriite_result
static FString chats_daily
static FString speak_result
static FString listenings_audio
Definition NetworkData.h:89
static FString interview_hello
Definition NetworkData.h:92
static FString writes_submit
Write 답변 제출 엔드포인트입니다. POST /writes/submit
Definition NetworkData.h:87
static FString chats_answers
Chat 답변 요청 엔드포인트입니다. POST /chats/answers
static FString speakings_judes
Definition NetworkData.h:90
static FString read_result
Definition NetworkData.h:98
static FString evaluations_rooms
Evaluation 결과 조회 엔드포인트입니다. GET /evaluations/rooms/{room_id}
static FString interview_answer
Definition NetworkData.h:93
static FString Health
서버 상태 확인 엔드포인트입니다.
Definition NetworkData.h:79
static FString scenario
Scenario 조회 엔드포인트입니다.
Definition NetworkData.h:96
static FString users_me
Definition NetworkData.h:84
static FString users_token
Definition NetworkData.h:83
피드백 요약 구조체입니다.
Read 퀘스트 정보 구조체입니다.
Listen 퀘스트의 개별 점수 상세 정보를 담는 구조체입니다.
Listen 퀘스트 타겟 데이터입니다.
단어 데이터 구조체입니다.
플레이어 정보 구조체입니다.
Listen 퀘스트 정보 구조체입니다.
Read 퀘스트 정보 구조체입니다.
Speak 퀘스트 정보 구조체입니다.
Write 퀘스트 정보 구조체입니다.
Read 퀘스트의 플레이어 결과 기록입니다.
Read 퀘스트의 개별 점수 상세 정보를 담는 구조체입니다.
Read 퀘스트 타겟 데이터입니다.
Chat Answers 응답 구조체입니다.
Chat Dailys 응답 구조체입니다.
Evaluation 결과 응답 구조체입니다.
Speak 시나리오 응답 구조체입니다.
Speaking Questions 응답 구조체입니다.
Write 최종 결과 점수 정보 구조체입니다.
Write Submit 응답 구조체입니다.
Result Stat 위젯 통합 데이터 구조 위젯 타입, 색상 스타일, 각 타입별 데이터를 통합 관리
시나리오별 결과 구조체입니다.
Scenario 타겟 데이터입니다.
서버 접속 정보를 담는 설정 구조체입니다.
FString WebSocketUrl
WebSocket 접속 URL입니다.
FString GetFullUrl(const FString &Endpoint) const
엔드포인트를 결합한 전체 URL을 반환합니다.
Speak 퀘스트의 개별 점수 상세 정보를 담는 구조체입니다.
SpeakQuest 오디오 질문 데이터 구조체입니다.
전체 결과 구조체입니다.
단어 데이터 구조체입니다.
단어 정보 구조체
static FWordInfo GetRandomAnimal()
랜덤 동물 선택 - CSV 기반 하드코딩
bool operator!=(const FWordInfo &Other) const
bool operator==(const FWordInfo &Other) const
TSet에서 사용하기 위한 비교 연산자
FString code
FString name
Write 질문 및 정답 구조체입니다.
Write 질문 구조체입니다.