/// <summary> /// DBからデータを取得して /// アプリケーション設定を最新化する /// </summary> public void ReloadApplicationSettings() { // 初期化 if (ApplicationSettings == null) { ApplicationSettings = new Dictionary <int, Dictionary <string, string> >(); } ApplicationSettings.Clear(); // パラメータ読み込み using (var db = new MApplicationSettingsDbContext(DbContextOptions)) { // データを取得 var applicationSettings = db.MApplicationSettings; foreach (var applicationSetting in applicationSettings) { int recordId = applicationSetting.ExchangeId; if (!ApplicationSettings.ContainsKey(recordId)) { ApplicationSettings.Add(recordId, new Dictionary <string, string>()); } ApplicationSettings[recordId].Add(applicationSetting.Name, applicationSetting.Value); } } // TODO:取引所ごとに項目が異なるので、アクセサを作成すればよい }
/// <summary> /// 取引所APIクライアントの抽象クラス /// </summary> /// <param name="exchangeId">取引所ID(1〜3、例えばFX_BTC_JPYは2)</param> /// <param name="dbContextOptions">DB接続</param> /// <param name="timeoutSec">Timeout sec.</param> public ExchangeClient( int exchangeId, DbContextOptions dbContextOptions, double timeoutSec = 4 // タイムアウト (デフォルト4秒) ) { cancelOrderList = new List <Order>(); ExchangeId = exchangeId; BotStatus = new Dictionary <string, string>(); parentOrders = new List <Order>(); // TODO:パラメータ更新 using (var db = new MApplicationSettingsDbContext(dbContextOptions)) { // データを取得 var ApplicationSettings = db.MApplicationSettings; Console.WriteLine("ApplicationSettingsをセットアップします"); foreach (var ApplicationSetting in ApplicationSettings) { // TODO:FXのパラメータをセット if (ApplicationSetting.ExchangeId == exchangeId) { if (ApplicationSetting.Name == "productCode") { PRODUCT_CODE = (ProductCode)Enum.Parse(typeof(ProductCode), ApplicationSetting.Value, true); } if (ApplicationSetting.Name == "apiKey") { apiKey = ApplicationSetting.Value; } if (ApplicationSetting.Name == "apiSelect") { apiSelect = ApplicationSetting.Value; } } } } // DBから取得したAPIキーをセット m_apiClient = new ApiClient( apiKey, apiSelect, timeoutSec, "https://api.bitflyer.jp" // TODO:他の取引所に対応させること ); }