/* 사용자지정 프로토콜 */
#define PROTOCOL_ZERO 0
#define PROTOCOL_KNOCK 1 // 똑똑
#define PROTOCOL_WHO 2 // 누구냐?
#define PROTOCOL_IAM 3 // 저는요
#define PROTOCOL_SO 4 // 그래서?
#define PROTOCOL_SPEAK 5 // 잡담
#define PROTOCOL_NOISY 6 // 시끄
#define PROTOCOL_BYE 7 // 이만가요
unsigned int rtn = 0, var_cnt = 0, var_type; /* 함수리턴값, 수신data내 변수 갯수, 변수타입*/
int num; // 송신 정수값
// 송신할 프로토콜 지정
zwSock.SetCmd(PROTOCOL_KNOCK);
// 송신
rtn = zwSock.Send(fd);
printf("REQ : PROTOCOL_KNOCK\n");
while (1) {
// 수신대기
if ((rtn = zwSock.RecvAwait(fd)) < 0)
break;
// 수신Data Stream 내 변수 Count
var_cnt = zwSock.GetVarCnt();
// 애틀리케이션 프로토콜을 확인하여 대응한다
switch (rtn) {
case PROTOCOL_ZERO: {
continue;
}
case PROTOCOL_WHO: {
printf("REQ : PROTOCOL_IAM\n");
// 송신할 프로토콜 지정
zwSock.SetCmd(PROTOCOL_IAM);
const char* msg = "My name is steelwater.";
printf("Me : %s\n", msg);
// 송신 문자열 추가
zwSock.AddDataString(msg);
zwSock.Send(fd);
continue;
}
case PROTOCOL_SO: {
printf("REQ : PROTOCOL_SPEAK\n");
zwSock.SetCmd(PROTOCOL_SPEAK);
zwSock.AddDataString("I am");
num = 10;
// 송신할 정수 추가
zwSock.AddDataInt(num);
// 갯수에 상관없이 Data 임의 추가
zwSock.AddDataString("years old.");
zwSock.AddDataString("nice to meet you");
zwSock.AddDataString("how old are you?");
printf("I am %d years old.\nnice to meet you\nhow old are you?\n", num);
num = 12;
zwSock.AddDataInt(num);
zwSock.AddDataString("?");
printf("%d ?\n", num);
zwSock.Send(fd);
continue;
}
case PROTOCOL_NOISY: {
printf("REQ : PROTOCOL_BYE\n");
zwSock.SetCmd(PROTOCOL_BYE);
const char* msg = "Ok bye!";
printf("Me : %s\n", msg);
zwSock.AddDataString(msg);
zwSock.Send(fd);
break;
}
default: {
continue;
}
}
if (rtn == PROTOCOL_NOISY)
break;
}
해당 코드의 개요
-
- LibZWSock::SetCmd() 메소드로 프로토콜 지정
- 서버와 약속된 프로토콜별 처리
- 지정된 메소드로 송신할 임의의 Data를 추가한다
