📄 move_server.cc
字号:
#include <map>#include <string>#include <stdio.h>#include <stdarg.h>#include <unistd.h>using namespace std;#include <listener.h>#include <socket.h>#include "my_server.h"#include "m_GameServer.h"#ifndef PORT#define PORT 4212#endifvoid socketHandler(Socket *, string data);//-----------------------------------------------------------------------------------------------------MyGameRoomServer::MyGameRoomServer(int ms,int mp) { int i,j; GameRoomServer::GameRoomServer(); Max_GameServer=ms; Max_GamePlayer=mp; for( i = 0; i < MAXMSG; i ++ ) { m_pMsg[i] = NULL ; } for(i=0;i<Max_GameServer;i++) { m_GameServer[i]=new MyGameServer; m_GameServer[i]->m_GamePlayer=m_GamePlayer; m_GameServer[i]->Game_init(i,300);// //printf("%d \n",i); } for(i=0;i<Max_GamePlayer;i++) { m_GamePlayer[i]=new MyGamePlayer; }}//-----------------------保存用户int MyGameRoomServer::SavePlayerInfo(int player_id,const char *name) { char goodstr[4098]; char sql[10240]; MyGamePlayer *u=NULL; if(player_id!=NONE) { u=(MyGamePlayer *)m_GamePlayer[player_id]; u->UserBody.UnDefine_Emend(goodstr);// //printf("sql coming\n"); sprintf(sql, "update city_online set money=%d,level=%d,exp=%d,hp=%d,mp=%d,sp=%d,body_goods='%s',box_goods='%s' where user_name='%s'", u->UserBody.Money, u->UserBody.Level, u->UserBody.Exp, u->UserBody.HP, u->UserBody.MP, u->UserBody.SP, goodstr, "", u->UserBody.user_name); // mysql.DoQuery(sql); // //printf("sql here:%s",sql); } return 0;}int MyGameRoomServer::CheckPlayerLogin(const char *u_name,const char *u_pass,const char *u_ext) { int is_log; char sql[1024]; is_log=1; sprintf(sql, "select passwd,nickname from user where name='%s'", u_name); if(mysql.Query(sql)!=-1){ if(mysql.num_rows>0){ mysql.GetData(); if(strcmp(mysql.row[0],u_pass)==0) is_log=0;// if(is_log==0 && strchr(mysql.row[1],'|')==0) is_log=1;// if(is_log==0 && strchr(mysql.row[1],'\\')==0) is_log=1;// if(is_log==0 && strchr(mysql.row[1],'/')==0) is_log=1;// if(is_log==0 && strchr(mysql.row[1],'.')==0) is_log=1; } mysql.FreeResult(); } return is_log; }bool MyGameRoomServer::GmCommand( int p_msg2, char *p_data ) { //printf("\t\t\t\tGmCommand\n"); switch (p_msg2) { case MSG_GM_CMD_BULLETIN : // 发公告 ////printf("\t\t\tMSG_GM_CMD_BULLETIN\n"); //printf("\t\t\t\tp_data = %s\n",p_data); int tt,cc ; char msg[1024] = "" ; sscanf(p_data,"%d|%d|%[^|]",&tt,&cc,msg) ; //printf("\t\t\t tt = %d , cc = %d , msg = %s\n",tt,cc,msg); for( int i = 0; i < MAXMSG; i ++ ){ if( ! m_pMsg[i] ){ //printf("\t\t\tmsg num = %d\n",i); m_pMsg[i] = new CMessage( tt,cc,msg ) ; char sendbuf[512] ; send_cmd_msg(sendbuf,V_MSG_USERLEVEL,MSG_GM_CMD,MSG_GM_CMD_BULLETIN,"1|1"); break ; } } break ; } return true ;}bool MyGameRoomServer::CheckBull() { return true ;}void MyGameRoomServer::time_process(void){ static int sendtime = 0 ; if( ++ sendtime >= 80 ){ // 240 is 1 min(240/4=60s) system("date"); //printf("\t\t\t----------- sendtime = %d ---------------\n",sendtime) ; sendtime = 0 ; for( int i = 0; i < MAXMSG; i ++ ) { if( m_pMsg[i] != NULL ) { if( m_pMsg[i]->CheckTime() ) { char sendbuf[1024],mybuf[1024] ; char msg[512] ; m_pMsg[i]->GetMsg(msg) ; sprintf( mybuf,"0|%s",msg) ; send_cmd_msg(sendbuf,V_MSG_USERLEVEL,MSG_GM_CMD,MSG_GM_CMD_BULLETIN,mybuf); //printf("\t\t\t\t\tSendMeg::%s\n",sendbuf); for( int j = 0; j < Max_GameServer; j ++ ) { // if( strcmp(m_GamePlayer[j]->m_name,"")!=0 ){ // //printf("\t\t\tm_GameServer[0]->send_all2(sendbuf,j)::%d\n",m_GamePlayer[j]->m_room_id); m_GameServer[j]->send_all(sendbuf,NONE); // } } if( ! m_pMsg[i]->CheckCount() ){ delete m_pMsg[i] ; m_pMsg[i] = NULL ; } } } } }}Listener *listener;MyGameRoomServer GM(500,400);GoodsObj GoodsDB[Goods_MAX];GoodsWord GoodsWordS[Words_MAX];GoodsShop GoodsShopS[Shop_MAX];DataSQL mysql;int main(int argc, char **argv){ // Create a listener and add a port. int i,gid; if ( mysql.ConnectDB("192.168.0.21","online","oncity123","pcb")==-1 ) { exit(1); } system("date"); srand( unsigned(time(NULL))); GoodsEffect tmp_effect; GoodsAtt tmp_emend; GoodsAtt tmp_confine; //init /* m:money use_flag:can use give_flag:can give other user sell_flag:can sell goods level:level pattern:物品装备在身上位置 emend:物品属性(魔法。。。。) confine:装备限制 add_hp/add_mp/add_sp:使用后增加hp/mp... ext_swf */ if(mysql.Query("select id,name,m,use_flag,give_flag,sell_flag,level,pattern,emend,confine,add_hp,add_mp,add_sp,ext_swf from goods where convert='yes'")!=-1){ if(mysql.num_rows){ while(mysql.GetData()){ gid=atoi(mysql.row[0]); GoodsDB[gid].init(mysql.row); } } mysql.FreeResult(); }else{ exit(1); } if(mysql.Query("select id,ahead,after,comeby from goods_code")!=-1){ if(mysql.num_rows){ while(mysql.GetData()){ gid=atoi(mysql.row[0]); GoodsWordS[gid].id=gid; strncpy(GoodsWordS[gid].ahead,mysql.row[1],Words_name_size); strncpy(GoodsWordS[gid].after,mysql.row[2],Words_name_size); Define_Emend(mysql.row[3],&GoodsWordS[gid].att); } } mysql.FreeResult(); }else{ exit(1); } if(mysql.Query("select id,goods_list from shop where convert='yes'")!=-1){ if(mysql.num_rows){ while(mysql.GetData()){ gid=atoi(mysql.row[0]); GoodsShopS[gid].init(gid,mysql.row[1]); } } }else{ exit(1); } listener = new Listener(); listener->addListenPort(PORT); //printf("Bind %d\n",PORT); // Process events. for(;;) { listener->do_select(); GM.SendAll(); GM.time_process(); } delete listener; return 0;}void socketHandler(Socket *socket, string data){ int n; switch(socket->status()) { case Socket::New: socket->setStatus(Socket::Ok); // TODO: move to code that calls handler break; case Socket::Close: case Socket::Closed: n=GM.FindPlayer_BySocket(socket->fd()); if(n != NONE ) { // save here GM.SavePlayerInfo(n,GM.m_GamePlayer[n]->m_name); GM.PlayerExit(GM.m_GamePlayer[n]->m_name); } break; case Socket::Ok: ////printf("here %s\n",data.c_str()); GM.process(socket,data.c_str()); break; }}void MyGameRoomServer::my_process(char p_msg1,char p_msg2,char p_msg3,char *p_data,int player_id,int server_n) { int i,j,k,smiley,money; int dust_id,mapx,mapy; int mstate,sstate,shop_id; char mystate[1024]; int src_pos,src_id,target_pos,target_id; char buf[4096],buf1[4096],buf_tmp[4096]; src_pos=target_pos=src_id=target_id=NONE; money=0; User_Goods_ST newdust; MyGamePlayer *u=NULL; if(player_id!=NONE) u=(MyGamePlayer *)m_GamePlayer[player_id]; MyGameServer *s=NULL; if(server_n!=NONE) s=(MyGameServer *)m_GameServer[server_n]; //自定义消息处理 /* case MSG_SAY: if( player_id!=NONE && server_n!=NONE) { sprintf(buf1,"%s: %s",m_GamePlayer[player_id]->m_name,p_data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -