7.4.5 EH 메신저 로그 라이브러리 설계 및 구현 [TCP/IP 소켓 프로그래밍 with 윈도우즈]

이번에는 로그 라이브러리를 설계 및 구현합시다.

로그 라이브러리에는 로긴 요청과 로그 아웃 요청 메시지 처리에 필요한 형식과 기능을 구현할 것입니다. 로그 라이브러리와 관련있는 노드는 클라이언트와 로그 서버입니다.

클라이언트의 Peer 프로그램과 로그 서버의 LogSVC는 로그 라이브러리와 EHPacket 라이브러리를 사용합니다. 그리고 로그 라이브러리도 EHPacket 라이브러리를 사용합니다.

[그림 7.16] 로그 관련 노드 컴포넌트 다이어그램
[그림 7.16] 로그 관련 노드 컴포넌트 다이어그램
 이제 로그 라이브러리를 작성합시다. 로그 라이브러리는 LogLib 이름으로 만들게요. 로그 라이브러리에는 로긴 요청하는 LogInReq 클래스와 로긴 요청 응답하는 LogInReponse 클래스, 로그 아웃 요청하는 LogOutReq클래스로 구성할게요.

먼저 EH 메신저 솔루션에 LogLib 이름으로 Win2 프로젝트를 추가하고 DLL 형태로 만드세요.

작성 원리는 가입 라이브러리 작성 원리와 같습니다.

로그 라이브러리에서 공통으로 포함해서 사용할 Log.h 파일을 Common 프로젝트에 추가합니다.

EHPacketLib를 사용해야 하므로 EHPacket.h 파일을 포함하고 EHPacketLib 파일을 참조 추가합니다.

로그 라이브러리 내부와 사용할 곳에 맞게 __declspec 표현을 할 수 있게 매크로 LOG_DLL를 정의합니다.

로긴 요청에 관한 클래스를 정의할 LogInReq.h 파일을 Common 프로젝트에 추가합니다. 작성 방법은 가입 요청에 관한 RegReq.h 파일 같은 방법이므로 작성합니다. 코드 설명은 생략할게요.

로그 라이브러리에 LogInReq.cpp 소스 파일을 추가하여 구현합시다. 작성 방법은 RegReq.cpp 파일과 같으므로 코드 설명은 생략할게요.

Common 프로젝트에 LogInRes.h 파일을 추가하고 LogInRes 클래스를 정의합시다.

로긴 요청의 응답은 성공과 실패( ID 없음, 이미 로긴 중, ID와 PW 불일치)에 필요한 매크로 상수를 정의합시다.

로긴 요청의 응답 클래스인 LogInRes를 정의합니다.

로그 라이브러리에 LogInRes.cpp 파일을 추가하여 코드를 작성합시다.

Common 프로젝트에 LogOutReq.h 파일을 추가하고 LogOutReq 클래스를 정의합시다.

로그 라이브러리에 LogOutReq.cpp 파일을 추가하여 소스를 구현합시다.