
C++ config parser
텍스트를 파싱하는 로직이 필요해서 간단히 작성한 프로그램. 긴 설명은 필요없을 것 같아 소스만 남김! 사용법 #include #include "ConfigParser.h" int main() { CConfigParser test("test.ini"); if (test.IsSuccess()) { std::cout
텍스트를 파싱하는 로직이 필요해서 간단히 작성한 프로그램. 긴 설명은 필요없을 것 같아 소스만 남김! 사용법 #include #include "ConfigParser.h" int main() { CConfigParser test("test.ini"); if (test.IsSuccess()) { std::cout
* 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. IOCP 이론 : https://developstudy.tistory.com/43?category=836040 IOCP 초기화 : https://developstudy.tistory.com/45?category=836040 이번 포스팅에서는 드디어 IOCP를 끝맺는다! 저번 포스팅까지는 IOCP를 사용하기 위해 준비를 했다면 이제는 직접 관리(작동)하는 부분을 정리할 것이다. 비동기 명령을 보내는 함수는 Post___()로 지었고, 결과를 받는 함수는 ____Proc(Overlapped*)로 지었으니 참고 바란다. 구현해야 할 명령은 총 4개이다. Send, Recv, Close, Accpet ..
언리얼 에셋은 불러오기 참 불편하다... static ConstructorHelpers::FClassFinder CS_PSYCHICFORCE(TEXT("/Game/Blueprint/CameraShake/Esper/CS_01_PsychicForce.CS_01_PsychicForce_C")); if (CS_PSYCHICFORCE.Succeeded()) { CS_PsychicForce = CS_PSYCHICFORCE.Class; } 뭔가 받으려면 이름부터 길다란 네임스페이스에 여러가지 붙여야 로드가 가능하다. 로드가 실패한것도 체크안하면 터져버린다. 클라이언트 프로그래머 친구들이 저 더럽고 불결한 내용을 몇십 몇백개 적고 있는걸 보니 눈물이 나서 다음과 같은 매크로를 만들었다. /* Object Asset을 ..
* 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. IOCP 이론 : https://developstudy.tistory.com/43?category=836040 C++ IOCP 서버 2. IOCP 이론 * 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. IOCP는 Window 환경에서 작동하는 제일 흔히 쓰이는 논블로킹 프로세스이다. 최소한의 쓰레드로 최.. developstudy.tistory.com 이번 포스팅에서는 IOCP 사용법을 포스팅할 것이다. IOCP 소켓을 구현하기 전에 먼저 해야 할 것은 오버랩 구조체를 만드는 것이다. 1. overlapped 구성 나는 오버랩을 아래와..
사실 나의 졸작게임 서버를 만드는 것에는 new와 delete를 남발해도 별일이 일어나지는 않는다. 어차피 2명만 수용하면 되기 때문이다.. 하지만 실제 게임 서버에서는 런타임 동적할당을 절대 사용해서는 안된다고 한다. 오랫동안 살아있는 채로 돌려야 하는데 메모리를 만들고 지우고를 계속하다가 메모리가 파편화돼서 그런 것 같기도 하고, new와 delete의 부하도 심해서 그런 것 같기도 하고, 정확한 이유는 모르겠지만 확실히 서버가 돌아가는 중에 동적할당을 써서 좋을 것은 없을 것 같다. 그래서 대게 이 문제를 메모리풀이나 오브젝트풀을 활용하여 해결한다고 한다. 오브젝트풀은 말그대로 오브젝트(클래스로부터 실체화된 친구들)들이 모여있는 곳으로, 초기화 단계에서 미리 왕~~~창 만들어두고 필요할 때는 꺼내 ..
* 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. IOCP는 Window 환경에서 작동하는 제일 흔히 쓰이는 논블로킹 프로세스이다. 최소한의 쓰레드로 최대한의 효율을 뽑을 수 있다고 하는데 좀 더 자세히 살펴보았다. 먼저 이름의 뜻부터 살펴보자. IOCP는 IO Completion Port의 약자로 입출력 완료 포트라는 뜻이다. 여기서 사용하는 Port는 통신에서 사용하는 포트와 비슷한 의미로 어떤 항구, 그러니까 목적지라는 의미이다. 하지만 직접적으로 통신에서 사용하는 포트와는 전혀 다른 포트로 처음 공부할 때는 혼란이 올 수도 있다. 1. 비동기 I/O 시작 동기 함수(Connect Close Accept Send)과 같은 역할을 하는 비동..
* 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. 소켓 프로그래밍에서 사용하는 함수는 기본적으로 블로킹(Blocking) 함수이다. Send(), Recv(), Connect() 등.. 소켓 함수로 요청을 하면 동기적으로 처리가 된다. 여기서 동기적이란? "흐름이 하나로 진행(동기화)된다"고 이해하면 편하다. 보통 동기적이라고 하면 동시에 무슨 일이 일어난다고 이해하기 쉬운데 프로그래밍에서는 반대인 듯하다. 반대로 비동기는 흐름이 넘어가지 않고 진행된다. 비동기가 동기보다 당연히 더 좋지 않을까? 싶었지만 생각해보면 여러 가지 고민할 것이 많아진다. 첫 번째로, Recv 완료 통지를 결국 어디선가는 받아야 한다. 그럼 Recv를 하는 부분이 아..
이득우 교수님의 언리얼 C++ 책을 참고해서 작성한 매크로 들인데 다른 프로젝트에서 유용히 쓸 수 있을것 같아서 여기에 공유한다. // HACKED.h (모듈최상위 헤더) // 이 함수가 호출된 함수의 이름과 라인을 매크로로 String화 시킴 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석 #define LOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")")) // 위의 CALLINFO와 함께 아무 내용이 없는 로그를 찍는 매크로 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석 #define LOG_S(Verbosity) UE_LOG(HACKED_LOG, Verbosity, TEXT("%s..
졸업작품 기획의 요구사항중에 "Steam ID로 접속하여 친구들과 플레이 한다."가 있었다. 이 시스템을 구현하기 위해서 먼저 Steam SDK를 사용하는 방법을 알아야 했는데, 언리얼에서 바로 써보기에는 언리얼의 컴파일 속도를 기다리기가 너무 싫어서 콘솔에 먼저 붙여보기로 했다. 먼저 스팀 SDK 사이트(https://partner.steamgames.com/doc/sdk)에 들어가서 스팀 SDK를 받고 압축을 풀면 아래와 같은 폴더들이 나온다. 여기서 중요한 폴더는 형광펜으로 칠한 public 폴더와 redistributable_bin 폴더! public 폴더에는 sdk의 인터페이스가 들어있고, redistributable_bin 폴더에는 플랫폼별 lib와 dll 파일이 들어있다. Steam SDK를..