#include <iostream>
using namespace std;
#define DO_CMD(name) void name(char *msg)
DO_CMD(do_east);
DO_CMD(do_west);
DO_CMD(do_south);
DO_CMD(do_north);
DO_CMD(do_quit);
// 명령어 해석 함수
void command_interpreter(char *cmd);
// 명령 목록 구조체
struct command_info {
char *command;
void (*command_pointer) (char *arg);
};
// 명령 목록 리스트
struct command_info cmd_list[] = {
{ "RESERVED", 0 },
{ "동" , do_east },
{ "서" , do_west },
{ "남" , do_south },
{ "북" , do_north },
{ "종료" , do_quit },
{ "\n" , 0 }
};
int main(int argc, char **argv)
{
char cmd[20];
char *msg = "메시지 내용";
printf( "명령 입력(동, 서, 남, 북, 종료) : " );
scanf( "%s", cmd );
command_interpreter( cmd );
return 0;
}
// 명령에 대한 함수포인터 분기 부분을 제작중
// -- 진행중 --
void command_interpreter(char *cmd)
{
for(int cmd_no = 1; i < 4; i++)
{
cmd_list[i].command
}
}
DO_CMD(do_east)
{
printf("동쪽 : %s\n", msg);
}
DO_CMD(do_west)
{
printf("서쪽 : %s\n", msg);
}
DO_CMD(do_south)
{
printf("남쪽 : %s\n", msg);
}
DO_CMD(do_north)
{
printf("북쪽 : %s\n", msg);
}
DO_CMD(do_quit)
{
printf("종료 : %s\n", msg);
}
//////////////////////////////////////////////
// 참조하기 위한 함수 부분
//
void in_game_command_function(struct login_list *stList, unsigned char ucBuf[])
{
int cmd_no;
unsigned char cmd[1024], arg[1024];
// 버퍼의 내용을 '명령 + 아규먼트'의 형태로 나눈다.
parse_buffer(ucBuf, cmd, arg);
// 명령을 명령 리스트에서 확인해서 몇 번째 명령인지 알아온다.
for( cmd_no = 1; *cmd_list[cmd_no].command != '\n'; cmd_no++ )
{
if( !strcmp(cmd, cmd_list[cmd_no].command) )
{
break;
}
}
if( *cmd_list[cmd_no].command == '\n' )
{
write_string_to_tcp_socket( stList->sockfd, "확인 불가능한 명령입니다. 다시 입력해 주세요." );
return;
}
// 명령을 확인하여 해당 파일 포인터로 아규먼트와 같이 넘어간다.
((*cmd_list[cmd_no].command_pointer) (stList, arg));
}
using namespace std;
#define DO_CMD(name) void name(char *msg)
DO_CMD(do_east);
DO_CMD(do_west);
DO_CMD(do_south);
DO_CMD(do_north);
DO_CMD(do_quit);
// 명령어 해석 함수
void command_interpreter(char *cmd);
// 명령 목록 구조체
struct command_info {
char *command;
void (*command_pointer) (char *arg);
};
// 명령 목록 리스트
struct command_info cmd_list[] = {
{ "RESERVED", 0 },
{ "동" , do_east },
{ "서" , do_west },
{ "남" , do_south },
{ "북" , do_north },
{ "종료" , do_quit },
{ "\n" , 0 }
};
int main(int argc, char **argv)
{
char cmd[20];
char *msg = "메시지 내용";
printf( "명령 입력(동, 서, 남, 북, 종료) : " );
scanf( "%s", cmd );
command_interpreter( cmd );
return 0;
}
// 명령에 대한 함수포인터 분기 부분을 제작중
// -- 진행중 --
void command_interpreter(char *cmd)
{
for(int cmd_no = 1; i < 4; i++)
{
cmd_list[i].command
}
}
DO_CMD(do_east)
{
printf("동쪽 : %s\n", msg);
}
DO_CMD(do_west)
{
printf("서쪽 : %s\n", msg);
}
DO_CMD(do_south)
{
printf("남쪽 : %s\n", msg);
}
DO_CMD(do_north)
{
printf("북쪽 : %s\n", msg);
}
DO_CMD(do_quit)
{
printf("종료 : %s\n", msg);
}
//////////////////////////////////////////////
// 참조하기 위한 함수 부분
//
void in_game_command_function(struct login_list *stList, unsigned char ucBuf[])
{
int cmd_no;
unsigned char cmd[1024], arg[1024];
// 버퍼의 내용을 '명령 + 아규먼트'의 형태로 나눈다.
parse_buffer(ucBuf, cmd, arg);
// 명령을 명령 리스트에서 확인해서 몇 번째 명령인지 알아온다.
for( cmd_no = 1; *cmd_list[cmd_no].command != '\n'; cmd_no++ )
{
if( !strcmp(cmd, cmd_list[cmd_no].command) )
{
break;
}
}
if( *cmd_list[cmd_no].command == '\n' )
{
write_string_to_tcp_socket( stList->sockfd, "확인 불가능한 명령입니다. 다시 입력해 주세요." );
return;
}
// 명령을 확인하여 해당 파일 포인터로 아규먼트와 같이 넘어간다.
((*cmd_list[cmd_no].command_pointer) (stList, arg));
}
덧글을 달아 주세요