7.4 EH 메신저 설계 7.4.1 응용 프로토콜 스택 정의[TCP/IP 소켓 프로그래밍 with 윈도우즈]

이제 설계 단계를 진행합시다.

설계 단계에서는 컴포넌트 다이어그램의 프로젝트 구성 요소들 내부에 필요한 형식과 기능을 약속하는 작업을 수행합니다. CBD 개발 방법론에서는 클래스 다이어그램에 정의할 형식과 형식간의 관계를 나타내며 시퀀스 다이어그램 등을 이용하여 흐름을 약속합니다.

EH 메신저는 소켓 통신 프로그래밍을 해야 하고 다양한 메시지를 사용합니다. 이에 EH 메신저 응용 프로토콜 스택을 정의하는 작업을 추가로 진행할게요.

7.4.1 응용 프로토콜 스택 정의

EH 메신저에서는 Peer와 서비스, 서비스와 서비스 사이에 전달하는 메시지를 메시지 헤더와 메시지 바디로 구성하여 전달하기로 약속할게요.

4바이트4바이트BDLEN 바이트
MSGIDBDLEN메시지마다 별도 정의

[표 7.11] EH 메신저 메시지 구조

가입 요청에 사용하는 RegReq 메시지는 아이디와 비밀 번호, 이름을 전달해야 합니다. 이들을 고정 길이로 전달하면 구현이 간단한 반면 네트워크 대역을 많이 차지합니다. 여기에서는 가변 길이로 전송할 수 있게 설계합시다. 이를 위해서는 아이디 길이와 비밀 번호 길이, 이름 길이도 전달해야 합니다.

444IDLEN4PWLEN4NAMELEN
MID_REGREQBDLENIDLENIDPWLENPWNAMELENNAME

[표 7.12] RegReq 메시지 구조

가입 요청의 응답인 RegResponse 메시지는 가입 요청 결과를 전달합니다.

444
MID_REGRESBDLENresult

[표 7.13] RegResponse 메시지 구조

탈퇴 요청에 사용하는 UnRegReq 메시지는 아이디를 전달해야 합니다. 아이디를 가변 길이로 전송할 수 있게 아이디 길이도 전달합시다.

444IDLEN
MID_UNREGREQBDLENIDLENID

[표 7.14] UnRegReq 메시지 구조

로긴 요청에 사용하는 LoginReq에는 아이디와 비밀 번호를 전달합니다. 가변 길이로 전달할 수 있도록 아이디 길이, 비밀 번호 길이도 전달합시다.

444IDLEN4PWLEN
MID_LOGINREQBDLENIDLENIDPWLENPW

[표 7.15] LoginReq 메시지 구조

로긴 요청 응답인 LoginRes에는 로긴 요청 결과를 전달합니다.

444
MID_LOGINRESBDLENresult

[표 7.16] LoginRes 메시지 구조

로그 아웃 요청인 LogOutReq에는 아이디를 전달합니다. 가변 길이로 전달할 수 있도록 아이디 길이도 전달합시다.

444IDLEN
MID_LOGOUTREQBDLENIDLENID

[표 7.14] LogOutReq 메시지 구조

STS_LOGGED 상태를 유지하기 위해 Peer가 주기적으로 보내는 KeepAlive 메시지를 정의합시다. 아이디와 아이피 주소, 계정 정보를 수신하기 위한 포트 번호, 숏 메시지 수신 포트 번호, 파일 수신 포트 번호를 전달해야 합니다.

444IDLEN4444
MID_KEEPALIVEBDLENIDLENIDIPSTSPORTSMSGPORTFILEPORT

[표 7.15] KeepAlive 메시지 구조

다른 Peer의 계정 정보를 전달하는 OtherUserInfo 메시지에는 아이디 아이피 주소, 숏 메시지 수신 포트 번호와 파일 수신 포트 번호를 전달해야 합니다.

444IDLEN444
MID_USERINFOBDLENIDLENIDIPSMSGPORTFILEPORT

[표 7.16] OtherUserInfo 메시지 구조

존재하는 아이디인지 확인 요청하는 IDExist 메시지에는 아이디를 전달해야 합니다.

444IDLEN
MID_IDEXISTBDLENIDLENID

[표 7.17] IDExist 메시지 구조

아이디 존재 여부 결과를 전송하는 IDExistAck에는 존재 여부를 전달해야 합니다.

444
MID_IDEXISTACKBDLENISEXIST

[표 7.18] IDExistAck 메시지 구조

계정 정보 추가 요청하는 AddUserInfo 메시지에는 아이디와 비밀번호, 이름을 전달해야 합니다.

444IDLEN4PWLEN4NAMELEN
MID_ADDUSERINFOBDLENIDLENIDPWLENPWNAMELENNAME

[표 7.19] AddUserInfo 메시지 구조

사용자 상태를 요청하는 UserSts에는 아이디를 전달해야 합니다.

444IDLEN
MID_USERSTSBDLENIDLENID

[표 7.20] UserSts 메시지 구조

사용자 상태 응답 메시지인 UserStsAck에는 사용자 상태를 전달합니다.

444
MID_USERSTSACKBDLENSTATUS

[표 7.21] UserStsAck 메시지 구조

아이디와 패스워드 정보가 정확한지 확인 요청하는 IsCorrect는 아이디와 비밀 번호를 전달합니다.

444IDLEN4PWLEN
MID_ISCORRECTBDLENIDLENIDPWLENPW

[표 7.22] IsCorrect 메시지 구조

아이디와 패스워드가 일치하는지 결과를 알려주는 IsCorrectAck에는 일치 여부를 전달합니다.

444
MID_ISCORRECTAKBDLENRESULT

[표 7.23] IsCorrectAck 메시지 구조

상태 변경 요청하는 ChangeSts에는 아이디와 상태를 전달합니다.

444IDLEN4
MID_CHANGESTSBDLENIDLENIDSTATUS

[표 7.24] ChangeSts 메시지 구조

탈퇴 요청에 따른 사용자 정보를 삭제 요청하는 RemoveUser 메시지에는 아이디를 전달해야 합니다.

444IDLEN
MID_REMOVEUSERBDLENIDLENID

[표 7.25] RemoveUser 메시지 구조