목록게임프로그래밍/서버 책 (13)
bdfgdfg
Singleton class - 많이 사용하는 디자인 패턴 기법으로 오직 하나의 객체만 생성하여 사용하는 클래스를 의미한다. -> 패턴은 쉽게 말하면 개발자들의 경험을 통한 문제 해결 방법들을 정리하여 이름을 부여한 기법들. - 이러한 단일체(Singleton)클래스는 어떤 클래스(객체)들을 관리하는 역할로 많이 쓰인다. -> ex) User를 관리하는 UserManager등등.. 보통 Manager가 붙은 클래스들이 Singleton을 사용한다. 먼저 싱글톤 클래스를 하는데 싱글톤 패턴을 사용하는 모든 단일체 클래스는 이 클래스를 상속받는다. -> 모든 싱글턴 객체들을 관리한다. 해제할 때는 이 Singleton클래스를 통해 해제. 싱글톤 패턴을 사용하기 쉽게 매크로를 이용해본다. #define DEC..
Monitor Class - 이 클래스는 동기화 객체로서 CRITICAL_SECTION(유저모드 동기화)객체를 사용하기 편하도록 초기화와 해제를 생성자와 소멸자로 빼내어 사용자가 따로 하지 않아도 자동으로 되게 만든다. -> 모던 C++에선 lock_guard같은 역할. -> 교착 상태(DeadLock)과 기아 상태(Starvation)을 미연에 방지하도록 설계 - 사용할 때엔 동기화가 필요한 클래스는 이 클래스를 상속받아 사용한다. #pragma once #include "std.h" // 복사되는것을 방지. class Monitor { public: class Owner { // Owner클래스는 자동으로 CS객체의 소유권을 해제하기 위해 만들어짐 public: Owner(Monitor& crit);..
네트워크 라이브러리를 만들기전 라이브러리를 만드는 방식 2가지를 본다. 1. 정적 라이브러리(Static Library) 정적 라이브러리로 만든 프로젝트의 빌드 결과물은 lib확장자로 만들어진다. 빌드 후 결과물을 보면 위와 같이 실행가능한 파일(exe)이 아닌 lib확장자로 파일이 만들어 진다. 이제 이 정적 라이브러리를 가지고 다른 프로젝트에서 가져다가 쓸 수 있다. 사용하는 방법은 밑과 같다. 1. 프로젝트 속성 -> 링커 탭 -> 일반 탭으로 이동 후 추가 라이브러리 디렉토리에 lib파일이 존재하는 디렉터리의 경로를 넣어준다. 2. 디렉터리 설정이 완료 되었으면 어떤 lib(정적 라이브러리)를 쓸건지 알려줘야 한다. 방법이 2가지. 2-1 프로젝트 속성 -> 링커 탭 -> 입력 탭으로 이동후 추가..
이론은 앞서 두개의 글(하나는 비공개)을 통해 공부했으니 바로 코드 IOCompletionPort.h #pragma once #include "std.h" #define MAX_SOCKBUF 1024 // 패킷(현재는 버퍼)크기 #define MAX_CLIENT 100 // 최대 접속가능한 클라이언트 수 #define MAX_WORKERTHREAD 4 // 쓰레드 풀(CP객체)에 넣을 쓰레드 수 enum class IO_TYPE { IO_RECV, IO_SEND }; // Overlapped 구조체를 확장하여 사용. struct OverlappedEx { WSAOVERLAPPED m_wsaOverlapped; WSABUF m_wsaBuf; char m_dataBuffer[MAX_SOCKBUF]; IO_T..