game2006api/webapp/services/NftService.php
hujiabin 69c24c12b7 1
2022-09-13 16:38:26 +08:00

118 lines
3.5 KiB
PHP

<?php
namespace services;
require_once('models/Nft.php');
require_once('mt/Item.php');
use phpcommon\SqlHelper;
use models\Nft;
use mt\Item;
class NftService extends BaseService {
private static $userData = array();
private static $nftCfg = array(
'hero' => Nft::HERO_TYPE,
'equip' => Nft::EQUIP_TYPE,
'chip' => Nft::CHIP_TYPE,
'fragment' => Nft::FRAGMENT_TYPE,
);
public static function isHeroOwner($openId, $tokenId)
{
return self::internalIsOwner($openId, 'hero', $tokenId);
}
public static function isEquipOwner($openId, $tokenId)
{
return self::internalIsOwner($openId, 'equip', $tokenId);
}
public static function isChipOwner($openId, $tokenId)
{
return self::internalIsOwner($openId, 'chip', $tokenId);
}
public static function getHeros($openId)
{
return self::internalGetList($openId, 'hero');
}
public static function getEquips($openId)
{
return self::internalGetList($openId, 'equip');
}
public static function getChips($openId)
{
return self::internalGetList($openId, 'chip');
}
public static function getFragments($openId)
{
return self::internalGetList($openId, 'fragment');
}
private static function internalGetList($openId, $name)
{
self::loadNft($openId, $name);
return getXVal(self::$userData[$openId], $name . 'List');
}
private static function internalIsOwner($openId, $name, $tokenId)
{
self::loadNft($openId, $name);
$nftHash = getXVal(self::$userData[$openId], $name . 'Hash', array());
$nftDb = getXVal($nftHash, $tokenId);
return $nftDb && $nftDb['owner_address'] == $openId;
}
private static function loadNft($openId, $name)
{
if (!in_array($openId, self::$userData)) {
self::$userData[$openId] = array();
}
if (!in_array($name . 'List', self::$userData[$openId])) {
$listName = $name . 'List';
$hashName = $name . 'Hash';
$tokenType = self::$nftCfg[$name];
self::$userData[$openId][$listName] = Nft::GetNftListByType($openId, $tokenType);
self::$userData[$openId][$hashName] = array();
foreach (self::$userData[$openId][$listName] as $nftDb) {
self::$userData[$openId][$hashName][$nftDb['token_id']] = $nftDb;
}
}
}
public static function addNft($itemId,$token_id){
$itemMeta = Item::get($itemId);
if ($itemMeta) {
$tokenType = Nft::getTokenType($itemMeta);
if ($tokenType == Nft::NONE_TYPE) {
myself()->_rspErr(1, 'param item_id error');
return false;
} else {
SqlHelper::insert(
myself()->_getMarketMysql(),
't_nft',
array(
'token_id' => $token_id,
'token_type' => $tokenType,
'game_id' => 2006,
'item_id' => $itemId,
'owner_address' => myself()->_getOpenId(),
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
)
);
return true;
}
} else {
myself()->_rspErr(1, 'param item_id error');
return false;
}
}
}