200 lines
8.1 KiB
C#
200 lines
8.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Newtonsoft.Json;
|
|
using MySqlConnector;
|
|
|
|
|
|
using ServerCore; using ServerBase;
|
|
using ServerCommon;
|
|
|
|
|
|
using GameServer;
|
|
using GameServer.NFT;
|
|
|
|
|
|
namespace GameServer
|
|
{
|
|
public static class NFTHelper
|
|
{
|
|
public static async Task<(ServerErrorCode, string)> getEOA(string accountGuid)
|
|
{
|
|
var err_msg = string.Empty;
|
|
|
|
try
|
|
{
|
|
string eoa = string.Empty;
|
|
|
|
var read_func = delegate (MySqlDataReader dataReader)
|
|
{
|
|
eoa = dataReader.GetString("eoa");
|
|
|
|
return ServerErrorCode.Success;
|
|
};
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
var result = await MySqlConnectorHelper.simpleQueryExecuteForReaderAsync( $"SELECT * FROM wallet_user WHERE id = '{accountGuid}'"
|
|
, read_func
|
|
, server_logic.getServerConfig().AccountNftDb );
|
|
if(result.isFail())
|
|
{
|
|
err_msg = $"Failed to simpleQueryExecuteForReaderAsync() !!! : {result.toBasicString()} - accountId:{accountGuid}";
|
|
Log.getLogger().error($"{err_msg}");
|
|
|
|
return (result.getErrorCode(), "");
|
|
}
|
|
|
|
return (ServerErrorCode.Success, eoa);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.getLogger().error($"Exception !!! : {e}");
|
|
return (ServerErrorCode.MySqlDbQueryException, string.Empty);
|
|
}
|
|
}
|
|
|
|
public static async Task<List<MySqlTokenInfo>?> loadLandNFT()
|
|
{
|
|
var err_msg = string.Empty;
|
|
|
|
try
|
|
{
|
|
var mysql_token_infos = new List<MySqlTokenInfo>();
|
|
|
|
var read_func = delegate (MySqlDataReader dataReader)
|
|
{
|
|
var mysql_token_info = new MySqlTokenInfo();
|
|
|
|
mysql_token_info.contract_address = dataReader.GetString("contract_address");
|
|
mysql_token_info.token_id = dataReader.GetInt32("token_id");
|
|
mysql_token_info.owner = dataReader.GetString("owner");
|
|
mysql_token_info.staker = dataReader.IsDBNull("staker") ? string.Empty : dataReader.GetString("staker");
|
|
mysql_token_info.is_staked = dataReader.GetInt32("is_staked");
|
|
mysql_token_info.updated_at = dataReader.GetDateTime("updated_at");
|
|
|
|
mysql_token_infos.Add(mysql_token_info);
|
|
|
|
return ServerErrorCode.Success;
|
|
};
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
var result = await MySqlConnectorHelper.simpleQueryExecuteForReaderAsync( $"SELECT * FROM wallet_user WHERE contract_address = '{ServerCommon.Constant.LAND_NFT_CONTRACT_ADDRESS}'"
|
|
, read_func
|
|
, server_logic.getServerConfig().AccountNftDb );
|
|
if(result.isFail())
|
|
{
|
|
err_msg = $"Failed to simpleQueryExecuteForReaderAsync() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error($"{err_msg}");
|
|
return null;
|
|
}
|
|
|
|
return mysql_token_infos;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.getLogger().error($"{e}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static async Task<(ServerErrorCode, List<MySqlTokenInfo>?)> getLandNFTs(string eoa)
|
|
{
|
|
var err_msg = string.Empty;
|
|
|
|
try
|
|
{
|
|
var mysql_token_infos = new List<MySqlTokenInfo>();
|
|
|
|
var read_func = delegate (MySqlDataReader dataReader)
|
|
{
|
|
var mysql_token_info = new MySqlTokenInfo();
|
|
|
|
mysql_token_info.contract_address = dataReader.GetString("contract_address");
|
|
mysql_token_info.token_id = dataReader.GetInt32("token_id");
|
|
mysql_token_info.owner = dataReader.GetString("owner");
|
|
mysql_token_info.staker = dataReader.IsDBNull("staker") ? string.Empty : dataReader.GetString("staker");
|
|
mysql_token_info.is_staked = dataReader.GetInt32("is_staked");
|
|
mysql_token_info.updated_at = dataReader.GetDateTime("updated_at");
|
|
|
|
mysql_token_infos.Add(mysql_token_info);
|
|
|
|
return ServerErrorCode.Success;
|
|
};
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
NullReferenceCheckHelper.throwIfNull(server_logic, () => $"server_logic is null !!!");
|
|
|
|
var result = await MySqlConnectorHelper.simpleQueryExecuteForReaderAsync( $"SELECT * FROM wallet_user WHERE contract_address = '{ServerCommon.Constant.LAND_NFT_CONTRACT_ADDRESS}'"
|
|
, read_func
|
|
, server_logic.getServerConfig().AccountNftDb );
|
|
if(result.isFail())
|
|
{
|
|
err_msg = $"Failed to simpleQueryExecuteForReaderAsync() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
}
|
|
|
|
return (ServerErrorCode.Success, mysql_token_infos);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.getLogger().error($"Exception !!! : {e}");
|
|
return (ServerErrorCode.MySqlDbQueryException, null);
|
|
}
|
|
}
|
|
|
|
static public async Task<(Result, bool)> hasStakedNft(string? jwt)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
NullReferenceCheckHelper.throwIfNull(server_logic, () => "server_logic is null !!!");
|
|
var server_config = server_logic.getServerConfig();
|
|
NullReferenceCheckHelper.throwIfNull(server_config, () => "server_config is null !!!");
|
|
|
|
if (server_config.OfflineMode == true)
|
|
{
|
|
result.setFail(ServerErrorCode.ServerOfflineModeEnable);
|
|
return (result, false);
|
|
}
|
|
|
|
var full_url = server_config.NftRule.CPNftForOwnerAllGetUrl;
|
|
|
|
(bool isSuccess, string resMsg) = await HttpClientHelper.sendHttpRequest("GET"
|
|
, full_url, jwt, null
|
|
, "application/json"
|
|
, "caliverse", "1.0" );
|
|
if (isSuccess == false)
|
|
{
|
|
err_msg = $"Failed to sendWebServer() !!!, in getCPNftForOwnerAll() : resMsg:{resMsg}, targetUrl:{full_url}, jwt:{jwt}";
|
|
result.setFail(ServerErrorCode.NftForOwnerAllGetFailed, err_msg);
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return (result, false);
|
|
}
|
|
|
|
var nft_infos = JsonConvert.DeserializeObject<List<NFTInfo>>(resMsg);
|
|
NullReferenceCheckHelper.throwIfNull(nft_infos, () => $"nft_infos is null !!!");
|
|
|
|
var is_found = nft_infos.Any(nft => nft.IsStaked == 1);
|
|
if (false == is_found)
|
|
{
|
|
err_msg = $"Not found Staked NFT !!!, in getCPNftForOwnerAll() : targetUrl:{full_url}, jwt:{jwt}";
|
|
Log.getLogger().warn(err_msg);
|
|
|
|
return (result, false);
|
|
}
|
|
|
|
return (result, true);
|
|
}
|
|
}
|
|
}
|