void EventHandler::processPaymentAddDiamondResponse(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=7)return; int succ = 0; bool check = safeAtoi(check_cmd[1], succ); if(check == false) return; uid_type uid; string tran_id; check = safeAtoll(check_cmd[2], uid); if(check == false) return; tran_id = check_cmd[4]; string product_id = check_cmd[3]; int diamond = 0; check = safeAtoi(check_cmd[5], diamond); if(check == false) return; int dst_fd = 0; check = safeAtoi(check_cmd[6], dst_fd); if(check == false) return; PaymentInfo *pi = NULL; check = dh_->loadPayment(tran_id, pi); if(check == false){ sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } if(pi == NULL){ sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; }else{ if(uid != pi->uid_ || product_id != pi->product_id_ || tran_id != pi->tran_id_){ delete pi; //sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, tran_id); return; } if(succ != 0){ delete pi; check = dh_->savePaymentStatus(tran_id, PAYMENT_STATUS_VERIFY_SUCC); if(check == false){ sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; }else{ sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; } }else{ check = dh_->savePaymentStatus(tran_id, PAYMENT_STATUS_ADDCMD_SUCC); if(check ==false){ sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; }else{ string res = buildPaymentVerifyReceivedResponse(uid,product_id,tran_id,diamond); nh_->sendString(dst_fd, res); return; } } } return; }
void EventHandler::processSessionVerify(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=5)return; uid_type uid; int status; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; check = safeAtoi(check_cmd[2], status); if(check == false) return; if(status != 1){ sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_SESSIONID_ERROR); return; } User * user = safeGetUser(uid, CMD_LOGIN, e.fd_); if(user == NULL) { sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_USER_DONOT_EXIST); return; } //user->nick_name_ = check_cmd[3]; user->eqid_ = check_cmd[4]; check = dh_->saveUserSInfo(user); if(check == false){ sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_SYSTEM_CRITICAL_ERROR); return; } LOG4CXX_INFO(logger_, "login;"<<user->uid_); long long now = time(NULL); long long reaccess_check = now/86400 - user->create_time_/86400; if((reaccess_check>=1 && reaccess_check<=6)||reaccess_check == 13 || reaccess_check == 29 || reaccess_check == 59 || reaccess_check == 89){ LOG4CXX_INFO(logger_, "reaccess;"<<reaccess_check<<";"<<user->uid_); } string res = buildSessionVerifyResponse(); nh_->sendString(e.fd_, res); return; }
/*void * paymentAdd(void * args) { struct NewPaymentAdd * npa = (NewPaymentAdd *) args; char recvbuf[1024] = {0}; int count = 0 ; int local_product_id = npa->local_product_id; string tran_id = *(npa->tran_id); bool check = true; while(1){ int server_id = npa->server_id; sconfig * sc = game_config.getSconfig(server_id); if(sc == NULL){ check = false; break; } int sock; struct sockaddr_in toAddr; memset(&toAddr,0,sizeof(toAddr)); toAddr.sin_addr.s_addr = inet_addr(sc->ip_addr.c_str()); toAddr.sin_port = htons(sc->port); sock = socket(AF_INET,SOCK_STREAM,0); if(sock == -1){ check = false; break; } int timeout = 30000; setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); int ret = connect(sock,(struct sockaddr *) &toAddr,sizeof(toAddr)); if(ret != 0){ close(sock); check = false; break; } char cmd[1024] = {0}; count = snprintf(cmd, 1024, "%s;%lld;%d;%s;%d",cmd_list[CMD_PAYMENT_ADD_DIAMOND_REQUEST].c_str(),npa->uid,local_product_id,tran_id.c_str(),npa->fd_); ret = send(sock,cmd,count+1,0); if(ret < 0){ close(sock); shutdown(sock,SHUT_RDWR); check = false; break; } count = recv(sock,recvbuf,1024,0); if(count <= 0){ close(sock); shutdown(sock,SHUT_RDWR); check = false; break; } close(sock); shutdown(sock,SHUT_RDWR); break; } if(check == true){ string resp = string(recvbuf,count); npa->eq->pushCmd(npa->fd_, npa->uid, resp); }else{ string res= buildPaymentAddDiamondResponseCmd(1, npa->uid, npa->local_product_id,tran_id,0,npa->fd_); npa->eq->pushCmd(npa->fd_,npa->uid,res); } if(npa->tran_id != NULL) delete npa->tran_id; if(npa!= NULL) delete npa; return NULL; }*/ void * sessionVerify(void * args) { struct sessionVerifyInfo * sv; sv = (struct sessionVerifyInfo *)args; uid_type uid = sv->uid; string nickname = *(sv->nickname); delete sv->nickname; string eqid = *(sv->eqid); delete sv->eqid; string sign = *(sv->sign); delete sv->sign; string readBuffer = ""; CURL * easy_handle = curl_easy_init(); curl_easy_setopt(easy_handle, CURLOPT_URL,sign.c_str()); //curl_easy_setopt(easy_handle, CURLOPT_URL,"https://sandbox.itunes.apple.com/verifyReceipt"); //curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS,msg.c_str()); //curl_easy_setopt(easy_handle, CURLOPT_HTTPGET,sign.c_str()); curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, writeDataCurl); curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA,&readBuffer); curl_easy_setopt(easy_handle, CURLOPT_TIMEOUT,30); curl_easy_setopt(easy_handle, CURLOPT_CONNECTTIMEOUT,30); curl_easy_perform(easy_handle); curl_easy_cleanup(easy_handle); int status = 0; if(readBuffer.length()==0 || readBuffer[0] == '<'){ }else{ Json::Reader reader; Json::Value root; if(reader.parse(readBuffer, root)){ string code = root["ErrorCode"].asString(); bool check = safeAtoi(code, status); if(check == false){ delete sv ; return NULL; } } } string res = buildSessionVerifyCmd(sv->uid,status,nickname,eqid); sv->eq->pushCmd(sv->fd_, sv->uid, res); delete sv; return NULL; }
void EventHandler::processCreateUser(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=5)return; uid_type uid; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; if(check_cmd[3].size() == 0 || check_cmd[3].size()>32) return; if(checkString(check_cmd[3]) == false) return; int authorize_code; check = safeAtoi(check_cmd[4], authorize_code); if(check == false) return; if(authorize_code != getAuthorizeCode(uid)){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_AUTHORIZE_CODE_WRONG); return; } User * user = dh_->getUser(uid); if(dh_->db_error_ != 0){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR); return; } if(user != NULL){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_USER_ALREADY_REGISTERED); delete user; return; } /*check = dh_->checkNick(check_cmd[3]); if(dh_->db_error_ != 0){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR); return; } if(check == false){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_NICKNAME_USED); return; }*/ check = dh_->createUser(uid,check_cmd); if(dh_->db_error_ != 0){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR); return; } if(check == false){ sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_CREATE_USER_FAIL); return; } string res = buildCreateUserResponse(); nh_->sendString(e.fd_, res); return; }
void EventHandler::processPaymentAddDiamondRequest(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=5)return; cout<<"cmd received!"<<endl; uid_type uid; string tran_id; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; tran_id = check_cmd[3]; string product_id = check_cmd[2]; int dst_fd = 0; check = safeAtoi(check_cmd[4], dst_fd); if(check == false) return; string erret = buildPaymentAddDiamondResponseCmd(1, uid, product_id, tran_id,0,dst_fd); User * user = safeGetUser(uid, CMD_PAYMENT_ADD_DIAMOND_RESPONSE, e.fd_); PaymentConfig * pc = game_config.getPaymentConfig(product_id); if(pc == NULL){ nh_->sendString(e.fd_, erret); return; } user->diamond_ += pc->amount_; user->pay_count_ ++; ActConfig * ac = game_config.getActConfig(ACT_1); if(ac != NULL){ act_1(user,pc->amount_); } check = dh_->saveUser(user); if(check == false) { nh_->sendString(e.fd_, erret); return; } string res = buildPaymentAddDiamondResponseCmd(0, uid, product_id, tran_id,user->diamond_,dst_fd); nh_->sendString(e.fd_, res); return; }
void EventHandler::processAuthorize(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=4) return; if(check_cmd[1].size() == 0 || check_cmd[2].size() == 0) return; if(check_cmd[1].size()>32 || check_cmd[2].size()>32) return; if(checkString(check_cmd[2])==false){ LOG4CXX_WARN(logger_, "check string false:"<<check_cmd[2]); } uid_type uid ; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; int authorize_code; check = safeAtoi(check_cmd[3], authorize_code); if(check == false) return; User * user = dh_->getUser(uid); if(dh_->db_error_ != 0){ sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_SYSTEM_CRITICAL_ERROR); return; } if(user == NULL){ sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_USER_DONOT_EXIST); return; } if(authorize_code != getAuthorizeCode(uid)){ sendErrorResponse(e.fd_, CMD_AUTHORIZE, ERROR_AUTHORIZE_CODE_WRONG); return; } user->eqid_ = check_cmd[2]; user->dirty_ = true; check = dh_->saveEquipmentId(user); if(dh_->db_error_ != 0 || check == false){ sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_SYSTEM_CRITICAL_ERROR); return; } string res = buildAuthorizeResponse(); nh_->sendString(e.fd_, res); return; }
int parseUserRewardsContent(vector <StageReward>& strewards, const string &contents) { strewards.clear(); int ret = 0; vector <string> tokens; string delims=";"; tokenize(contents,tokens, delims); if (tokens.size() > 0 && safeAtoi(tokens[0], ret)) { strewards.resize(ret); delims = ","; for (size_t i = 1; i < tokens.size(); i++) { vector <int> subitems; numtokenize(tokens[i], subitems, delims); if (subitems.size() == 4) { strewards[i-1].type = subitems[0]; strewards[i-1].subtype = subitems[1]; strewards[i-1].param_1 = subitems[2]; strewards[i-1].param_2 = subitems[3]; } } } return ret; }
void EventHandler::processPaymentVerifyComplete(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=6) return; uid_type uid; int status = 0; int server_id = 0; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; check = safeAtoi(check_cmd[2], status); if(check == false) return; string * tran_id = new string(check_cmd[4]); string * product_id = new string(check_cmd[3]); check = safeAtoi(check_cmd[5], server_id); if(check == false) return; PaymentInfo * pi = NULL; check = dh_->loadPayment(*tran_id, pi); if(check == false){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } if(pi == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; }else{ server_id = pi->server_id_; if(uid != pi->uid_ || *product_id != pi->product_id_){ delete pi; sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); return; } if(pi!=NULL) delete pi; if(status != 0){ check = dh_->savePaymentStatus(*tran_id, PAYMENT_STATUS_REQUEST_RECEIVED); if(check == false){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; }else{ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; } }else{ check = dh_->savePaymentStatus(*tran_id, PAYMENT_STATUS_ADDCMD_SEND); if(check == false){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; }else{ pthread_t tid; struct PaymentAdd *pa; pa = (struct PaymentAdd *) malloc (sizeof(PaymentAdd)); if(pa == NULL) { sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } pa->eq = this->eq_; pa->fd_ = e.fd_; pa->product_id = product_id; pa->server_id = server_id; pa->tran_id = tran_id; pa->uid = uid; pthread_create(&tid,NULL,paymentAdd,(void *)pa); } } } return; }
void EventHandler::processPaymentVerify(EventCmd &e,vector<string> &check_cmd) { //if(check_cmd.size()!=4) return; /* uid_type uid; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; User * user = safeGetUser(uid, CMD_PAYMENTVERIFY, e.fd_, check_cmd[2]); if(user == NULL) return; string input = e.cmd_.substr(e.cmd_.find('{')); if(input.size()>=3000){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } char * outputc = (char * ) malloc (4*((input.length()+2)/3)); if(outputc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } base64_encode((unsigned char * )input.c_str(), (int)input.length(), (unsigned char *)outputc, (int)4*((input.length()+2)/3)); string output = string(outputc,(int)4*((input.length()+2)/3)); free(outputc); string * test = new string("{\"receipt-data\":\"" + output + "\"}"); //pp->verify_info = &check_cmd[3]; pp->verify_info = test; pthread_create(&tid,NULL,verify,(void *)pp); */ //read params uid_type uid; int server_id; string product_id; bool check = safeAtoll(check_cmd[1], uid); if(check == false)return; if(check_cmd[3].size()>64 ||check_cmd[3].size()<=0||check_cmd[5].size()>64 ||check_cmd[5].size()<=0) return; //string tran_id = check_cmd[3]; string * tran_id = new string(check_cmd[3]); check = safeAtoi(check_cmd[4], server_id); if(check == false) return; product_id = check_cmd[5]; sconfig * sc = game_config.getSconfig(server_id); if(sc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR); return; } if(game_config.payment_.find(product_id) == game_config.payment_.end()){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR); return; } //try to load PaymentInfo *pi = NULL; check = dh_->loadPayment(*tran_id, pi); if(check == false){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } string input = e.cmd_.substr(e.cmd_.find('{')); if(input.size()>=3000){ //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } char * outputc = (char *) malloc (4*((input.length()+2)/3)); if(outputc == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } base64_encode((unsigned char * )input.c_str(), (int)input.length(), (unsigned char *)outputc, (int)4*((input.length()+2)/3)); string output = string(outputc,(int)4*((input.length()+2)/3)); free(outputc); //string * test = new string("{\"receipt-data\":\"" + output + "\"}"); //check string checkcode = MDString(output.c_str()); if(pi == NULL){ pi = new PaymentInfo(*tran_id,product_id,checkcode); if(pi == NULL){ sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } //pi->tran_id_ = tran_id; pi->uid_ = uid; pi->pay_time_ = time(NULL); //pi->product_id_ = product_id; pi->server_id_ = server_id; pi->status_ = PAYMENT_STATUS_REQUEST_RECEIVED; pi->status_ = PAYMENT_STATUS_VERIFY_SEND; //pi->check_info_ = checkcode; check = dh_->addNewPayment(pi); if(check == false || dh_->db_error_ != 0){ delete pi; sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } }else{ if(uid != pi->uid_ || server_id_ != pi->server_id_ || product_id != pi->product_id_ || checkcode != pi->check_info_){ delete pi; //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, (*tran_id)); return; } if(pi->status_ == PAYMENT_STATUS_REQUEST_RECEIVED || pi->status_ == PAYMENT_STATUS_VERIFY_SUCC){ }else if(pi->status_ == PAYMENT_STATUS_VERIFY_SEND || pi->status_ == PAYMENT_STATUS_ADDCMD_SEND){ delete pi; sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME); return; }else if(pi->status_ == PAYMENT_STATUS_REQUEST_REFUSED || pi->status_ == PAYMENT_STATUS_ADDCMD_SUCC){ delete pi; //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE); sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE, (*tran_id)); return; } } if(pi!=NULL){ delete pi; } string * test = new string("{\"receipt-data\":\"" + output + "\"}"); pthread_t tid; struct PaymentParam *pp; pp = (struct PaymentParam *) malloc (sizeof(PaymentParam)); if(pp == NULL) { sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR); return; } pp->uid = uid; pp->tran_id = tran_id; pp->eq = eq_; pp->fd_ = e.fd_; pp->verify_info = test; pp->server_id = server_id; pthread_create(&tid,NULL,verify,(void *)pp); return; }
int config_getInt(char* name){ char *value = config_get(name); return value == NULL ? 0 : safeAtoi(value); }
/*void EventHandler::processNewPaymentverify(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=6) return; uid_type uid; int server_id; string tran_id = check_cmd[4]; string product_id = check_cmd[5]; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; check = safeAtoi(check_cmd[3], server_id); if(check == false) return; if(tran_id.size()==0||tran_id.size() >32) return; NewPaymentInfo * npi = dh_->loadNewPaymentInfo(tran_id); if(npi == NULL){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET,tran_id); return; } if(uid!=npi->uid_ || product_id != npi->product_id_ || server_id != npi->server_id_){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id); return; } PaymentConfig * pc = game_config.getPaymentConfig(product_id); if(pc == NULL){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR,tran_id); return; } if(pc->price_ != npi->order_money_){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id); return; } if(npi->order_status_ == NEW_PAYMENT_SENDDING){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_WRONG_TIME); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_WRONG_TIME,tran_id); return; } if(npi->order_status_ == NEW_PAYMENT_COMPLETE){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_TRADE_COMPLETE); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_TRADE_COMPLETE,tran_id); return; } npi->order_status_ = NEW_PAYMENT_SENDDING; check = dh_->saveNewPaymentStatus(npi->tran_id_, npi->order_status_); if(check == false){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR,tran_id); return; } int local_product_id = pc->local_id_; delete npi; npi = NULL; pthread_t tid; struct NewPaymentAdd *npa; npa = (struct NewPaymentAdd *) malloc (sizeof(NewPaymentAdd)); if(npa == NULL) { //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR); sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR,tran_id); return; } npa->eq = this->eq_; npa->fd_ = e.fd_; npa->local_product_id = local_product_id; npa->server_id = server_id; npa->uid = uid; npa->tran_id = new string(tran_id); pthread_create(&tid,NULL,paymentAdd,(void *)npa); return; }*/ void EventHandler::processPBak(EventCmd &e, vector<string> &check_cmd) { if(check_cmd.size()!=6) return; uid_type uid; int server_id; string tran_id = check_cmd[4]; string product_id = check_cmd[5]; bool check = safeAtoll(check_cmd[1], uid); if(check == false) return; check = safeAtoi(check_cmd[3], server_id); if(check == false) return; if(tran_id.size()==0||tran_id.size() >32) return; User * user =safeGetUser(uid, CMD_PBAK,e.fd_,check_cmd[2]); if(user == NULL) return; LOG4CXX_INFO(logger_, "pbak;"<<uid); NewPaymentInfo * npi = dh_->loadNewPaymentInfoBak(tran_id); if(npi == NULL){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET); sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_NOT_RECEIVED_YET,tran_id); return; } if(uid!=npi->uid_ || product_id != npi->product_id_ || server_id != npi->server_id_){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id); return; } if(server_id != this->server_id_){ sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id); return; } PaymentConfig * pc = game_config.getPaymentConfig(product_id); if(pc == NULL){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR); sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_CONFIG_ERROR,tran_id); return; } if(pc->price_ != npi->order_money_){ //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH); sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id); return; } if(npi->order_status_ != NEW_PAYMENT_RECEIVED){ sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_TRADE_COMPLETE,tran_id); return; } npi->order_status_ = NEW_PAYMENT_COMPLETE; check = dh_->saveNewPaymentStatusBak(npi->tran_id_, npi->order_status_); user->diamond_ += pc->amount_; user->pay_count_ ++; ActConfig * ac = game_config.getActConfig(ACT_1); if(ac != NULL){ act_1(user,pc->amount_); } check = dh_->saveUser(user); if(check == false){ sendErrorResponse(e.fd_, CMD_PBAK,ERROR_SYSTEM_CRITICAL_ERROR); return; } LOG4CXX_INFO(logger_, "pbaksucc;"<<uid<<";"<<user->diamond_); string res = buildPBakResponse(user, npi); nh_->sendString(e.fd_, res); if(npi!= NULL){ delete npi; npi = NULL; } return; }