📄 m_gameserver.cc
字号:
LeaveGameServer(m_GamePlayer[n]->m_room_id,n); m_GamePlayer[n]->clear(); OnlinePlayer--; } return n;}int GameRoomServer::CheckPlayerExist(char *name) { int i; for(i=0;i<Max_GamePlayer;i++) { if(m_GamePlayer[i]->m_status!=GamePlayerStatus::Empty && strcmp(m_GamePlayer[i]->m_name,name)==0 ) break; } if( i==Max_GamePlayer ) i=NONE; return i; }void GameRoomServer::ShowAllGame(void) { int i; for(int j=0;j<Max_GamePlayer;j++) { if( m_GamePlayer[j]->m_status!=GamePlayerStatus::Empty ) { //printf("p=%s,%d\n",m_GamePlayer[j]->m_name,m_GamePlayer[j]->m_fd); } }}int GameRoomServer::FindPlayer_BySocket(unsigned int fd) { int i; for(i=0;i<Max_GamePlayer;i++) { if(m_GamePlayer[i]->m_status!=GamePlayerStatus::Empty && m_GamePlayer[i]->m_fd==fd ) break; } if( i==Max_GamePlayer ) i=NONE; return i; }void GameRoomServer::GetAllPlayer(char *buf) { int i; char buf1[1024]; buf[0]=0;buf1[0]=0; for(i=0;i<Max_GamePlayer;i++) { if(m_GamePlayer[i]->m_status!=GamePlayerStatus::Empty) { m_GamePlayer[i]->GetPlayerStatus(buf1); strcat(buf1,","); strcat(buf,buf1); } }}//--------------------------------------------------------------------------------------void GameRoomServer::send_cmd_all(char p_level,char p_msg1,char p_msg2,char *msg,unsigned int filter_socket) { char buf[1024]; int i; send_cmd_msg(buf,p_level,p_msg1,p_msg2,msg); for ( int i=0;i<Max_GamePlayer;i++ ){ if(m_GamePlayer[i]->m_status==GamePlayerStatus::Free || m_GamePlayer[i]->m_status==GamePlayerStatus::Room ) { if( filter_socket && filter_socket == m_GamePlayer[i]->m_fd ) { } else { m_GamePlayer[i]->AddSocketBuf(buf); } } }}int GameRoomServer::SendAll(void){ int i; for ( int i=0;i<Max_GamePlayer;i++ ){ if(m_GamePlayer[i]->m_status!=GamePlayerStatus::Empty && m_GamePlayer[i]->m_SocketBuf.length() ) { //printf("buf %d,%s ",m_GamePlayer[i]->m_fd,m_GamePlayer[i]->m_SocketBuf.c_str()); write( m_GamePlayer[i]->m_fd,m_GamePlayer[i]->m_SocketBuf.c_str(),m_GamePlayer[i]->m_SocketBuf.length()+1 ); //printf(" [end]\n"); m_GamePlayer[i]->m_SocketBuf.clear(); } } return 0;}void GameRoomServer::time_process(void) { int i,c;// static int save_time=0; time_t t; time(&t); if( difftime(t,up_time) ) { time(&up_time); for(i=0;i<Max_GameServer;i++) { if(m_GameServer[i]->m_TimeFlag==true) { m_GameServer[i]->time_process(); } }/* if( ++save_time==5 ) { save_time=0; //printf("\t\t\t auto save %d\n",OnlinePlayer); for ( i=0,c=0;c<OnlinePlayer && i<Max_GamePlayer;i++ ){ if(m_GamePlayer[i]->m_status!=GamePlayerStatus::Empty) { c++; SavePlayerInfo(i,m_GamePlayer[i]->m_name); } } }*/ }}void GameRoomServer::process(Socket *socket, const char *data) { int player_id,server_n,player_slot,i,j,k; char buf[4096],buf1[4096],buf2[4096],buf3[4096],buf_tmp[4096]; p_level=data[0]; p_msg1=data[2]; p_msg2=data[3]; p_msg3=data[4]; strncpy(p_data,data+6,128); if( strcmp( data,"count" ) ==0 ) { sprintf(buf,"%d",OnlinePlayer); write(socket->fd(),buf,strlen(buf)); socket->setStatus(Socket::Close); return; } //printf("%d,%d,%d %s\n", p_level,p_msg1,p_msg2, data); if(p_level==V_MSG_USERLEVEL) { player_id=FindPlayer_BySocket(socket->fd()); if(player_id!=NONE) { server_n=m_GamePlayer[player_id]->m_room_id; } else { server_n=NONE; } switch (p_msg1) { case MSG_USERLOG: //登陆消息 switch (p_msg2) { case SUB_MSG_USER_ALL: if( player_id!=NONE ) { buf_tmp[0]=0; GetAllPlayer(buf_tmp); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_USER_ALL,buf_tmp); m_GamePlayer[player_id]->AddSocketBuf(buf); } break; case SUB_MSG_LOGIN_ASK: char u_name[20],u_pass[20],u_ext[1024]; sscanf(p_data,"%[^|]|%[^|]|%s",u_name,u_pass,u_ext); if( CheckPlayerExist(u_name)!=NONE ) { send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_LOGIN_NO,"名字重复,请换别的名字进入."); write(socket->fd(),buf,strlen(buf)+1); } else { if( CheckPlayerLogin(u_name,u_pass,u_ext) ) { send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_LOGIN_NO,"没有该帐号,或密码错误."); write(socket->fd(),buf,strlen(buf)+1); } else { //新用户登陆 player_id=PlayerJoin(u_name,u_pass); if(player_id != NONE ) { m_GamePlayer[player_id]->SetData(socket->fd(),u_ext); //设置玩家状态 //printf("new here\n"); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_LOGIN_PASS,""); m_GamePlayer[player_id]->AddSocketBuf(buf); // m_GamePlayer[player_id]->GetPlayerStatus(buf); //返回玩家状态// send_cmd_all(V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_USER_LOGIN,buf,socket->fd()); } } } break; } break; case MSG_ROOM: //大厅消息处理 if( player_id!=NONE ) { switch (p_msg2) { case MSG_ROOM_ALL: //读取所有玩家状态 buf_tmp[0]=0; if(server_n!=NONE) { m_GameServer[server_n]->GetAllPlayer(buf_tmp); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_ROOM,MSG_ROOM_ALL,buf_tmp); m_GamePlayer[player_id]->AddSocketBuf(buf); } break; case MSG_ROOM_JOIN: //加入 if(1 || m_GamePlayer[player_id]->m_status==GamePlayerStatus::Free) { int u_x,u_y; sscanf(p_data,"%d|%d|%d",&server_n,&u_x,&u_y); printf("-------%s-------玩家加入 %d\n",m_GamePlayer[player_id]->m_name, server_n); player_slot=JoinGameServer(server_n,player_id); //printf("join here %d\n",server_n); if( player_slot!=ERROR ) { //成功加入处理 m_GamePlayer[player_id]->SetXY(u_x,u_y); sprintf(buf1,"%d",server_n); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_ROOM,MSG_ROOM_JOIN_OK,buf1); m_GamePlayer[player_id]->AddSocketBuf(buf);// m_GameServer[server_n]->send_playerlist(); m_GamePlayer[player_id]->GetPlayerStatus(buf1); //返回玩家状态 send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_USER_LOGIN,buf1); m_GameServer[server_n]->send_all(buf,player_id);// sprintf(buf1,"[系统消息]: %s 进入.",m_GamePlayer[player_id]->m_name);// send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,V_MSG_NONE,buf1);// m_GameServer[server_n]->send_all(buf); } else { //失败处理 send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_ROOM,MSG_ROOM_JOIN_FAIL,"加入失败."); m_GamePlayer[player_id]->AddSocketBuf(buf); } } break; case MSG_ROOM_PLAYER_LEAVE: if( server_n != NONE) { m_GameServer[server_n]->leave(player_id); printf("-------%s------玩家离开 %d\n",m_GamePlayer[player_id]->m_name, server_n); } break; } } break; case MSG_SAY: if( player_id!=NONE && server_n!=NONE) { if( p_msg2==SUB_MSG_SAYALL ) { sprintf(buf1, "%s|%s",m_GamePlayer[player_id]->m_name,p_data); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,SUB_MSG_SAYALL,buf1); m_GameServer[server_n]->send_all2(buf,player_id); }else if( p_msg2==SUB_MSG_SAYONE) { sprintf(buf1, "%s|%s",m_GamePlayer[player_id]->m_name,p_data); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,SUB_MSG_SAYONE,buf1); m_GameServer[server_n]->send_all2(buf,player_id); } /* if(p_msg2==SUB_MSG_SAYALL || p_data[0]=='|') { if( p_data[0]=='|' ) { sprintf(buf1,"%s 说: %s",m_GamePlayer[player_id]->m_name,p_data+1); //printf("\t\tsay1\n"); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,V_MSG_NONE,buf1); m_GameServer[server_n]->send_all2(buf,player_id); } else { sscanf(p_data,"%[^|]|%s",buf1,buf2); int p_id=CheckPlayerExist(buf1); if(p_id!=NONE) { //printf("\t\tsay2 p_data=%s,%s,%s\n",p_data,buf1,buf2); sprintf(buf3,"%s 对 %s 说: %s",m_GamePlayer[player_id]->m_name,buf1,buf2); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,V_MSG_NONE,buf3); m_GameServer[server_n]->send_all2(buf,player_id); } } } else { sscanf(p_data,"%[^|]|%s",buf1,buf2); int p_id=CheckPlayerExist(buf1); //printf("\t\tsay3\n"); if(p_id!=NONE) { sprintf(buf3,"%s 俏俏地对 %s 说: %s",m_GamePlayer[player_id]->m_name,buf1,buf2); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_SAY,V_MSG_NONE,buf3); m_GamePlayer[p_id]->AddSocketBuf(buf); m_GamePlayer[player_id]->AddSocketBuf(buf); } } */ } break; case MSG_MOVE: if( player_id!=NONE ) { unsigned int u_x,u_y; sscanf(p_data,"%d|%d",&u_x,&u_y); BaseGamePlayer *u; if(m_GamePlayer[player_id]->SetXY(u_x,u_y)) { u=m_GamePlayer[player_id]; sprintf(buf1,"%s|%d|%d",u->m_name,u_x,u_y); send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_MOVE,SUB_MSG_MOVE_OTHER,buf1); m_GameServer[server_n]->send_all(buf,NONE); } } break; } if(player_id!=NONE) { my_process(p_msg1,p_msg2,p_msg3,p_data,player_id,server_n); } }}void GameRoomServer::my_process(char p_msg1,char p_msg2,char p_msg3,char *p_data,int player_id,int server_n) {}/*int GameRoomServer::SavePlayerInfo(int player_id,const char *name) { return 0; }*/DataSQL::DataSQL(void) { //mysql=NULL; num_rows=0; error_no=0;}int DataSQL::ConnectDB(const char *host,const char *user,const char *pass,const char *db) { if( mysql_init(&mysql)==NULL ) { strcpy(error_str,"can't init"); return -1; } mysql_options(&mysql,MYSQL_OPT_COMPRESS,0); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc"); if (!mysql_real_connect(&mysql,host,user,pass,db,0,NULL,0)) { strcpy(error_str,mysql_error(&mysql)); return -1; } return 0;}int DataSQL::GetData(void) { if( row = mysql_fetch_row(result) ) { return 1; } else { return 0; }}int DataSQL::DoQuery(const char *sql) { //printf("SQL %s\n",sql); if (!mysql_query(&mysql,sql)) { return 0; } else { return -1; }}int DataSQL::Query(const char *sql) { if (!mysql_query(&mysql,sql)) { result = mysql_store_result(&mysql); num_rows=mysql_num_rows(result); } else { //sql 语法错 num_rows=-1; } //printf("SQL %s\n",sql); return num_rows;}void DataSQL::FreeResult(void) { mysql_free_result(result);}int DataSQL::CheckConnect(void) { /*CR_COMMANDS_OUT_OF_SYNC Commands were executed in an improper order. CR_SERVER_GONE_ERROR The MySQL server has gone away. CR_UNKNOWN_ERROR An unknown error occurred. */ return mysql_ping(&mysql);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -