📄 message.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"#include "misc.h" int tt;int convert_msg_id(msg)unsigned char *msg;{ int i; char msg_buf[255]; for(i=0;i<3;i++) if(msg[i]<'0' || msg[i]>'9') { display_comment("Invalid message id"); sprintf(msg_buf,"From %d (%d) id=%d len=%d %s", tt,gps_sockfd,msg[i],strlen(msg),msg); display_comment(msg_buf); } return(msg[0]-'0')*100+(msg[1]-'0')*10+(msg[2]-'0');}process_msg(player_id,id_buf,msg_type)int player_id;unsigned char *id_buf;int msg_type;{ int msg_id; unsigned char buf[255]; char msg_buf[255]; char ans_buf[255]; char ans_buf1[255]; int i,j,sit; int alen; tt=player_id; strcpy(buf,id_buf); msg_id=convert_msg_id(id_buf);/* sprintf(msg_buf,"%d from %d %d",msg_id,player_id,msg_type); display_comment(msg_buf); */ switch(msg_type) { case(FROM_GPS): if(msg_id!=102) read_msg(gps_sockfd,buf+3); switch(msg_id) { case 2: if(my_pass[0]!=0) strcpy(ans_buf,my_pass); else { ans_buf[0]=0; ask_question("请输入你的密码:",ans_buf,8,0); ans_buf[8]=0; } sprintf(msg_buf,"102%s",ans_buf); write_msg(gps_sockfd,msg_buf); strcpy(my_pass,ans_buf); break; case 3: pass_login=1; input_mode=TALK_MODE; display_comment("请打 /HELP 查看简单指令说明"); sprintf(msg_buf,"004%s",my_note); write_msg(gps_sockfd,msg_buf); break; case 4: pass_count++; my_pass[0]=0; if(pass_count==3) leave(); do { ans_buf[0]=0; ask_question("密码错误! 请重新输入你的名称:",ans_buf,10,1); } while(ans_buf[0]==0); ans_buf[10]=0; sprintf(msg_buf,"101%s",ans_buf); write_msg(gps_sockfd,msg_buf); strcpy(my_name,ans_buf); break; case 5: /* creat a new account */ ans_buf[0]=0; ask_question("看来你是个新朋友, 你要使用这个名称吗?",ans_buf,1,1); if(ans_buf[0]=='y' || ans_buf[0]=='Y') { 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; while(1) { if(strcmp(ans_buf,ans_buf1)==0) { sprintf(msg_buf,"103%s",ans_buf); write_msg(gps_sockfd,msg_buf); strcpy(my_pass,ans_buf); break; } else { 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; } } } else { do { ans_buf[0]=0; ask_question("请重新输入你的名称:",ans_buf,10,1); } while(ans_buf[0]==0); ans_buf[10]=0; sprintf(msg_buf,"101%s",ans_buf); write_msg(gps_sockfd,msg_buf); strcpy(my_name,ans_buf); } break; case 6: ans_buf[0]=0; ask_question("重覆进入! 你要杀掉另一个帐号吗?",ans_buf,1,1); if(ans_buf[0]=='y' || ans_buf[0]=='Y') { ans_buf[0]=0; ask_question("请输入你的密码:",ans_buf,8,0); ans_buf[8]=0; sprintf(msg_buf,"102%s",ans_buf); write_msg(gps_sockfd,msg_buf); strcpy(my_pass,ans_buf); } else leave(); break; case 10: /* 离线 */ leave(); break; case 11: switch(buf[3]) { case '0': Tokenize(buf+4,1); sprintf(msg_buf,"连往 %s port %s",cmd_argv[1],cmd_argv[2]); send_gps_line(msg_buf); init_socket(cmd_argv[1],atoi(cmd_argv[2]),&table_sockfd); FD_SET(table_sockfd,&afds); in_join=1; break; case '1': send_gps_line("没有这个名字"); break; case '2': send_gps_line("连不上去"); break; } break; case 101: send_gps_line(buf+3); break; case 102: display_news(gps_sockfd); break; case 120: strcpy(msg_buf,buf+3); *(msg_buf+5)=0; new_client_id=atoi(msg_buf); new_client_money=atol(buf+8); if(!in_serv) { my_gps_id=new_client_id; my_money=new_client_money; } break; case 200: close(gps_sockfd); endwin(); break; case 211: strcpy(new_client_name,buf+3); new_client=1; break; default: sprintf(msg_buf,"msg_id=%d",msg_id); display_comment(msg_buf); } break; case(FROM_CLIENT): read_msg(player[player_id].sockfd,buf+3); switch(msg_id) { case 101: send_gps_line(buf+3); broadcast_msg(player_id,buf); break; case 102: display_comment(buf+3); broadcast_msg(player_id,buf); break; case 200: close_client(player_id); break; case 290: broadcast_msg(player_id,buf); opening(); open_deal(); break; case 313: /* Send a card to client */ send_card_request=1; break; case 315: /* Client finished */ /* next_player_request=1; */ break; case 401: /* Others throw a card */ pool[player[player_id].sit].time+=thinktime(); display_time(player[player_id].sit); sprintf(msg_buf,"312%c%f",player[player_id].sit, pool[player[player_id].sit].time); broadcast_msg(1,msg_buf); pool[player[player_id].sit].first_round=0; in_kang=0; show_newcard(player[player_id].sit,3); sprintf(msg_buf,"314%c%c",player[player_id].sit,3); broadcast_msg(player_id,msg_buf); sprintf(msg_buf,"402%c%c",player_id,buf[3]); broadcast_msg(player_id,msg_buf); current_id=player_id; current_card=buf[3]; show_cardmsg(player[player_id].sit,buf[3]); throw_card(buf[3]); return_cursor(); sit=player[player_id].sit; for(i=0;i<pool[sit].num;i++) if(pool[sit].card[i]==current_card) break; pool[sit].card[i]=pool[sit].card[pool[sit].num]; sort_pool(sit); check_on=1; send_card_on=0; next_player_on=0; /* set in_check flag for players except the current player */ for(i=1;i<=4;i++) { if(table[i]>0 && table[i]!=player_id) check_card(i,buf[3]); } for(i=1;i<=4;i++) { if(table[i]!=1 && i!=turn) for(j=1;j<check_number;j++) { if(check_flag[i][j]) { sprintf(msg_buf,"501%c%c%c%c",check_flag[i][1]+'0', check_flag[i][2]+'0',check_flag[i][3]+'0', check_flag[i][4]+'0'); write_msg(player[table[i]].sockfd,msg_buf); in_check[i]=1; break; /* check next player */ } else in_check[i]=0; } } for(j=1;j<check_number;j++) if(check_flag[my_sit][j]) { init_check_mode(); in_check[1]=1; goto in_check_now1; } in_check[1]=0; in_check_now1:; break; case 450: wait_hit[player[player_id].sit]=1; break; case 501: who(player[player_id].sockfd); break; case 510: in_check[player[player_id].sit]=0; check_for[player[player_id].sit]=buf[3]-'0'; break; case 515: next_player_request=0; turn=player[player_id].sit; sprintf(msg_buf,"310%c",turn); broadcast_msg(player_id,msg_buf); display_point(turn); return_cursor(); break; case 525:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -