⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 command.c

📁 我搜集到的一个java常用类库的源代码
💻 C
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <curses.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/time.h>#include "mjdef.h"#include "qkmj.h"#define TABLE 1#define LIST 2#define PLAYER 3#define JOIN 4#define SERV 5#define QUIT 6#define EXIT 7#define WHO 8#define SIT 9#define NUM 10#define NEW 11#define SHOW 12#define LEAVE 13#define HELP 14#define NOTE 15#define STAT 16#define LOGIN 17#define PASSWD 18#define preserve1 19#define BROADCAST 20#define KICK 21#define KILL 22#define INVITE 23#define MSG 24#define SHUTDOWN 25#define LURKER 26#define FIND 27#define BEEP 28#define EXEC 29#define FREE 30#define S_PLAYER 31#define S_JOIN 32#define S_HELP 33#define S_WHO 34#define S_SERV 35#define S_LEAVE 36#define S_TABLE 37#define S_QUIT 38int enable_kick=1;int enable_exec=0;char commands[100][10]={"","TABLE","LIST","PLAYER","JOIN","SERV","QUIT","EXIT","WHO","SIT","NUM",  "NEW","SHOW","LEAVE","HELP","NOTE","STAT","LOGIN","PASSWD","preserve1",  "BROADCAST","KICK","KILL","INVITE","MSG","SHUTDOWN","LURKER","FIND","BEEP",  "EXEC","FREE", "P", "J", "H", "W", "S", "L", "T", "Q"};void Tokenize(strinput)char *strinput;{  int k1, klast, Ltok, k1old;  char *token;  char str[255];  narg=1;  strcpy(str, strinput);  token=strtok(str, " \n\t\r");  if(token==NULL)  {    narg=0;    return;  }  Ltok=strlen(token);  strcpy(cmd_argv[narg], token);  arglenv[narg]=Ltok;  while(1)  {    token=strtok('\0', " \n\t\r");    if(token==NULL)      break;    narg++;    Ltok=strlen(token);    strcpy(cmd_argv[narg], token);    arglenv[narg]=Ltok;  }}strupr(upper,org)char *upper;char *org;{  int i,len;  len=strlen(org);  for(i=0;i<len;i++)    upper[i]=toupper(org[i]);  upper[len]='\0';}command_mapper(cmd)char *cmd;{  char cmd_upper[255];  int i;  strupr(cmd_upper,cmd);  i=1;  while(commands[i][0]!='\0')  {    if( strcmp(cmd_upper,commands[i]) == 0)      return(i);    i++;  }  return(0);}who(name)char *name;{  char msg_buf[255];  int i;  if(name[0]!=0)  {    sprintf(msg_buf,"006%s",name);    write_msg(gps_sockfd,msg_buf);    return;  }  if(!in_join && !in_serv)  {    display_comment("你要查看那一桌?");    return;  }  display_comment("----------------   此桌使用者   ------------------");  msg_buf[0]=0;  for(i=1;i<MAX_PLAYER;i++)  {    if(strlen(msg_buf)>49)    {      display_comment(msg_buf);      msg_buf[0]=0;    }    if(player[i].in_table)    {      strcat(msg_buf,player[i].name);      strcat(msg_buf,"  ");    }  }  if(msg_buf[0]!=0)    display_comment(msg_buf);   display_comment("--------------------------------------------------");}help(){  send_gps_line("-----------------   使用说明   -------------------");  send_gps_line("/HELP          /H   查看使用说明");  send_gps_line("/TABLE         /T   查看所有的桌");  send_gps_line("/FREE               查看目前人数未满的桌");  send_gps_line("/PLAYER        /P   查看目前在线上的使用者");  send_gps_line("/LURKER             查看闲置的使用者");  send_gps_line("/FIND <名称>        找寻此使用者");  send_gps_line("/WHO <名称>    /W   查看此桌的使用者");  send_gps_line("/SERV          /S   开桌");  send_gps_line("/JOIN <名称>   /J   加入一桌");  send_gps_line("/MSG <名称> <讯息>  送讯息给特定使用者");  send_gps_line("/INVITE <名称>      邀请使用者到此桌");  send_gps_line("/KICK <名称>        将使用者踢出此桌 (桌长才可用)");  send_gps_line("/NOTE <附注>        更改此桌的附注");  send_gps_line("/LEAVE         /L   离开一桌");  send_gps_line("/STAT <名称>        看使用者状态");  send_gps_line("/BEEP [ON|OFF]      设定声音开关");  send_gps_line("/PASSWD             更改密码");  send_gps_line("/QUIT          /Q   离开");  send_gps_line("--------------------------------------------------");}command_parser(msg)char *msg;{  int i;  int cmd_id;  char sit;  char table_upper[255];  char msg_buf[255];  char ans_buf[255];  char ans_buf1[255];  if(msg[0]=='/')  {    Tokenize(msg+1);    cmd_id=command_mapper(cmd_argv[1]);    switch(cmd_id)    {      case 0:        send_gps_line("没有这个指令");        break;      case TABLE:      case S_TABLE:        write_msg(gps_sockfd,"003");        break;      case FREE:        write_msg(gps_sockfd,"013");        break;      case LIST:      case PLAYER:      case S_PLAYER:        write_msg(gps_sockfd,"002");        break;      case JOIN:      case S_JOIN:        if(!pass_login)        {          display_comment("请先 login 一个名称");          break;        }        if(in_join || in_serv)        {          display_comment("请先离开此桌");          break;        }        clear_variable();        if(in_join)        {          close_join();          write_msg(gps_sockfd,"205");          init_global_screen();        }        if(in_serv)        {          close_serv();          write_msg(gps_sockfd,"205");          init_global_screen();        }        sprintf(msg_buf,"011%s",cmd_argv[2]);        write_msg(gps_sockfd,msg_buf);        /* Now wait for GPS's answer */        break;      case SERV:      case S_SERV:        if(!pass_login)        {                    display_comment("请先 login 一个名称");          break;        }        if(in_join || in_serv)        {          display_comment("请先离开此桌");          break;        }        clear_variable();        if(in_join)        {          close_join();          write_msg(gps_sockfd,"205");          init_global_screen();        }        if(in_serv)        {          close_serv();          write_msg(gps_sockfd,"205");          init_global_screen();        }        init_serv_socket();        sprintf(msg_buf,"012%d",SERV_PORT-1);        write_msg(gps_sockfd,msg_buf);        my_id=1;        in_serv=1;        on_seat=0;        player_in_table=1;        player[1].sit=1;        player[1].money=my_money;        player[1].id=my_gps_id;        strcpy(player[1].name,my_name);        my_sit=1;        for(i=0;i<=4;i++)          table[i]=0;        table[1]=1;        if(player_in_table==PLAYER_NUM)        {          init_playing_screen();          opening();          open_deal();        }        strcpy(player[1].name,my_name);        player[1].in_table=1;        send_gps_line("开桌");        break;      case QUIT:      case S_QUIT:      case EXIT:        leave();        break;      case SHOW:/*        sprintf(msg_buf,"%d",pool[cmd_argv[2][0]-'0'].card[atoi(cmd_argv[3])]);       display_comment(msg_buf);show_allcard(cmd_argv[2][0]-'0');*/        break;      case WHO:      case S_WHO:        if(narg==2)          who(cmd_argv[2]);        else          who("");        break;      case NUM:        i=cmd_argv[2][0]-'0';        if(i>=1 && i<=4)          PLAYER_NUM=i;        break;      case NEW:        if(in_serv)        {          broadcast_msg(1,"290");          opening();          open_deal();        }        else        {          write_msg(table_sockfd,"290");          opening();        }        break;      case LEAVE:      case S_LEAVE:        if(in_join)        {          in_join=0;          close_join();          write_msg(gps_sockfd,"205");          init_global_screen();        }        if(in_serv)        {          in_serv=0;          close_serv();          write_msg(gps_sockfd,"205");          init_global_screen();        }        input_mode=TALK_MODE;        break;       case HELP:      case S_HELP:        help();        break;      case NOTE:        sprintf(msg_buf,"004%s",msg+6);        write_msg(gps_sockfd,msg_buf);        break;      case STAT:        if(narg<2)          strcpy(cmd_argv[2],my_name);        sprintf(msg_buf,"005%s",cmd_argv[2]);        write_msg(gps_sockfd,msg_buf);        break;      case LOGIN:        break;      case BROADCAST:        sprintf(msg_buf,"007%s",msg+11);        write_msg(gps_sockfd,msg_buf);        break;      case MSG:        if(narg<=2)          break;        if(in_join || in_serv)        {          for(i=1;i<=4;i++)          {            if(table[i] && strcmp(cmd_argv[2],player[table[i]].name)==0)            {              sprintf(msg_buf,"%s",msg+5+strlen(cmd_argv[2])+1);              send_talk_line(msg_buf);              goto finish_msg;            }          }        }        sprintf(msg_buf,"009%s",msg+5);        write_msg(gps_sockfd,msg_buf);        sprintf(msg_buf,"-> *%s* %s",cmd_argv[2],msg+5+strlen(cmd_argv[2])+1);        msg_buf[talk_right]=0;        display_comment(msg_buf);        finish_msg:;        break;      case SHUTDOWN:        write_msg(gps_sockfd,"500");        break;      case LURKER:        write_msg(gps_sockfd,"010");        break;      case FIND:        if(narg<2)        {          display_comment("你要找谁呢?");          break;        }        sprintf(msg_buf,"021%s",cmd_argv[2]);        write_msg(gps_sockfd,msg_buf);        break;      case EXEC:        /*if(!enable_exec)          break;        nl();        echo();        nocbreak();        system(msg+6);        cbreak();        nonl();        noecho();        wait_a_key("");        redraw_screen();*/        break;      case BEEP:        if(narg<2)        {          sprintf(msg_buf,"目前声音设定为%s",(set_beep==1) ? "开启":"关闭");          display_comment(msg_buf);        }        else        {          strupr(ans_buf,cmd_argv[2]);          if(strcmp(ans_buf,"ON")==0)          {            set_beep=1;            display_comment("开启声音");          }          if(strcmp(ans_buf,"OFF")==0)          {            set_beep=0;            display_comment("关闭声音");          }        }        break;      case PASSWD:        ans_buf[0]=0;        ask_question("请输入你原来的密码:",ans_buf,8,0);        ans_buf[8]=0;        if(strcmp(my_pass,ans_buf)!=0)        {          wait_a_key("密码错误,更改失败!");          break;        }        ans_buf[0]=0;        ask_question("请输入你要更改的密码:",ans_buf,8,0);        ans_buf1[0]=0;        ask_question("请再输入一次确认:",ans_buf1,8,0);        ans_buf[8]=0;        ans_buf1[8]=0;        if(strcmp(ans_buf,ans_buf1)==0)        {          sprintf(msg_buf,"104%s",ans_buf);          write_msg(gps_sockfd,msg_buf);          strcpy(my_pass,ans_buf);          wait_a_key("密码已更改!");        }        else        {          wait_a_key("两次密码不同,更改失败!");        }        break;      case KICK:        if(!enable_kick)          break;        if(in_serv)        {          if(narg<2)          {            display_comment("要把谁踢出去呢?");          }          else          {            if(strcmp(my_name,cmd_argv[2])==0)            {              display_comment("抱歉, 自己不能踢自己");              break;            }            for(i=2;i<MAX_PLAYER;i++)            {              if(player[i].in_table && strcmp(player[i].name,cmd_argv[2])==0)              {                sprintf(msg_buf,"101%s 被踢出此桌",cmd_argv[2]);                display_comment(msg_buf+3);                broadcast_msg(1,msg_buf);                write_msg(player[i].sockfd,"200");                close_client(i);                goto finish_kick;              }            }            display_comment("此桌没有这个人");          }        }        else        {          display_comment("此命令只有桌长可用");        }        finish_kick:;        break;      case KILL:        if(narg>=2)        {          sprintf(msg_buf,"202%s",cmd_argv[2]);          write_msg(gps_sockfd,msg_buf);        }        break;      case INVITE:        if(narg<2)        {          display_comment("你打算邀请谁?");          break;        }        sprintf(msg_buf,"008%s",cmd_argv[2]);        write_msg(gps_sockfd,msg_buf);        sprintf(msg_buf,"邀请 %s 加入此桌",cmd_argv[2]);        display_comment(msg_buf);        break;      default:        err("Unknow command id");        display_comment(msg);        break;    }  }  else    send_talk_line(msg);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -