refac: lastrefresh를 general_access_log로 이전

- last_refresh에 index를 걸 것인지는 고려 필요
  - 안 거는게 차라리 나을 수도 있음
- 불필요해보이는 값 확인: nation_id,
This commit is contained in:
2023-07-07 10:57:51 +00:00
parent 50408ed516
commit a9b51977d4
9 changed files with 46 additions and 17 deletions
+11 -1
View File
@@ -2,6 +2,9 @@
namespace sammo;
use sammo\Enums\GeneralAccessLogColumn;
use sammo\Enums\TableName;
include "lib.php";
include "func.php";
@@ -29,7 +32,14 @@ if ($myset > 0) {
$submit = 'hidden';
}
$targetTime = addTurn($me->getVar('lastrefresh'), $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
$lastRefresh = $db->queryFirstField(
'SELECT %b FROM %b WHERE %b = %i',
GeneralAccessLogColumn::lastRefresh->value,
TableName::generalAccessLog->value,
GeneralAccessLogColumn::generalID->value, $generalID
);
$targetTime = addTurn($lastRefresh, $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
if ($gameStor->turntime <= $gameStor->opentime) {
//서버 가오픈시 할 수 있는 행동
if ($me->getNPCType() == 0 && $me->getNationID() == 0) {
+17 -7
View File
@@ -6,6 +6,7 @@ use DateTime;
use Ds\Set;
use sammo\Enums\AuctionType;
use sammo\Enums\GeneralAccessLogColumn;
use sammo\Enums\GeneralColumn;
use sammo\Enums\InheritanceKey;
use sammo\Enums\RankColumn;
@@ -1007,16 +1008,16 @@ function increaseRefresh($type = "", $cnt = 1)
$isunited = $gameStor->isunited;
$opentime = $gameStor->opentime;
if($userGrade == 6){
if ($userGrade == 6) {
return;
}
if($isunited == 2){
if ($isunited == 2) {
return;
}
if(!$generalID){
if (!$generalID) {
return;
}
if($opentime > $date){
if ($opentime > $date) {
return;
}
@@ -1039,7 +1040,7 @@ function increaseRefresh($type = "", $cnt = 1)
$serverID = UniqueConst::$serverID;
$logPath = "{$serverPath}/logs/{$serverID}/api_log.db";
$logDB = FileDB::db($logPath, $serverPath. '/../f_install/sql/api_log.sql');
$logDB = FileDB::db($logPath, $serverPath . '/../f_install/sql/api_log.sql');
$ip = $_SERVER['REMOTE_ADDR'] ?? 'local';
$date = date('Y-m-d H:i:s');
@@ -1214,7 +1215,16 @@ function updateOnline()
//동접수
$startTurn = cutTurn($gameStor->turntime, $gameStor->turnterm, false);
$onlineUser = $db->query('SELECT no,name,nation FROM general WHERE lastrefresh >= %s AND npc < 2', $startTurn);
$onlineUser = $db->query(
'SELECT %b, %b, %b FROM `general_access_log` as `log` INNER JOIN `general` ON `log`.%b = `general`.%b WHERE %b >= %s',
GeneralColumn::no->value,
GeneralColumn::name->value,
GeneralColumn::nation->value,
GeneralAccessLogColumn::generalID->value,
GeneralColumn::no->value,
GeneralAccessLogColumn::lastRefresh->value,
$startTurn
);
$onlineNum = count($onlineUser);
$onlineNationUsers = Util::arrayGroupBy($onlineUser, 'nation');
@@ -1742,7 +1752,7 @@ function deleteNation(General $lord, bool $applyDB): array
// 전 장수 재야로
foreach ($nationGeneralList as $general) {
if($general->getNPCType() < 2){
if ($general->getNPCType() < 2) {
$general->setAuxVar(
InheritanceKey::max_belong->value,
max(
@@ -39,7 +39,7 @@ class BuildNationCandidate extends \sammo\BaseAPI
$gameStor = KVStorage::getStorage($db, 'game_env');
$gameStor->cacheValues(['opentime', 'turntime']);
$general = $db->queryFirstRow('SELECT no,name,nation,owner_name,npc,lastrefresh FROM general WHERE owner=%i', $userID);
$general = $db->queryFirstRow('SELECT no,name,nation,owner_name,npc FROM general WHERE owner=%i', $userID);
if (!$general) {
return '장수가 없습니다';
+9 -2
View File
@@ -5,6 +5,7 @@ namespace sammo\API\General;
use sammo\DB;
use sammo\DummyGeneral;
use sammo\Enums\APIRecoveryType;
use sammo\Enums\GeneralAccessLogColumn;
use sammo\GameConst;
use sammo\Session;
use sammo\General;
@@ -37,7 +38,13 @@ class DieOnPrestart extends \sammo\BaseAPI
$gameStor = KVStorage::getStorage($db, 'game_env');
$gameStor->cacheValues(['turnterm', 'opentime', 'turntime', 'year', 'month']);
$general = $db->queryFirstRow('SELECT no,name,nation,owner_name,npc,lastrefresh FROM general WHERE owner=%i AND npc = 0', $userID);
$general = $db->queryFirstRow('SELECT no,name,nation,owner_name,npc FROM general WHERE owner=%i AND npc = 0', $userID);
$lastRefresh = $db->queryFirstField(
'SELECT %b FROM general_access_log WHERE %b = %i',
GeneralAccessLogColumn::lastRefresh->value,
GeneralAccessLogColumn::generalID,
$general['no']
);
if (!$general) {
return '장수가 없습니다';
@@ -55,7 +62,7 @@ class DieOnPrestart extends \sammo\BaseAPI
}
//서버 가오픈시 할 수 있는 행동
$targetTime = addTurn($general['lastrefresh'], $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
$targetTime = addTurn($lastRefresh, $gameStor->turnterm, GameConst::$minTurnDieOnPrestart);
if ($targetTime > TimeUtil::now()) {
$targetTimeShort = substr($targetTime, 0, 19);
return "아직 삭제할 수 없습니다. {$targetTimeShort} 부터 가능합니다.";
+7 -1
View File
@@ -8,6 +8,7 @@ use sammo\Auction;
use sammo\CityConst;
use sammo\DB;
use sammo\Enums\APIRecoveryType;
use sammo\Enums\GeneralAccessLogColumn;
use sammo\Enums\RankColumn;
use sammo\GameConst;
use sammo\GameUnitConst;
@@ -414,7 +415,6 @@ class Join extends \sammo\BaseAPI
'officer_level' => 0,
'turntime' => $turntime,
'killturn' => 6,
'lastrefresh' => $now,
'crewtype' => GameUnitConst::DEFAULT_CREWTYPE,
'makelimit' => 0,
'betray' => $betray,
@@ -427,6 +427,12 @@ class Join extends \sammo\BaseAPI
'special2' => $special2
]);
$generalID = $db->insertId();
$db->insert('general_access_log', [
GeneralAccessLogColumn::generalID->value => $generalID,
GeneralAccessLogColumn::userID->value => $userID,
GeneralAccessLogColumn::nationID->value => 1,
GeneralAccessLogColumn::lastRefresh->value => $now,
]);
if($blockCustomGeneralName){
//XXX: 클래스가 이게 맞나?
-1
View File
@@ -58,7 +58,6 @@ enum GeneralColumn: string{
case recent_war = 'recent_war';
case makelimit = 'makelimit';
case killturn = 'killturn';
case lastrefresh = 'lastrefresh';
case ip = 'ip';
case block = 'block';
case dedlevel = 'dedlevel';
+1 -1
View File
@@ -1030,7 +1030,7 @@ class General implements iAction
'personal', 'special', 'special2', 'defence_train', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg',
'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'betray',
'recent_war', 'last_turn', 'myset',
'specage', 'specage2', 'con', 'connect', 'aux', 'lastrefresh', 'permission', 'penalty',
'specage', 'specage2', 'con', 'connect', 'aux', 'permission', 'penalty',
];
if ($reqColumns === null) {
-1
View File
@@ -708,7 +708,6 @@ class GeneralBuilder{
'dex4'=>$this->dex4,
'dex5'=>$this->dex5,
'aux'=>\sammo\Json::encode($this->aux),
'lastrefresh'=>TimeUtil::now(),
]);
$this->generalID = $db->insertId();
$turnRows = [];
-2
View File
@@ -54,7 +54,6 @@ CREATE TABLE `general` (
`recent_war` DATETIME(6) NULL DEFAULT NULL,
`makelimit` INT(2) NULL DEFAULT '0',
`killturn` INT(3) NULL DEFAULT NULL,
`lastrefresh` DATETIME NULL DEFAULT NULL,
`ip` VARCHAR(40) NULL DEFAULT '',
`block` INT(1) NULL DEFAULT '0',
`dedlevel` INT(2) NULL DEFAULT '0',
@@ -86,7 +85,6 @@ CREATE TABLE `general` (
INDEX `officer_level` (`nation`, `officer_level`),
INDEX `officer_city` (`officer_city`, `officer_level`),
INDEX `name` (`name`),
INDEX `last_refresh` (`lastrefresh`),
CONSTRAINT `json1` CHECK (json_valid(`last_turn`)),
CONSTRAINT `json2` CHECK (json_valid(`aux`)),
CONSTRAINT `json3` CHECK (json_valid(`penalty`))