This commit is contained in:
aozhiwei 2021-12-01 19:50:01 +08:00
parent f7bd695233
commit 7ddc486260

View File

@ -7,26 +7,111 @@ use phpcommon\SqlHelper;
class DynData extends BaseModel { class DynData extends BaseModel {
public static function preload()
{
if (!self::$dynData) {
self::$dynData = array();
$rows = SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_dyndata',
array(
'account_id' => myself()->_getAccountId(),
)
);
foreach ($rows as $row) {
$key = self::calcKey($row['x'], $row['y']);
self::$dynData[$key] = $row['val'];
}
}
}
public static function getV($x, $y, $defVal = 0) public static function getV($x, $y, $defVal = 0)
{ {
$key = self::calcKey($x, $y);
if (self::$dynData) {
return getXVal(self::$dynData, $key, $defVal);
} else {
++self::$hitCount;
if (self::$hitCount > 5) {
self::preload();
return self::getV($x, $y, $defVal);
} else {
$row = SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_dyndata',
array(
'account_id' => myself()->_getAccountId(),
'x' => $x,
'y' => $y,
)
);
return $row ? $row['val'] : $defVal;
}
}
} }
public static function setV($x, $y, $defVal) public static function setV($x, $y, $defVal)
{ {
$key = self::calcKey($x, $y);
self::internalSetV($x, $y, $defVal);
} }
public static function incV($x, $y, $val) public static function incV($x, $y, $val)
{ {
$key = self::calcKey($x, $y);
$oldVal = self::getV($x, $y);
self::internalSetV($x, $y, $oldVal + $val);
} }
public static function decV($x, $y, $val) public static function decV($x, $y, $val)
{ {
self::incV($x, $y, 0 - $val);
}
public static function calcKey($x, $y)
{
$key = self::calcKey($x, $y);
}
private static function internalSetV($x, $y, $val)
{
if (!is_int($x) || !is_int($y)) {
die('internalSet type error');
return;
}
if (abs($x) > 0xFFFFFFFF) {
die('internalSet x error');
return;
}
if (abs($y) > 0xFFFFFFFF) {
die('internalSet y error');
return;
}
$key = self::calcKey($x, $y);
SqlHelper::upsert
(myself()->_getSelfMysql(),
't_dyndata',
array(
'account_id' => myself()->_getAccountId(),
'x' => $x,
'y' => $y
),
array(
'val' => $val,
'modifytime' => myself()->_getNowTime()
),
array(
'account_id' => myself()->_getAccountId(),
'x' => $x,
'y' => $y,
'val' => $val,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime()
)
);
} }
private static $dynData = null; private static $dynData = null;
private static $hitCount = 0;
} }