초기커밋
This commit is contained in:
199
GameServer/Contents/Nft/Helper/NFTHelper.cs
Normal file
199
GameServer/Contents/Nft/Helper/NFTHelper.cs
Normal file
@@ -0,0 +1,199 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user