private static bool file_updated_check(dynamic read_req) { // mod_ea用のパラメータファイルを比較してチェック string folder_path = File_CTRL.get_folder_path(read_req) + @"\MQL4\Files"; // EAから出力されるファイルのパス string write_full_path = folder_path + @"\write_parameters.csv"; // EAパラメータファイル出力先のパス string read_full_path = folder_path + @"\read_parameters.csv"; // mod_eaで入出力されるファイルが無い場合(mod_ea未対応ea)の場合は強制的にtrue応答 if (!File_CTRL.check_file(folder_path, "write_parameters.csv")) { return(true); } if (!File_CTRL.check_file(folder_path, "read_parameters.csv")) { return(true); } //タイムスタンプの確認 DateTime write_parameters = System.IO.File.GetLastWriteTime(write_full_path); DateTime read_parameters = System.IO.File.GetLastWriteTime(read_full_path); TimeSpan timeSpan = write_parameters - read_parameters; //DateTime の差が TimeSpan として返る // 更新されたか判定 if ((int)timeSpan.TotalSeconds > 0) { return(true); } return(false); }
private void btn_readFile_Click(object sender, EventArgs e) { // ファイル読み込み string readed_file = File_CTRL.file_Read(txt_readFile.Text); // 各種初期化 dynamic json_obj = ""; bool status = false; string error = ""; string out_put_file_name = ""; if (readed_file.Length > 0) { if (rdo_add_user.Checked) { json_obj = Json_add_user_action.add_user_motion(readed_file, out status, out error); out_put_file_name = "end_init.json"; } if (rdo_request.Checked) { json_obj = Json_request_action.request_motion(readed_file, out status, out error); out_put_file_name = "Response.json"; } if (json_obj != null) { string file_path = System.IO.Path.GetDirectoryName(txt_readFile.Text) + "\\" + out_put_file_name; File_CTRL.file_OverWrite(json_obj.ToString(), file_path); //MessageBox.Show("結果ファイル出力完了!"); } } }
private void btn_create_folders_Click(object sender, EventArgs e) { File_CTRL.recover_folder(txt_create_folders.Text); MessageBox.Show("フォルダ復旧完了! C:\\Users\\GFITを確認してください。", "フォルダ復旧完了", MessageBoxButtons.OK, MessageBoxIcon.Information); // }
private void btn_read_all_setting_Click(object sender, EventArgs e) { String dict = File_CTRL.file_Read(File_CTRL.get_CodeBase_path() + "\\" + "all_setting.txt"); System.Console.WriteLine(dict.ToString()); txt_all_setting.Text = dict; }
/// <summary> /// 停止動作を行います。停止対象はOSのプロセスIDで判断します。 /// </summary> /// <param name="read_req">request.jsonの1レコード</param> /// <param name="error">停止時のエラー情報</param> /// <returns></returns> private static bool program_stop(dynamic read_req, out string error) { bool status = false; //ファイル名:C:\Users\GFIT\u00000212\OANDA-Japan Practice - デモ口座\6835252\USDJPY\H1\terminal.exe // 起動プログラムのパス //string folder_path = @"C:\Users\GFIT\" + read_req.Stc_ID + @"\" + read_req.MT4_Server + @"\" + read_req.MT4_ID + @"\" + read_req.Ccy + @"\" + read_req.Time_Period + @"\" + read_req.EA_Name; string folder_path = File_CTRL.get_folder_path(read_req); string file_path = folder_path + @"\terminal.exe"; status = program_CTRL.SearchProgram(file_path, out error); if (!status) { return(true); } program_CTRL.StopProgram(file_path); // 指示をファイルに出力する機能の追加予定地 string last_order = "stop"; // 最終指示記録ファイルへの書き込み(bool値応答してくれるが一旦は実行のみ) File_CTRL.last_order_rewrite(folder_path, last_order); return(true); }
public static dynamic add_user_motion(string add_user_strings, out bool status, out string error) { dynamic json_obj = ""; status = false; error = ""; Json_Add_User JAU = new Json_Add_User(); json_obj = JAU.Json_accept(add_user_strings, out status, out error); //送受信正常結果格納用パス string filePaht = System.IO.Directory.GetCurrentDirectory() + @"\add_user_log"; if (status) { //正常時、証跡の受信内容をファイル出力 File_CTRL.Write_OK_Log(add_user_strings, filePaht + @"\Accept" + System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + @".txt"); } else { //エラーログファイル出力 logger.Error(" add_user.json 読み込みエラー: " + error + "\n\r" + add_user_strings); } if (json_obj != null) { // インストール用フォルダ生成 json_obj = Create_Install_folder(json_obj, out error); if (error != "") { //エラーログファイル出力 logger.Error(" インストールフォルダ準備エラー 対象Stc_ID:" + error + "\n\r" + add_user_strings); MessageBox.Show(" インストールフォルダ準備エラー 対象Stc_ID:" + error + "\n\r STC_CONのログファイルを確認してください。\n\r一応、応答ファイルは出力しておきますが使わないでください。"); } // 応答用end_init.json生成 json_obj = Json_End_Init.end_init(json_obj, out status, out error); if (status) { //正常時、証跡の送信内容をファイル出力 File_CTRL.Write_OK_Log(json_obj.ToString(), filePaht + @"\Send" + System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + @".txt"); } else { //エラーログファイル出力 logger.Error(" end_init.json 応答準備エラー: " + error + "\n\r" + add_user_strings); } } return(json_obj); }
public static dynamic request_motion(string request_strings, out bool status, out string error) { dynamic json_obj = ""; status = false; error = ""; //送受信正常結果格納用パス string filePaht = System.IO.Directory.GetCurrentDirectory() + @"\rquest_log"; Json_Request JRs = new Json_Request(); json_obj = JRs.Json_accept(request_strings, out status, out error); if (status) { //正常時、証跡の受信内容をファイル出力 File_CTRL.Write_OK_Log(request_strings, filePaht + @"\Accept" + System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + @".txt"); } else { ///エラーログファイル出力 logger.Error(" Request.json 読み込みエラー: " + error + "\n\r" + request_strings); } if (json_obj != null) { // Ope_Codeで指定された動作を実施 json_obj = MT4_CTLR.operation(json_obj, out status, out error); // operationの処理結果のうち、Ope_Code=watchやEA_STATUS=LOADINGは応答から除外する json_obj = remove_inner_resopense(json_obj); if (json_obj != null) { // 応答用response.json生成 json_obj = Json_Resopnse.Response_machine(json_obj, out status, out error); if (status) { //正常時、証跡の送信内容をファイル出力 File_CTRL.Write_OK_Log(json_obj.ToString(), filePaht + @"\Send" + System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + @".txt"); } else { //エラーログファイル出力 logger.Error(" Resopnse.json 応答準備エラー: " + error + "\n\r" + request_strings); } } } return(json_obj); }
private static bool read_ea_param(dynamic read_req, out string error) { // 強制停止しないと処理が先に進むので。。。 System.Threading.Thread.Sleep(5000); // EAが出力するCSVファイル読み込み error = ""; try { // EAから出力されるファイルのパス string write_full_path = File_CTRL.get_folder_path(read_req) + @"\MQL4\Files\write_parameters.csv"; // 更新されたか判定 if (file_updated_check(read_req)) { //ファイル読み込み string param = File_CTRL.file_Read(write_full_path); System.Console.WriteLine(param); //read_reqのOpe_Tagを読み込み内容で上書き // 改行コード指定 string return_code = "\r\n"; // 改行コード位置特定 int return_point = param.IndexOf(return_code); // 改行コード文字サイズ特定 int code_size = return_code.Length; // 改行コードまでの1行目の読み込みとヘッダパラメータへの設定 read_req.Ope_Tag.header = param.Substring(0, return_point); // 2行目位置を設定 return_point += code_size; // 2行目改行のサイズ取得(末尾改行コード切り捨て) int param_len = param.Length - return_point - code_size; // 改行コード以降の2行目の読み込みとパラメターへの設定 read_req.Ope_Tag.param = param.Substring(return_point, param_len); return(true); } else { //更新されていないのでfalseで応答 return(false); } } catch (System.Exception ex) { logger.Error(ex.Message); error = ex.Message; return(false); } }
private static dynamic uninst_mode(dynamic read_req, out bool status, out string error) { // パラメータチェック結果判定 if (read_req.Check_Status == "NG") { error = "事前チェックエラー"; status = false; return(read_req); } // 起動プログラムのパス //string folder_path = @"C:\Users\GFIT\" + read_req.Stc_ID + @"\" + read_req.MT4_Server + @"\" + read_req.MT4_ID + @"\" + read_req.Ccy + @"\" + read_req.Time_Period + @"\" + read_req.EA_Name; string folder_path = File_CTRL.get_folder_path(read_req); string file_path = folder_path + @"\terminal.exe"; status = program_CTRL.SearchProgram(file_path, out error); if (status) { // 起動している場合は、事前停止動作をさせます program_CTRL.StopProgram(file_path); } status = File_CTRL.file_rename(file_path, "terminal.exe", "@terminal.exe"); if (status) { error = ""; read_req.EA_Status = "outage"; // 指示をファイルに出力する機能の追加予定地 string last_order = "outage"; // 最終指示記録ファイルへの書き込み(bool値応答してくれるが一旦は実行のみ) File_CTRL.last_order_rewrite(folder_path, last_order); } else { if (File.Exists(folder_path + @"\@terminal.exe")) { // outageが既に行われている場合の応答 error = ""; read_req.EA_Status = "outage"; } else { // outage対象が存在していない場合の応答 error = "リネーム失敗"; read_req.EA_Status = "UNKNOWN"; } } return(read_req); }
private void btn_csv_read_Click(object sender, EventArgs e) { try { Dictionary <string, string> dict = File_CTRL.csv_reader("all_setting.txt"); dict[@"C:\Users\GFIT\u00001105\┗Ava-Demo\5997487\USDJPY\H1\ReloadTemplateEA.mq4"] = "AAA"; System.Console.WriteLine(File_CTRL.csv_writer("all_setting.txt", dict)); } catch (System.Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// 正常操作時の証跡ログ出力ユーティリティ /// </summary> /// <param name="write_obj">出力文字列</param> /// <param name="file_full_path">出力先ファイルパス</param> public static void Write_OK_Log(string write_obj, string file_full_path) { //ファイル出力 try { // App.configのSuccess_log_switchで出力制御を行います // 読み込みはProgramクラス(Program.cs)で行っています。 if (Program.Success_log_switch) { File_CTRL.file_OverWrite(write_obj, file_full_path); } } catch (System.Exception ex) { logger.Error(" 正常処理結果証跡ファイル生成失敗: " + ex.Message); } }
public static Dictionary <string, string> ea_param_motion(string request_strings, out bool status, out string error) { dynamic json_obj = ""; status = false; error = ""; //送受信正常結果格納用パス string filePaht = System.IO.Directory.GetCurrentDirectory() + @"\rquest_log"; Json_EA_Param JRs = new Json_EA_Param(); json_obj = JRs.Json_accept(request_strings, out status, out error); if (status) { //正常時、証跡の受信内容をファイル出力 File_CTRL.Write_OK_Log(request_strings, filePaht + @"\Accept" + System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + @".txt"); } else { ///エラーログファイル出力 logger.Error(" ea_param.json 読み込みエラー: " + error + "\n\r" + request_strings); } // 応答用Dictionary var dict = new Dictionary <string, string>(); if (json_obj != null) { foreach (dynamic read_req in (object[])json_obj) { // EAのパラメータファイルをメモリに格納するか ファイルに出力する System.Console.WriteLine(Json_Util.get_Value(read_req, "name")); System.Console.WriteLine(Json_Util.get_Value(read_req, "type")); System.Console.WriteLine(Json_Util.get_Value(read_req, "desc")); System.Console.WriteLine(Json_Util.get_Value(read_req, "nonVolFlag")); System.Console.WriteLine(Json_Util.get_Value(read_req, "PARAM")); // Dictionaryに追加 dict.Add(Json_Util.get_Value(read_req, "name"), Json_Util.get_Value(read_req, "nonVolFlag")); } } return(dict); }
/// <summary> /// 起動後にOSプロセスとして存在しているか監視を行います。 /// </summary> /// <param name="read_req">request.jsonの1レコード</param> /// <param name="error">監視時のエラー情報</param> /// <returns></returns> private static bool program_watch(dynamic read_req, out string error) { bool status = false; //ファイル名:C:\Users\GFIT\u00000212\OANDA-Japan Practice - デモ口座\6835252\USDJPY\H1\terminal.exe // 起動プログラムのパス //string file_path = @"C:\Users\GFIT\" + read_req.Stc_ID + @"\" + read_req.MT4_Server + @"\" + read_req.MT4_ID + @"\" + read_req.Ccy + @"\" + read_req.Time_Period + @"\" + read_req.EA_Name + @"\terminal.exe"; string file_path = File_CTRL.get_folder_path(read_req) + @"\terminal.exe"; status = program_CTRL.SearchProgram(file_path, out error); if (!status) { error = "起動していません"; return(false); } return(true); }
/// <summary> /// EA用のパラメータファイルを出力します。 /// STC_サーバーからOpe_Tagの内容をそのままファイル出力します。 /// </summary> /// <param name="read_req"></param> /// <param name="error"></param> /// <returns></returns> public static bool output_ea_param(dynamic read_req, out string error) { error = ""; try { // 更新or作成前にファイルのタイムスタンプを取得予定地 // mod_ea用のパラメータファイルを比較してチェック string folder_path = File_CTRL.get_folder_path(read_req) + @"\MQL4\Files"; // EAパラメータファイル出力先のパス string read_full_path = folder_path + @"\read_parameters.csv"; DateTime read_parameters = System.IO.File.GetLastWriteTime(read_full_path); // EAパラメータファイル出力先のMT4起動プログラムのパス string out_put_full_path = read_full_path; string param = ""; param += Json_Util.get_Ope_Tag_Value(read_req, "header"); param += "\r\n"; param += Json_Util.get_Ope_Tag_Value(read_req, "param"); File_CTRL.file_OverWrite(param, out_put_full_path, false); // 更新後、ファイルのタイムスタンプが更新されているかチェック予定地 DateTime after_read_parameters = System.IO.File.GetLastWriteTime(read_full_path); TimeSpan timeSpan = after_read_parameters - read_parameters; //DateTime の差が TimeSpan として返る // 更新されたか判定 if ((int)timeSpan.TotalSeconds > 0) { return(true); } return(false); } catch (System.Exception ex) { logger.Error(ex.Message); error = ex.Message; return(false); } }
/// <summary> /// 起動動作を行います。 /// 起動後、直ぐにOSのプロセスIDで起動開始しているか確認を行います。 /// </summary> /// <param name="read_req">request.jsonの1レコード</param> /// <param name="error">起動時のエラー情報</param> /// <returns></returns> private static bool program_start(dynamic read_req, out string error) { bool status = false; // 起動プログラムのパス //string folder_path = @"C:\Users\GFIT\" + read_req.Stc_ID + @"\" + read_req.MT4_Server + @"\" + read_req.MT4_ID + @"\" + read_req.Ccy + @"\" + read_req.Time_Period + @"\" + read_req.EA_Name; string folder_path = File_CTRL.get_folder_path(read_req); string program_path = folder_path + @"\terminal.exe"; string option_param = "/portable /skipupdate"; if (MainForm.mt4_opt) { status = program_CTRL.StartProgram(program_path, option_param); } else { status = program_CTRL.StartProgram(program_path); } if (!status) { error = "起動失敗しました。"; return(false); } //ファイル名:C:\Users\GFIT\u00000212\OANDA-Japan Practice - デモ口座\6835252\USDJPY\H1\terminal.exe string file_path = program_path; status = program_CTRL.SearchProgram(file_path, out error); if (!status) { return(false); } // 指示をファイルに出力する機能の追加予定地 string last_order = "start"; // 最終指示記録ファイルへの書き込み(bool値応答してくれるが一旦は実行のみ) File_CTRL.last_order_rewrite(folder_path, last_order); return(true); }
/// <summary> /// フォルダパス(MT4インストール)のキー値を使用して最終指示を上書き更新します /// </summary> /// <param name="folder_path">MT4のインストールパス</param> /// <param name="last_order">最終指示内容</param> /// <returns></returns> public static bool last_order_rewrite(string folder_path, string last_order) { try { Dictionary <string, string> dict = File_CTRL.csv_reader("all_setting.txt"); // キーの存在有無に関わらず、書き込みを行います。存在チェックをする場合はキー値で値を取り出すとエラートラップできます。 // string test = dict[folder_path]; // この様な形でやるとキーエラーが発生します。 dict[folder_path] = last_order; return(csv_writer("all_setting.txt", dict)); } catch (System.Exception ex) { // ファイルを開くのに失敗したとき logger.Error(" 最終指示情報更新失敗: " + ex.Message); return(false); } }
/// <summary> /// 受け取った最終指示が可能されているdcitをそのままall_setting.txtに書き出します。 /// </summary> /// <param name="dict">全顧客の指示一覧</param> /// <returns>書き込み成功時true,失敗時false</returns> public static bool csv_writer(string file_name, Dictionary <string, string> dict) { try { string write_text = ""; foreach (var pair in dict) { write_text += pair.Key + "," + pair.Value + "\r\n"; } // 指示ファイル上書き指示 //File_CTRL.file_OverWrite(write_text, get_CodeBase_path() + "\\all_setting.txt", false); File_CTRL.file_OverWrite(write_text, get_CodeBase_path() + "\\" + file_name, false); return(true); } catch (System.Exception ex) { // ファイルを開くのに失敗したとき logger.Error(" CSV書き込み失敗: " + ex.Message); return(false); } }
/// <summary> /// all_setting.txtから検索用の情報を取得して指定のコンボボックスへアイテム追加 /// </summary> /// <param name="sender">アイテム登録対象のコンボボックス</param> /// <param name="folder_name">検索する対象のフォルダまでの絶対パス</param> private void set_cmb_data2(object sender, string folder_name) { folder_name = @"C:\Users\GFIT\" + folder_name; if (sender != null) { System.Windows.Forms.ComboBox cmb_target = (System.Windows.Forms.ComboBox)sender; //格納用配列を生成 string[] ary1 = new string[] { }; //配列をコレクションに変換する System.Collections.Generic.List <string> strList = new System.Collections.Generic.List <string>(ary1); // all_settingファイルを開く using (var sr = new System.IO.StreamReader(File_CTRL.get_CodeBase_path() + "\\all_setting.txt", Encoding.GetEncoding("SJIS"))) { // ストリームの末尾まで繰り返す while (!sr.EndOfStream) { // ファイルから一行読み込む var line = sr.ReadLine(); // 読み込んだ一行をカンマ毎に分けて配列に格納する var values = line.Split('\\', ','); // Containsで上位フォルダ指定と一致しているか判定 if (line.Contains(folder_name)) { int i = 0; //コンボボックスの名前でcase分け switch (cmb_target.Name) { case "cmb_stcUser2": i = 3; break; case "cmb_mt4SV2": i = 4; break; case "cmb_mt4ID2": i = 5; break; case "cmb_CCY2": i = 6; break; case "cmb_Time_Period2": i = 7; break; case "cmb_EA_ID2": i = 8; break; } strList.Add(values[i]); } } } if (strList.Count > 0) { // 一意の要素を抜き出して、配列に変換する string[] resultArray = strList.Distinct().ToArray(); // 設定前に一旦クリア cmb_target.Items.Clear(); foreach (string subFolder in resultArray) { // 列挙された情報をcomboboxに設定 cmb_target.Items.Add(subFolder); } } } }
private void button1_Click_1(object sender, EventArgs e) { File_CTRL.log_file_del(); }
private static dynamic Create_Install_folder(dynamic json_obj, out string error) { // エラー初期化 error = ""; try { bool status = false; // インストール設定ファイル string ins_file_name = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); // フォルダ生成 foreach (dynamic read_user in (object[])json_obj) { /* VPSでのMT4大量稼働試験で確認出来た、1つのOSユーザーで多数のMT4を稼働させる方式で検討を進めています。 * 現在の想定は * c:\Users\GFIT\"Stc_ID"\"Broker_Name"\"MT4_ID"\"Ccy"\"Time_Period" * のパスをMT4のインストールパスにしようと考えております。 */ string stc_id = ""; // インストールパス応答初期化 string ins_path = ""; status = File_CTRL.CreateUserFolder(read_user, out stc_id, out ins_path); if (!status) { error = error + " Stc_ID:" + stc_id + "\n\r"; read_user.Check_Status = "NG"; } else { // デスクトップにインストールパス格納ファイル生成 if (MainForm.mt4_opt) { // 動作時オプション有効ボタンがtrueの場合はフォルダ特定可能なので直接セッティングテキストを出力 string files_path = File_CTRL.get_folder_path(read_user) + @"\MQL4\Files"; // filesフォルダーの生成 File_CTRL.file_OverWrite(ins_path, files_path + @"\setting.txt"); // 一旦空でread_parametersファイル出力 string read_full_path = files_path + @"\read_parameters.csv"; string param = ""; File_CTRL.file_OverWrite(param, read_full_path, false); //eaのパラメータファイルを出力する機能を追加 string dummy_error = ""; MT4_CTLR.output_ea_param(read_user, out dummy_error); } else { // 動作時オプション有効ボタンがfalseの場合は手動でセッティングテキストを設定してもらうため任意の場所にファイル出力 File_CTRL.file_OverWrite(ins_path, ins_file_name + "\\" + stc_id + "_setting.txt"); } // 全ユーザーのインストールパス格納ファイルを出力する(稼働監視用) File_CTRL.file_AddWrite(ins_path + ",Setup", File_CTRL.get_CodeBase_path() + "\\all_setting.txt"); } } return(json_obj); } catch (System.Exception ex) { logger.Error(ex.Message); error = "追加時フォルダ生成エラー"; return(null); } }
private void btn_get_folders_Click(object sender, EventArgs e) { File_CTRL.get_folders(); MessageBox.Show("フォルダバックアップ完了! C:\\STC_controller_log\\Folder_logを確認してください。", "フォルダバックアップ完了", MessageBoxButtons.OK, MessageBoxIcon.Information); }
private void btn_reame_Click(object sender, EventArgs e) { File_CTRL.file_rename(txt_renameFile.Text, "request.json", "@terminal.exe"); }
public MainForm() { InitializeComponent(); //起動後にキュータイマー稼働 Retry_Timer = new retry_timer(); Retry_Timer.NewTimer(); Retry_Timer.StartTimer(); // テストサーバーへの接続を設定 rdo_stg.Checked = true; // マシン名のファイル読み込み // con_setting.txtに設定ファイルを統一 // machine_name = File_CTRL.file_Read(@"./Machine_Name.txt"); // lbl_Machine_Name.Text = machine_name; // 起動時の設定読み込み Dictionary <string, string> dict = File_CTRL.csv_reader(@"./con_setting.txt"); // 各種起動時動作を行う foreach (var pair in dict) { switch (pair.Key) { case "machine_name": // マシン名のファイル読み込み サーバー名文字列 System.Console.WriteLine(pair.Value); machine_name = pair.Value; lbl_Machine_Name.Text = pair.Value; break; case "real_server_url": // 本番接続先を設定フェイルから読み出します。 if (pair.Value != "") { real_server_url = pair.Value; } break; case "stc_server": // STC_CONの接続先サーバー test…STG環境、real…本番環境 System.Console.WriteLine(pair.Value); switch (pair.Value) { case "test": // STG環境へ接続 rdo_stg.Checked = true; break; case "real": // 本番環境へ接続 rdo_real.Checked = true; break; default: // 当てはまらない場合はSTG環境へ接続 rdo_stg.Checked = true; break; } break; case "recover_start": // 起動時実行状態再現 true…再現実行、false…再現はしない System.Console.WriteLine(pair.Value); if (pair.Value == "true") { MT4_CTLR.recover_MT4(); } break; case "request_timer": // リクエストポーリングタイマー true…起動時実行、false…起動時実行しない System.Console.WriteLine(pair.Value); if (pair.Value == "true") { tgl_reuest.Checked = true; } else { tgl_reuest.Checked = false; } break; case "sock_connect": // 監視ソケット true…起動時受入状態、false…起動時受け入れない System.Console.WriteLine(pair.Value); if (int.TryParse(pair.Value, out port_no)) { tgl_socket.Checked = true; } else { tgl_socket.Checked = false; } break; case "MT4_watch": // MT4接続監視 true…監視する、false…監視しない System.Console.WriteLine(pair.Value); if (pair.Value == "true") { tgl_MT4_watch.Checked = true; mt4_opt = true; } else { tgl_MT4_watch.Checked = false; mt4_opt = false; } break; case "MT4_option": // MT4起動時オプション /portable /skipupdate true…有効、false…無効 System.Console.WriteLine(pair.Value); if (pair.Value == "true") { tgl_MT4_option.Checked = true; } else { tgl_MT4_option.Checked = false; } break; default: // 設定ファイル上の指示がおかしい場合 break; } } // EA毎のvol1応答の強制書き換え設定の取得 get_vol1_setting(); }
private void btn_http_get_Click(object sender, EventArgs e) { if (!System.IO.Directory.Exists(txt_out_put.Text)) { MessageBox.Show("指定されたフォルダが見当たりません!デスクトップの所定フォルダに強制設定します!"); // パスをend_initとend_ea_add用のフォルダにします string output_path = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); if (rdo_url_add_user.Checked) { // ユーザー追加 output_path += @"\end_init"; } else if (rdo_url_add_EA.Checked) { // EA追加 output_path += @"\end_ea_add"; } txt_out_put.Text = output_path; } // URL用文字列 string request_machine = ""; string order_url = ""; string add_user = ""; string add_EA = ""; if (txt_get_url.Text == "") { add_user = add_user_url; request_machine = request; add_EA = add_EA_url; } else { add_user = txt_get_url.Text; request_machine = txt_get_url.Text; add_EA = txt_get_url.Text; } // ラジオボタンはadd_userだけだが取り敢えずrequest_machineも分岐してみる if (rdo_url_add_user.Checked) { // ユーザー追加 order_url = add_user; } else if (rdo_url_request.Checked) { // 操作リクエスト order_url = request_machine; } else if (rdo_url_add_EA.Checked) { // EA追加 order_url = add_EA; } dynamic json_obj = ""; bool status = false; string error = ""; string result = http_Request_CTRL.http_get(order_url, out status); if (status) { string out_put_file_name = ""; if (rdo_url_add_user.Checked || rdo_url_add_EA.Checked) { add_mt4_folder(result); /* * json_obj = Json_add_user_action.add_user_motion(result, out status, out error); * * if (json_obj == null) * { * MessageBox.Show("対象データが取得できませんでした!con_setting.txtの記載順でreal_server_urlが2行目ですか?"); * return; * } * /* * //jsonを1レコード単位に分解してファイル出力する * foreach (dynamic read_user in (object[])json_obj) * { * string created_user = read_user.Stc_ID + "_" + read_user.MT4_Server + "_" + read_user.MT4_ID + "_" + read_user.Ccy + "_" + read_user.Time_Period + "_" + read_user.EA_ID; + + System.Console.WriteLine(created_user); + + if (rdo_url_add_user.Checked) + { + // ユーザー追加 + out_put_file_name = "ei_" + created_user + ".json"; + } + else if (rdo_url_add_EA.Checked) + { + // EA追加 + out_put_file_name = "ea_" + created_user + ".json"; + } + + if (read_user != null) + { + File_CTRL.file_OverWrite("[" + read_user.ToString() + "]", txt_out_put.Text + "\\" + out_put_file_name); + + } + + } */ /* * // 登録結果としてインストールフォルダのログを出力して保管 * File_CTRL.get_folders(); * * MessageBox.Show("結果ファイル出力完了!"); * */ } else { json_obj = Json_request_action.request_motion(result, out status, out error); out_put_file_name = "Response.json"; if (json_obj != null) { File_CTRL.file_OverWrite(json_obj.ToString(), txt_out_put.Text + "\\" + out_put_file_name); MessageBox.Show("結果ファイル出力完了!"); } } } else { MessageBox.Show(result); } }
private async void btn_http_post_Click(object sender, EventArgs e) { //if (txt_word.Text != "") //{ // if (!System.IO.File.Exists(txt_word.Text)) // { // MessageBox.Show("ファイルが見つかりません!", "ファイル存在チェック", MessageBoxButtons.OK, MessageBoxIcon.Error); // return; // } //} string request_string = ""; bool status = false; if (txt_word.Text != "") { // ファイル読み込み request_string = File_CTRL.file_Read(txt_word.Text); } else { string get_url = ""; if (rdo_get_url_add_user.Checked) { get_url = add_user_url; } else { get_url = request; } request_string = http_Request_CTRL.http_get(get_url, out status); if (!status) { MessageBox.Show(request_string); return; } } string post_url = ""; if (rdo_stc.Checked) { if (rdo_get_url_add_user.Checked) { post_url = upload; } else { post_url = resultbox; } } if (rdo_kakuninn.Checked) { post_url = "http://www.kojikoji.net/"; } if (rdo_set_post_url.Checked) { post_url = txt_post_url.Text; } if (post_url == "") { MessageBox.Show("post url が未指定です!", "post対象チェック", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 各種初期化 dynamic json_obj = ""; //bool status = false; string error = ""; if (rdo_get_url_add_user.Checked) { json_obj = Json_add_user_action.add_user_motion(request_string, out status, out error); } else { json_obj = Json_request_action.request_motion(request_string, out status, out error); } if (status) { if (json_obj != null) { //Console.WriteLine("呼出し:" + MT4_CTLR.operation(json_obj)); MessageBox.Show("Http Post開始!"); string result = await http_Request_CTRL.http_post(json_obj.ToString(), post_url); string file_path = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\結果.html"; File_CTRL.file_OverWrite(result, file_path); MessageBox.Show("Http Post終了!結果.htmlが生成されました"); } else { MessageBox.Show("postするべきデータが作れませんでした"); } } }
/// <summary> /// MT4が起動しているか確認して応答を行います。 /// MT4が起動状態であればEA_StatusにONを設定し、起動していなければOFFを設定します。 /// </summary> /// <param name="read_req">request.jsonの1レコード</param> /// <param name="status">状態取得でエラーが発生していなければtrue、発生した場合はFalse</param> /// <param name="error">確認時のエラー情報</param> /// <returns></returns> private static dynamic get_status(dynamic read_req, out bool status, out string error) { // パラメータチェック結果判定 if (read_req.Check_Status == "NG") { error = "事前チェックエラー"; status = false; return(read_req); } status = program_watch(read_req, out error); if (status) { // mod_eaが存在し更新されたか判定 if (file_updated_check(read_req)) { // MT4起動中のステータス設定 read_req.EA_Status = "ON"; } else { // MT4起動中のステータス設定 read_req.EA_Status = "mod_ea_fail"; } Dictionary <string, string> dict = File_CTRL.csv_reader("all_setting.txt"); string file_path = File_CTRL.get_folder_path(read_req); Console.WriteLine("リクエスト上のファイルパスは" + file_path); foreach (var pair in dict) { Console.WriteLine("Dic設定上の" + pair.Key + "は" + pair.Value); if (pair.Key == file_path) { if (pair.Value == "force_stop") { read_req.EA_Status = "OFF"; } break; } } // MT4は起動しているが通信が切断している場合の判断を追加 } else { // outageの場合の処理追加 // 起動プログラムのパス //string folder_path = @"C:\Users\GFIT\" + read_req.Stc_ID + @"\" + read_req.MT4_Server + @"\" + read_req.MT4_ID + @"\" + read_req.Ccy + @"\" + read_req.Time_Period + @"\" + read_req.EA_Name; string folder_path = File_CTRL.get_folder_path(read_req); string file_path = folder_path + @"\terminal.exe"; string outage_file_path = folder_path + @"\@terminal.exe"; // プログラムの存在判断 if (File.Exists(file_path)) { // MT4停止のステータス設定 read_req.EA_Status = "OFF"; } else if (File.Exists(outage_file_path)) { // MT4停止のステータス設定 期限切れ read_req.EA_Status = "outage"; } else { // MT4停止のステータス設定 存在していないのでUNKNOWN read_req.EA_Status = "UNKNOWN"; } } error = ""; status = true; return(read_req); }
/// <summary> /// 指定されたユーザー追加若しくはEA追加データを使ってインストールフォルダの準備を行う /// </summary> /// <param name="add_target">インストールフォルダ生成情報文字列add_user/add_EA</param> /// <returns></returns> private bool add_mt4_folder(string add_target) { MessageBox.Show("デスクトップの所定フォルダに強制設定します!"); // パスをend_initとend_ea_add用のフォルダにします string output_path = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); if (rdo_url_add_user.Checked) { // ユーザー追加 output_path += @"\end_init"; } else if (rdo_url_add_EA.Checked) { // EA追加 output_path += @"\end_ea_add"; } txt_out_put.Text = output_path; string out_put_file_name = ""; if (rdo_url_add_user.Checked || rdo_url_add_EA.Checked) { dynamic json_obj = ""; bool status = false; string error = ""; json_obj = Json_add_user_action.add_user_motion(add_target, out status, out error); if (json_obj == null) { MessageBox.Show("対象データが取得できませんでした!\n\r対象を選択していますか?\n\rcon_setting.txtの記載順でreal_server_urlが2行目ですか?"); return(false); } //jsonを1レコード単位に分解してファイル出力する foreach (dynamic read_user in (object[])json_obj) { string created_user = read_user.Stc_ID + "_" + read_user.MT4_Server + "_" + read_user.MT4_ID + "_" + read_user.Ccy + "_" + read_user.Time_Period + "_" + read_user.EA_ID; System.Console.WriteLine(created_user); if (rdo_url_add_user.Checked) { // ユーザー追加 out_put_file_name = "ei_" + created_user + ".json"; } else if (rdo_url_add_EA.Checked) { // EA追加 out_put_file_name = "ea_" + created_user + ".json"; } if (read_user != null) { File_CTRL.file_OverWrite("[" + read_user.ToString() + "]", txt_out_put.Text + "\\" + out_put_file_name); } } // 登録結果としてインストールフォルダのログを出力して保管 File_CTRL.get_folders(); MessageBox.Show("結果ファイル出力完了!"); } return(true); }
/// <summary> /// MT4の起動状況の再現をall_setting.txtを使って行います。 /// Windowsアップデートなどでサーバーがリブートした場合に /// MT4も停止するので、その状況からサービスを再開させる事が目的です。 /// </summary> public static void recover_MT4() { try { // 最終指示状況をDictionary型で取得します。 Dictionary <string, string> dict = File_CTRL.csv_reader("all_setting.txt"); foreach (var pair in dict) { //Console.WriteLine("Dic設定上の" + pair.Key + "は" + pair.Value); switch (pair.Value) { case "start": // MT4起動&自動売買開始 bool status = false; string program_path = pair.Key + @"\terminal.exe"; string error = ""; string option_param = "/portable /skipupdate"; // 起動指示前に起動しているかの確認 status = program_CTRL.SearchProgram(program_path, out error); if (!status) { // 起動動作を行います // program_CTRL.StartProgramはbool値返すのでfalseの時はログへ出力する if (MainForm.mt4_opt) { status = program_CTRL.StartProgram(program_path, option_param); } else { status = program_CTRL.StartProgram(program_path); } if (!status) { logger.Error(" 起動状態再現失敗 起動する事が出来ませんでした: パス:" + pair.Key + " 最終指示:" + pair.Value); } } else { logger.Error(" 起動状態再現 既に起動状態でした: パス:" + pair.Key + " 最終指示:" + pair.Value); } break; case "stop": // MT4停止&自動売買停止 break; case "reload": // MT4再起動 break; case "status": // STCログイン時のMT4起動状態応答用 break; case "outage": // 退会処理 break; case "mod_ea": // EAの設定変更 break; case "mod_brok": // ブローカーの設定変更 break; case "watch_s": // 起動状態の監視 break; case "watch_r": // 再起動状態の監視 break; case "force_stop": // 稼働検査でのタイムスタンプチェックで強制停止 break; default: // 指示ファイル上の指示がおかしい場合 logger.Error(" 起動状態再現失敗 全体最終指示ファイル上のパラメータエラー: パス:" + pair.Key + " 最終指示:" + pair.Value); break; } } } catch (System.Exception ex) { // ファイルを開くのに失敗したとき logger.Error(" 起動状態再現失敗: " + ex.Message); } }
/// <summary> /// 各MT4インストールフォルダで更新されているgfit.txtのタイムスタンプをチェックし /// MT4のダミーEAが動作しているか判定を行います。 /// MT4が稼働指示されている状態でタイムスタンプが更新されていない場合は /// MT4サーバーへ接続できていないと判断し強制終了を行います。 /// 将来的にはSTC_SVへ通知する機能を実装する構想です。 /// </summary> public static void connect_watch() { try { // MT4の監視機能ではありますが、ログ掃除もここに配置しておく File_CTRL.log_file_del(); string watch_log_file = @"\gfit.txt"; // 最終指示状況をDictionary型で取得します。 Dictionary <string, string> dict = File_CTRL.csv_reader("all_setting.txt"); foreach (var pair in dict) { //Console.WriteLine("Dic設定上の" + pair.Key + "は" + pair.Value); if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(pair.Key + watch_log_file))) { switch (pair.Value) { case "start": // MT4起動&自動売買開始 // 更新日時を取得する DateTime dtUpdate = System.IO.File.GetLastWriteTime(pair.Key + watch_log_file); TimeSpan ts = DateTime.Now - dtUpdate; //DateTime の差が TimeSpan として返る Console.WriteLine("最終更新日時からの秒差: " + ts.TotalSeconds + "秒の差があります。"); // 現在日時と更新日時が一定時間乖離した場合は以降の処理を実装(取り敢えず10分=600秒ぐらいかな) if ((int)ts.TotalSeconds > 600) { // 通知後に該当のMT4を強制停止 Console.WriteLine("強制停止"); string err = ""; if (!program_CTRL.SearchProgram(pair.Key + @"\terminal.exe", out err)) // 否定IFに変更して下記をコメントアウト /*{ * program_CTRL.StopProgram(pair.Key + @"\terminal.exe"); * } * else*/ { logger.Error(" 接続監視失敗 停止対象のプログラムがOS上で見つかりませんでした パス:" + pair.Key + " 最終指示:" + pair.Value); } // 強制停止後、最終指示一覧に強制停止である事を上書き File_CTRL.last_order_rewrite(pair.Key, "force_stop"); // STCサーバーへ通知する機能の実装予定地 System.Console.WriteLine(pair.Key); //throw_force_stop_status(pair.Key); //停止だけだったので開始と共通化しましたのでこちらは使いません throw_notice(pair.Key, "OFF"); } break; case "stop": // MT4停止&自動売買停止 break; case "reload": // MT4再起動 break; case "status": // STCログイン時のMT4起動状態応答用 break; case "outage": // 退会処理 break; case "mod_ea": // EAの設定変更 break; case "mod_brok": // ブローカーの設定変更 break; case "watch_s": // 起動状態の監視 break; case "watch_r": // 再起動状態の監視 break; case "force_stop": // 稼働検査でのタイムスタンプチェックで強制停止 DateTime lastUpdate = System.IO.File.GetLastWriteTime(pair.Key + watch_log_file); TimeSpan timeSpan = DateTime.Now - lastUpdate; //DateTime の差が TimeSpan として返る Console.WriteLine("最終更新日時からの秒差: " + timeSpan.TotalSeconds + "秒の差があります。"); // 現在日時と更新日時が一定時間差以内になった場合は以降の処理を実装(取り敢えず30秒ぐらいかな) if ((int)timeSpan.TotalSeconds < 30) { // STCサーバーへの復帰の通知とall_setting.txtの最終指示更新 // 通知後に該当のMT4を強制停止 Console.WriteLine("復帰"); string err = ""; if (!program_CTRL.SearchProgram(pair.Key + @"\terminal.exe", out err)) { logger.Error(" 接続監視失敗 復帰確認対象のプログラムがOS上で見つかりませんでした パス:" + pair.Key + " 最終指示:" + pair.Value); } // 復帰確認後後、最終指示一覧に起動中である事を上書き File_CTRL.last_order_rewrite(pair.Key, "start"); // STCサーバーへ通知する機能の実装予定地 System.Console.WriteLine(pair.Key); throw_notice(pair.Key, "ON"); } break; default: // 指示ファイル上の指示がおかしい場合 logger.Error(" 接続監視失敗 最終指示ファイル上のパラメータエラー: パス:" + pair.Key + " 最終指示:" + pair.Value); break; } } else { // 指定されたファイルが見つからない場合 logger.Error(" 接続監視失敗 最終指示ファイル上の指定フォルダのgfit.txtが見つかりません: パス:" + pair.Key + " 最終指示:" + pair.Value); } } } catch (System.Exception ex) { // ファイルを開くのに失敗したとき logger.Error(" 接続監視失敗失敗: " + ex.Message); } }