7.4.1 응용 프로토콜 스택 정의 [TCP/IP 소켓 프로그래밍 with 윈도우즈]

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

메시지 헤더 메시지 바디
4바이트 4바이트 BDLEN 바이트
MSGID BDLEN 메시지마다 별도 정의

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

 

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

메시지 헤더 RegReq 바디
4 4 4 IDLEN 4 PWLEN 4 NAMELEN
MID_REGREQ BDLEN IDLEN ID PWLEN PW NAMELEN NAME

[표 7.12] RegReq 메시지 구조

 

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

메시지 헤더 RegResponse 바디
4 4 4
MID_REGRES BDLEN result

[표 7.13] RegResponse 메시지 구조

 

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

메시지 헤더 UnRegReq 바디
4 4 4 IDLEN
MID_UNREGREQ BDLEN IDLEN ID

[표 7.14] UnRegReq 메시지 구조

 

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

메시지 헤더 LoginReq 바디
4 4 4 IDLEN 4 PWLEN
MID_LOGINREQ BDLEN IDLEN ID PWLEN PW

[표 7.15] LoginReq 메시지 구조

 

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

메시지 헤더 LoginRes 바디
4 4 4
MID_LOGINRES BDLEN result

[표 7.16] LoginRes 메시지 구조

 

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

메시지 헤더 LogOutReq 바디
4 4 4 IDLEN
MID_LOGOUTREQ BDLEN IDLEN ID

[표 7.14] LogOutReq 메시지 구조

 

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

메시지 헤더 KeepAlive 바디
4 4 4 IDLEN 4 4 4 4
MID_KEEPALIVE BDLEN IDLEN ID IP STSPORT SMSGPORT FILEPORT

[표 7.15] KeepAlive 메시지 구조

 

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

메시지 헤더 OtherUserInfo 바디
4 4 4 IDLEN 4 4 4
MID_USERINFO BDLEN IDLEN ID IP SMSGPORT FILEPORT

[표 7.16] OtherUserInfo 메시지 구조

 

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

메시지 헤더 IDExist 바디
4 4 4 IDLEN
MID_IDEXIST BDLEN IDLEN ID

[표 7.17] IDExist 메시지 구조

 

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

메시지 헤더 IDExistAck 바디
4 4 4
MID_IDEXISTACK BDLEN ISEXIST

[표 7.18] IDExistAck 메시지 구조

 

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

메시지 헤더 AddUserInfo 바디
4 4 4 IDLEN 4 PWLEN 4 NAMELEN
MID_ADDUSERINFO BDLEN IDLEN ID PWLEN PW NAMELEN NAME

[표 7.19] AddUserInfo 메시지 구조

 

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

메시지 헤더 UserSts 바디
4 4 4 IDLEN
MID_USERSTS BDLEN IDLEN ID

[표 7.20] UserSts 메시지 구조

 

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

메시지 헤더 UserStsAck 바디
4 4 4
MID_USERSTSACK BDLEN STATUS

[표 7.21] UserStsAck 메시지 구조

 

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

메시지 헤더 IsCorrect 바디
4 4 4 IDLEN 4 PWLEN
MID_ISCORRECT BDLEN IDLEN ID PWLEN PW

[표 7.22] IsCorrect 메시지 구조

 

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

메시지 헤더 IsCorrectAck 바디
4 4 4
MID_ISCORRECTAK BDLEN RESULT

[표 7.23] IsCorrectAck 메시지 구조

 

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

메시지 헤더 ChangeSts 바디
4 4 4 IDLEN 4
MID_CHANGESTS BDLEN IDLEN ID STATUS

[표 7.24] ChangeSts 메시지 구조

 

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

메시지 헤더 RemoveUser 바디
4 4 4 IDLEN
MID_REMOVEUSER BDLEN IDLEN ID

[표 7.25] RemoveUser 메시지 구조