private static void throw_force_stop_status(string path_string) { try { // 取り敢えずここで強制停止時のJsonを生成してサーバーへ投げ込むまでの // 機能実装を行ってテストしみてる! // all_setting上のプログラムインストールパスを区切りで分割して配列に格納する string[] stArrayData = path_string.Split('\\'); // データを確認する /* * foreach (string stData in stArrayData) * { * System.Console.WriteLine(stData); * } * System.Console.WriteLine(stArrayData[1]); */ ArrayList OK_req_list = new ArrayList(); //定義変更時はRequest_machine_checkの項目も併せて修正しましょう! dynamic req_obj = new DynamicJson(); // ルートのコンテナ req_obj.Ope_Number = -1; req_obj.Stc_ID = stArrayData[3]; //req_obj.Request_Time = Json_Util.iso_8601_now(); req_obj.Machine_Name = MainForm.machine_name; req_obj.Response_Time = Json_Util.iso_8601_now(); req_obj.EA_ID = stArrayData[8]; req_obj.Broker_Name = stArrayData[4]; req_obj.MT4_Server = stArrayData[4]; req_obj.MT4_ID = stArrayData[5]; req_obj.Ccy = stArrayData[6]; req_obj.Time_Period = stArrayData[7]; req_obj.Ope_Code = "notice"; //req_obj.Vol_1shot = ""; //req_obj.A_Start = ""; req_obj.EA_Status = "OFF"; OK_req_list.Add(req_obj); dynamic out_put = Json_Util.reParse(OK_req_list); // 処理結果登録 http_Request_CTRL.http_post(out_put.ToString(), MainForm.ea_alert); //MainForm//private void rdo_stg_CheckedChanged } catch (System.Exception ex) { logger.Error(ex.Message); } }
/// <summary> /// 監視用タイマーのタイマーイベントです。 /// キューイングされているjsonから処理上に付加されたタグを除去してリクエスト時の状態に戻します。 /// その上でリクエストの受信時の動作を呼び出して、再実行します。 /// 戻りのPOSTリクエストをコメントにしてるのでasyncが警告となっています。 /// </summary> /// <param name="source"></param> /// <param name="e"></param> private async void OnTimerEvent(object source, ElapsedEventArgs e) { int get_cnt = Program.queue_list.Count; if (get_cnt > 0) { dynamic retry_obj = null; retry_obj = Json_Util.reParse(Program.queue_list); Program.queue_list.RemoveRange(0, get_cnt); foreach (dynamic retry in (object[])retry_obj) { bool status = false; string error = ""; // response登録先URL string post_url = "https://systrade-cloud.com/server/resultbox.php"; //キューに入っている内容をリクエスト時の状態に再整形 if (Json_Util.get_Value(retry, "Check_Status") != "") { retry.Delete("Check_Status"); } if (Json_Util.get_Value(retry, "EA_Status") != "") { retry.Delete("EA_Status"); } dynamic json_obj = Json_request_action.request_motion("[" + retry.ToString() + "]", out status, out error); if (status) { if (json_obj != null) { // 処理結果登録 await http_Request_CTRL.http_post(json_obj.ToString(), post_url); // debug用 //string file_path = "C:\\Users\\f464\\Desktop\\Response.json"; //File_CTRL.file_OverWrite(json_obj.ToString(), file_path); } } } } }
private static dynamic remove_inner_resopense(dynamic json_obj) { dynamic response_json = null; ArrayList OK_req_list = new ArrayList(); if (json_obj != null) { foreach (dynamic read_obj in (object[])json_obj) { string ope_conde = read_obj.Ope_Code; switch (ope_conde) { case "watch_s": if (read_obj.EA_Status == "ON") { read_obj.Ope_Code = "start"; OK_req_list.Add(read_obj); } break; case "watch_r": if (read_obj.EA_Status == "ON") { read_obj.Ope_Code = "reload"; OK_req_list.Add(read_obj); } break; default: OK_req_list.Add(read_obj); break; } } } if (OK_req_list.Count > 0) { response_json = Json_Util.reParse(OK_req_list); } return(response_json); }
/// <summary> /// 処理結果応答用のend_initをjsonとして生成します 生成時に必要項目を更新します /// </summary> /// <param name="read_json_obj">応答対象となる処理済みのjson(add_user.json)</param> /// <param name="status">全体処理結果をOUTします 全て正常の場合はtrue 1件でもエラーがある場合はfalse</param> /// <param name="error">1件でもエラーがある場合はエラー内容をOUTします</param> /// <returns>応答用のend_init形式のjson</returns> public static dynamic end_init(dynamic read_json_obj, out bool status, out string error) { try { ArrayList OK_user_list = new ArrayList(); foreach (dynamic read_user in (object[])read_json_obj) { //定義変更時はadd_user_checkの項目も併せて修正しましょう! dynamic user_obj = new DynamicJson(); // ルートのコンテナ user_obj.Stc_ID = Json_Util.get_Value(read_user, "Stc_ID"); user_obj.Stc_Pwd = Json_Util.get_Value(read_user, "Stc_Pwd"); user_obj.Mail_Address = Json_Util.get_Value(read_user, "Mail_Address"); user_obj.Join_Time = Json_Util.get_Value(read_user, "Join_Time"); user_obj.Join_Time2 = Json_Util.get_Value(read_user, "Join_Time2"); user_obj.Launch_Time = Json_Util.iso_8601_now(); //user_obj.Machine_Name = "Jupiter"; user_obj.Machine_Name = MainForm.machine_name; user_obj.Broker_Name = Json_Util.get_Value(read_user, "Broker_Name"); user_obj.MT4_Server = Json_Util.get_Value(read_user, "MT4_Server"); user_obj.MT4_ID = Json_Util.get_Value(read_user, "MT4_ID"); user_obj.MT4_Pwd = Json_Util.get_Value(read_user, "MT4_Pwd"); user_obj.EA_ID = Json_Util.get_Value(read_user, "EA_ID"); user_obj.EA_Name = Json_Util.get_Value(read_user, "EA_Name"); user_obj.Course = Json_Util.get_Value(read_user, "Course"); user_obj.Ccy = Json_Util.get_Value(read_user, "Ccy"); user_obj.Time_Period = Json_Util.get_Value(read_user, "Time_Period"); user_obj.Vol_1shot = Json_Util.get_Value(read_user, "Vol_1shot"); user_obj.A_Start = Json_Util.get_Value(read_user, "A_Start"); // A_Startが"A_Start"の場合はOn、offの場合はOFFで応答 if (Json_Util.get_Value(read_user, "A_Start") == "A_Start") { user_obj.EA_Status = "ON"; } else { user_obj.EA_Status = "OFF"; } user_obj.Init_Status = Json_Util.get_Value(read_user, "Check_Status"); // 4/26かずさんが追加していたので対応 user_obj.Stc_Name = Json_Util.get_Value(read_user, "Stc_Name"); // Ope_Tagでの追加タグ生成 dynamic req_obj_ope_tag = Ope_Tag_Creator(user_obj, read_user); if (req_obj_ope_tag != null) { user_obj = req_obj_ope_tag; } OK_user_list.Add(user_obj); } dynamic out_put = Json_Util.reParse(OK_user_list); status = true; error = "正常変換完了"; return(out_put); } catch (System.Exception ex) { status = true; error = ex.ToString(); logger.Error(ex.Message); return(null); } }
/// <summary> /// json受信時のチェック処理用基本動作クラスです /// </summary> /// <param name="json_text">処理対象となるjsonのテキストを受け取ります</param> /// <param name="status">全体処理結果をOUTします 全て正常の場合はtrue 1件でもエラーがある場合はfalse</param> /// <param name="error">1件でもエラーがある場合はエラー内容をOUTします</param> /// <returns>statusがエラーでも正常処理できたレコードをjsonレコードとして応答します。</returns> public override dynamic Json_accept(string json_text, out bool status, out string error) { try { if (json_text == "ABORT") { status = true; error = "読込完了"; return(null); } dynamic dyn_obj = DynamicJson.Parse(json_text); //Console.WriteLine(user); if (dyn_obj == null) { status = true; error = "読込完了"; return(null); } // ステータスとエラーと正常読み込み対象の初期化 status = false; error = null; // 処理済みjson用リスト ArrayList dyn_obj_list = new ArrayList(); int dyn_count = 0; //json内のレコード数取得 // 受信対象のチェック用ディクショナリー生成 Dictionary <object, int> dic = Create_dictionary(); foreach (dynamic item in (object[])dyn_obj) { //Console.WriteLine(item); // 共通チェック処理 string Json_Base_check_error = Base_check(item, dic); if (Json_Base_check_error != "") { error = error + "\r\n処理レコード:" + dyn_count + ":" + Json_Base_check_error; item.Check_Status = "NG"; } else { // 特別チェック処理 string Json_Special_check_error = Special_check(item, dic); if (Json_Special_check_error != "") { error = error + "\r\n処理レコード:" + dyn_count + ":" + Json_Special_check_error; item.Check_Status = "NG"; } else { item.Check_Status = "OK"; } } // チェックのステータスを保持したリストを格納 dyn_obj_list.Add(item); dyn_count++; } //Console.WriteLine(user.ToString()); dynamic return_json = null; // 正常読み込み対象があるか判定 if (dyn_obj_list.Count > 0) { return_json = Json_Util.reParse(dyn_obj_list); } if (error == "" || error == null) { status = true; error = "読込完了"; } return(return_json); } catch (System.Exception ex) { logger.Error(ex.Message); status = false; error = ex.Message; return(null); } }
/// <summary> /// requestで受信した内容の処理結果を応答するためのjsonを生成します。 生成時に必要項目を更新します /// Ope_Tagが増えた場合はOpe_Tag_Creatorに分岐を追加して、専用のファンクションを追加してください。 /// </summary> /// <param name="read_json_obj"></param> /// <param name="status"></param> /// <param name="error"></param> /// <returns></returns> public static dynamic Response_machine(dynamic read_json_obj, out bool status, out string error) { try { ArrayList OK_req_list = new ArrayList(); foreach (dynamic read_req in (object[])read_json_obj) { //定義変更時はRequest_machine_checkの項目も併せて修正しましょう! dynamic req_obj = new DynamicJson(); // ルートのコンテナ req_obj.Ope_Number = Json_Util.get_Value(read_req, "Ope_Number"); req_obj.Stc_ID = Json_Util.get_Value(read_req, "Stc_ID"); req_obj.Request_Time = Json_Util.get_Value(read_req, "Request_Time"); req_obj.Machine_Name = MainForm.machine_name; req_obj.Response_Time = Json_Util.iso_8601_now(); req_obj.EA_ID = Json_Util.get_Value(read_req, "EA_ID"); req_obj.Broker_Name = Json_Util.get_Value(read_req, "Broker_Name"); req_obj.MT4_Server = Json_Util.get_Value(read_req, "MT4_Server"); req_obj.MT4_ID = Json_Util.get_Value(read_req, "MT4_ID"); req_obj.Ccy = Json_Util.get_Value(read_req, "Ccy"); req_obj.Time_Period = Json_Util.get_Value(read_req, "Time_Period"); //req_obj.EA_Status = Json_Util.get_Value(read_req, "EA_Status").ToUpper(); req_obj.Ope_Code = Json_Util.get_Value(read_req, "Ope_Code"); // Vol_1shotを強制的にゼロにするEAであるかを判定します if (vol1_force_zero(Json_Util.get_Value(read_req, "EA_Name"))) { req_obj.Vol_1shot = "0"; } else { req_obj.Vol_1shot = Json_Util.get_Value(read_req, "Vol_1shot"); } req_obj.A_Start = Json_Util.get_Value(read_req, "A_Start"); if (read_req.Check_Status == "NG") { req_obj.EA_Status = "UNKNOWN"; } else { req_obj.EA_Status = Json_Util.get_Value(read_req, "EA_Status").ToUpper(); } // Ope_Tagでの追加タグ生成 dynamic req_obj_ope_tag = Ope_Tag_Creator(req_obj, read_req); if (req_obj_ope_tag != null) { req_obj = req_obj_ope_tag; } OK_req_list.Add(req_obj); } dynamic out_put = Json_Util.reParse(OK_req_list); status = true; error = "正常変換完了"; return(out_put); } catch (System.Exception ex) { status = true; error = ex.ToString(); logger.Error(ex.Message); return(null); } }