using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using MySqlConnector; using ServerCore; using ServerBase; namespace ServerBase; //============================================================================================= // MySqlConnector 관련 각종 지원 함수 // // author : kangms // //============================================================================================= public static class MySqlConnectorHelper { public static async Task simpleTryConnectToDb(string connectionString) { var result = new Result(); var err_msg = string.Empty; using (var db_connector = new MySqlDbConnector()) { var error_cdoe = await db_connector.initMySql(connectionString); if (error_cdoe.isFail()) { err_msg = $"Failed to initMySql() !!! : errCode:{error_cdoe} - connectString:{connectionString}"; result.setFail(error_cdoe, err_msg); } } return result; } public static async Task simpleQueryExecuteForReaderAsync( string queryString, Func readFunc , string connectionString , Int16 queryTimeoutSec = 15 , Int16 retryIntervalMSec = 1000, Int16 retryCount = 3 ) { var result = new Result(); var err_msg = string.Empty; using ( var db_connector = new MySqlDbConnector() ) { for(var i = 0; i <= retryCount; i++) { var error_cdoe = await db_connector.initMySql(connectionString); if (error_cdoe.isSuccess()) { error_cdoe = await db_connector.querySQL(queryString, readFunc); if(error_cdoe.isSuccess()) { // 성공하면 즉시 반환 한다 !!! result.setSuccess(); return result; } } // Db와 연결이 끊어진 경우는 재시도 설정에 따라 추가 처리 한다. if (ConnectionState.Closed == db_connector.getLastConnectionState()) { err_msg = $"Failed to retry Open MySql !!! : errCode:{error_cdoe}"; result.setFail(error_cdoe, err_msg); if (i > 0) { await Task.Delay(retryIntervalMSec); err_msg = $"Retry Query !!! : retriedCount:{i}, queryString:{queryString} - retryableCount:{retryCount}"; Log.getLogger().error(err_msg); } } // 기타 오류 발생시 실패로 처리 한다. else { err_msg = $"Failed to simpleQueryExecuteForReaderAsync() !!! : errCode:{error_cdoe}, queryString:{queryString} - retryCount:{retryCount}"; Log.getLogger().error(err_msg); result.setFail(error_cdoe, err_msg); break; } } } return result; } }