int cmyth_mysql_get_commbreak_list(cmyth_database_t db, int chanid, char * start_ts_dt, cmyth_commbreaklist_t breaklist, int conn_version) { MYSQL_RES *res = NULL; MYSQL_ROW row; int resolution = 30; char * query_str; int rows = 0; cmyth_mysql_query_t * query; cmyth_commbreak_t commbreak = NULL; int i = 0; long long start_previous = 0; long long end_previous = 0; if (conn_version>=43) { query_str = "SELECT m.type,m.mark,s.mark,s.offset FROM recordedmarkup m INNER JOIN recordedseek AS s ON m.chanid = s.chanid AND m.starttime = s.starttime WHERE m.chanid = ? AND m.starttime = ? AND m.type in (?,?) and FLOOR(m.mark/?)=FLOOR(s.mark/?) ORDER BY `m`.`mark` LIMIT 300 "; } else { query_str = "SELECT m.type AS type, m.mark AS mark, s.offset AS offset FROM recordedmarkup m INNER JOIN recordedseek AS s ON (m.chanid = s.chanid AND m.starttime = s.starttime AND (FLOOR(m.mark / 15) + 1) = s.mark) WHERE m.chanid = ? AND m.starttime = ? AND m.type IN (?, ?) ORDER BY mark;"; } query = cmyth_mysql_query_create(db,query_str); cmyth_dbg(CMYTH_DBG_ERROR,"%s, query=%s\n", __FUNCTION__,query_str); if ( (conn_version>=43) && ( cmyth_mysql_query_param_int(query, chanid) < 0 || cmyth_mysql_query_param_str(query, start_ts_dt) < 0 || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_START) < 0 || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_END) < 0 || cmyth_mysql_query_param_int(query, resolution ) < 0 || cmyth_mysql_query_param_int(query, resolution ) < 0 ) ) { cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__); ref_release(query); return -1; } if ( (conn_version < 43) && (cmyth_mysql_query_param_int(query, chanid) < 0 || cmyth_mysql_query_param_str(query, start_ts_dt) < 0 || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_START) < 0 || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_END) < 0 ) ) { cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__); ref_release(query); return -1; } res = cmyth_mysql_query_result(query); ref_release(query); if (res == NULL) { cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__); return -1; } if (conn_version >=43) { breaklist->commbreak_count = cmyth_mysql_query_commbreak_count(db,chanid,start_ts_dt); } else { breaklist->commbreak_count = mysql_num_rows(res) / 2; } breaklist->commbreak_list = malloc(breaklist->commbreak_count * sizeof(cmyth_commbreak_t)); //cmyth_dbg(CMYTH_DBG_ERROR, "%s: %ld\n",__FUNCTION__,breaklist->commbreak_count); if (!breaklist->commbreak_list) { cmyth_dbg(CMYTH_DBG_ERROR, "%s: malloc() failed for list\n", __FUNCTION__); return -1; } memset(breaklist->commbreak_list, 0, breaklist->commbreak_count * sizeof(cmyth_commbreak_t)); if (conn_version >=43) { while ((row = mysql_fetch_row(res))) { if (safe_atoi(row[0]) == CMYTH_COMMBREAK_START) { if ( safe_atoll(row[1]) != start_previous ) { commbreak = cmyth_commbreak_create(); commbreak->start_mark = safe_atoll(row[1]); commbreak->start_offset = safe_atoll(row[3]); start_previous = commbreak->start_mark; } else if ( safe_atoll(row[1]) == safe_atoll(row[2]) ) { commbreak = cmyth_commbreak_create(); commbreak->start_mark = safe_atoll(row[1]); commbreak->start_offset = safe_atoll(row[3]); } } else if (safe_atoi(row[0]) == CMYTH_COMMBREAK_END) { if ( safe_atoll(row[1]) != end_previous ) { commbreak->end_mark = safe_atoll(row[1]); commbreak->end_offset = safe_atoll(row[3]); breaklist->commbreak_list[rows] = commbreak; end_previous = commbreak->end_mark; rows++; } else if ( safe_atoll(row[1]) == safe_atoll(row[2]) ) { commbreak->end_mark = safe_atoll(row[1]); commbreak->end_offset = safe_atoll(row[3]); breaklist->commbreak_list[rows] = commbreak; if (end_previous != safe_atoll(row[1]) ) { rows++; } } } else { cmyth_dbg(CMYTH_DBG_ERROR, "%s: Unknown COMMBREAK returned\n", __FUNCTION__); return -1; } i++; } } // mythtv protolcol version < 43 else { while ((row = mysql_fetch_row(res))) { if ((i % 2) == 0) { if (safe_atoi(row[0]) != CMYTH_COMMBREAK_START) { return -1; } commbreak = cmyth_commbreak_create(); commbreak->start_mark = safe_atoll(row[1]); commbreak->start_offset = safe_atoll(row[2]); i++; } else { if (safe_atoi(row[0]) != CMYTH_COMMBREAK_END) { return -1; } commbreak->end_mark = safe_atoll(row[1]); commbreak->end_offset = safe_atoll(row[2]); breaklist->commbreak_list[rows] = commbreak; i = 0; rows++; } } } mysql_free_result(res); cmyth_dbg(CMYTH_DBG_ERROR, "%s: COMMBREAK rows= %d\n", __FUNCTION__, rows); return rows; }
void RceQueryCheckAndLockAccountIfPossibleHandle::handle_selfload(Event* e) { int64 uid = e->uid(); GameDataHandler* pUserManager = eh_->getDataHandler(); if(!pUserManager) { return; } User *pUser = pUserManager->getUser(uid); if ( !pUser) { return; } Player* pPlayer = pUser->GetPlayer(); if ( !pPlayer || !pPlayer->CanUse()) { return ; } RceQueryCheckAndLockAccountIfPossible* req = e->mutable_ce_rcequerycheckandlockaccountifpossible(); if( !req ) { return; } RseQueryCheckAndLockAccountIfPossible *pRsp = e->mutable_se_rsequerycheckandlockaccountifpossible(); pRsp->set_lockapplied(req->applylock()); pRsp->set_lockrequested(1); pRsp->set_locktype(0); pRsp->set_locksuccess(1); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; DB_Planet *pDBPlanet = pPlayer->GetPlanet(pPlayer->GetCurPlanetId()); if(!pDBPlanet){ pRsp->set_locksuccess(0); pRsp->set_locktype(7); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; } /*for(int i = 0; i < req->hangarsunitsinfo_size(); i++){ HangarsUnitsInfo *pMsgUnit = req->mutable_hangarsunitsinfo(i); if(pMsgUnit){ for (int k = 0; k < pDBPlanet->hangars_size(); k++){ DB_Hangar *pDBUnit = pDBPlanet->hangars(k); if(pDBUnit && pDBUnit->sid() == pMsgUnit->sid()){ } } } }*/ int64 TID; safe_atoll(req->targetaccountid(), TID); LoadStatus state = LOAD_INVALID; User *pTUser = pUserManager->getUser(TID, &state, true); if (pTUser == NULL) { if (state == LOAD_WAITING) { eh_->postBackEvent(e); } else if (state == LOAD_MISS) { e->mutable_forwardinfo()->set_uid(TID); e->set_state(Status_Normal_To_World); eh_->sendEventToWorld(e); } return; } else { if(0 == req->applylock()){ if(pTUser->Online()){ pRsp->set_locksuccess(0); pRsp->set_locktype(1); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; }else if(pTUser->GetLastAttackedTime()){ pRsp->set_locksuccess(0); pRsp->set_locktype(2); string text; pRsp->SerializeToString(&text); eh_->sendDataToUser(pUser->fd(), S2C_RseQueryCheckAndLockAccountIfPossible, text); return; } }else{ int nPlanetId = req->planetid(); Player *pTPlayer = pUser->GetPlayer(); } } }