static int cgiProcess(ExHttp *pHttp) { int ret = 0; void *handle = NULL; do { if ((handle = cgi_page_find(pHttp->url)) == NULL) { errorLog(pHttp, "CGI page not find"); ret = -1; break; } if (('P' == *(pHttp->method)) && ex_load_body(pHttp) < 0) { errorLog(pHttp, "body check error"); ret = -2; break; } if (decodeParam(pHttp) < 0) { errorLog(pHttp, "param decode error"); ret = -3; break; } if (cgi_handler(pHttp, handle) < 0) { errorLog(pHttp, "handler error"); ret = -4; } } while (0); if (*(pHttp->method) == 'P' && pHttp->postData != pHttp->curPos) free(pHttp->postData); ex_hash_clear(&(pHttp->paramMap)); return ret; }
int KeyBinding::decodeIntParam(const string& fun, unsigned num) { string numStr = decodeParam(fun, num); return atoi(numStr.c_str()); }
float KeyBinding::decodeFloatParam(const string& fun, unsigned num) { string numStr = decodeParam(fun, num); return (float)atof(numStr.c_str()); }
bool QueryRoomHandler::handle(CmdTask& task) { srand((int) time(0)); unsigned int tmp_user[4] = {0}; tmp_user[0] = (rand() % (1000-800+1))+ 800; tmp_user[1] = (rand() % ( 500-300+1))+ 300; tmp_user[2] = (rand() % ( 300-200+1))+ 200; tmp_user[3] = (rand() % ( 200-100+1))+ 100; DataXCmdPtr& pCmd = task.pCmd; if(!pCmd) { LOG4CPLUS_ERROR(FLogger, "convert command to dataxcmd failed."); return false; } int rst = checkCmd(pCmd, string("GetDirReq")); if(0 != rst) { LOG4CPLUS_ERROR(FLogger, "ckeck command failed. user id = " << pCmd->get_userid() << ", cmd_name = " << pCmd->get_cmd_name()); return false; } int game_id = 0; bool bSuccess = decodeParam(pCmd->get_datax(), game_id); if(!bSuccess) { LOG4CPLUS_ERROR(FLogger, "get game id from datax failed..."); return false; } //获取房间配置信息 vector<GameRoomInfo> room_list; GameRoomConfig* pRoomConfig = GameRoomConfig::getInstance(); pRoomConfig->getRoomConfig(game_id, room_list); //获取房间在线人数 map<RoomIdent, int> rooms_online; pRoomConfig->getOnlineInfo(game_id, rooms_online); int idx = 0; int size = room_list.size(); IDataX* pParam = new XLDataX(); XLDataX** rooms_data = new XLDataX*[size]; RoomIdent room; room.game_id = game_id; vector<GameRoomInfo>::iterator it = room_list.begin(); for(; it != room_list.end(); ++it) { room.room_id = it->room_id; rooms_data[idx] = new XLDataX(); rooms_data[idx]->PutInt(DataID_GameId, it->game_id); rooms_data[idx]->PutInt(DataID_RoomId, it->room_id); rooms_data[idx]->PutUTF8String(DataID_RoomName, (byte*)it->room_name.c_str(), it->room_name.length()); rooms_data[idx]->PutInt(DataID_MinBeans_Limit, it->min_limit); rooms_data[idx]->PutInt(DataID_MaxBeans_Limit, it->max_limit); rooms_data[idx]->PutInt(DataID_RoomOnlineUsers, rooms_online[room] + tmp_user[idx] ); rooms_data[idx]->PutUTF8String(DataID_ServerCT, (byte*)it->server_ct.c_str(), it->server_ct.length()); rooms_data[idx]->PutUTF8String(DataID_ServerCM, (byte*)it->server_cm.c_str(), it->server_cm.length()); rooms_data[idx]->PutUTF8String(DataID_ServerCU, (byte*)it->server_cu.c_str(), it->server_cu.length()); rooms_data[idx]->PutInt(DataID_RoomAnte, it->room_ante); rooms_data[idx]->PutInt(DataID_QuickMin, it->min_quick); rooms_data[idx]->PutInt(DataID_QuickMax, it->max_quick); ++idx; } pParam->PutDataXArray(DataID_Param1, (IDataX**)rooms_data, size, true); delete [] rooms_data; rooms_data = NULL; DataXCmdPtr pResp(new DataXCmd("GetDirResp", pCmd->get_cipher_flag())); pResp->set_datax(pParam); pResp->set_userid(pCmd->get_userid()); //send pResp CmdTask resp; resp.idx = task.idx; resp.seqno = task.seqno; resp.pCmd = pResp; resp.timestamp = task.timestamp; ResponseManager::getInstance()->sendResponse(resp); return true; }
bool GoodsHandler::handle(CmdTask& task) { DataXCmdPtr& pCmd = task.pCmd; int rst = checkCmd(pCmd, string("GetStoreConfig")); if(0 != rst) { LOG4CPLUS_ERROR(FLogger, "ckeck command failed. user id = " << pCmd->get_userid() << ", cmd_name = " << pCmd->get_cmd_name()); return false; } int game_id = 0; int tooltype = 0; bool bSuccess = decodeParam(pCmd->get_datax(), game_id, tooltype); if(!bSuccess) { LOG4CPLUS_ERROR(FLogger, "decodeParam failed..."); return false; } vector<goods_item> goods_set; shop_config::instance()->get_goods_by_type(tooltype, goods_set); LOG4CPLUS_DEBUG(FLogger, "get_goods_by_type = " << goods_set.size()); int idx = 0; int size = goods_set.size(); IDataX* pParam = new XLDataX(); XLDataX** datax_goods = new XLDataX*[size]; vector<goods_item>::iterator it = goods_set.begin(); for(; it != goods_set.end(); ++it) { datax_goods[idx] = new XLDataX(); datax_goods[idx]->PutInt(DataID_ToolId, it->toolid); datax_goods[idx]->PutUTF8String(DataID_ToolName, (byte*)it->toolname.c_str(), it->toolname.length()); datax_goods[idx]->PutBytes(DataID_ToolType, (byte*)&(it->tooltype), 1); datax_goods[idx]->PutShort(DataID_ToolIcon, it->toolicon); datax_goods[idx]->PutInt(DataID_ToolNum, it->toolnum); datax_goods[idx]->PutFloat(DataID_Rmb, it->toolrmb); datax_goods[idx]->PutFloat(DataID_Keke, it->toolkeke); datax_goods[idx]->PutUTF8String(DataID_Content, (byte*)it->content.c_str(), it->content.length()); datax_goods[idx]->PutBytes(DataID_InStore, (byte*)it->instore.c_str(), it->instore.length()); datax_goods[idx]->PutBytes(DataID_OutStore, (byte*)it->outstore.c_str(), it->outstore.length()); datax_goods[idx]->PutShort(DataID_SaleId, it->saleid); datax_goods[idx]->PutShort(DataID_TaskId, it->takeid); datax_goods[idx]->PutBytes(DataID_VIPValid, (byte*)&(it->vipvalid), 1); ++idx; } pParam->PutInt(DataID_GameId, 1); pParam->PutDataXArray(DataID_Param1, (IDataX**)datax_goods, size, true); DataXCmdPtr pResp(new DataXCmd("GetStoreConfigResp", pCmd->get_cipher_flag())); pResp->set_datax(pParam); pResp->set_userid(pCmd->get_userid()); delete [] datax_goods; datax_goods = NULL; CmdTask resp; resp.idx = task.idx; resp.seqno = task.seqno; resp.timestamp = task.timestamp; resp.pCmd = pResp; ResponseManager::getInstance()->sendResponse(resp); return true; }