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> /// 監視用タイマーのタイマーイベントです。 /// キューイングされている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); } } } } }
/// <summary> /// requestのOpe_Codeによって処理の振り分けを行います。 /// </summary> /// <param name="request">rquest.jsonです</param> /// <param name="status">処理結果を応答します。</param> /// <param name="error">エラー内容を応答します。</param> /// <returns></returns> public static dynamic operation(dynamic request, out bool status, out string error) { string ope_code = ""; string req_errors = ""; status = false; string res_request = ""; foreach (dynamic read_req in (object[])request) { ope_code = Json_Util.get_Value(read_req, "Ope_Code"); Console.WriteLine("指示コード:" + ope_code); if (ope_code == "") { error = "パラメータエラー: ope_codeが存在していません。後続処理を中断します。"; status = false; return(null); } string req_error = ""; // 自分のマシン名と一致するか確認 if (Json_Util.get_Value(read_req, "Machine_Name") == MainForm.machine_name) { switch (ope_code) { case "start": // MT4起動&自動売買開始 start_mode(read_req, out status, out req_error, true); req_errors = req_errors + req_error; break; case "stop": // MT4停止&自動売買停止 stop_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; break; case "reload": // MT4再起動 status = program_watch(read_req, out req_error); req_errors = req_errors + req_error; if (status) { // (OFF→ON→OFF)で浦島様の指定 // 停止処理 stop_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; // 開始処理 start_mode(read_req, out status, out req_error, false); req_errors = req_errors + req_error; } else { // (ON→OFF→ON)で浦島様の指定 // 開始処理 start_mode(read_req, out status, out req_error, false); req_errors = req_errors + req_error; // 停止処理 stop_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; } break; case "status": // STCログイン時のMT4起動状態応答用 get_status(read_req, out status, out req_error); req_errors = req_errors + req_error; break; case "outage": // 退会処理(未テストなのでKaz様と打ち合わせてテストしましょう) uninst_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; break; case "mod_ea": // EAの設定変更 //Ope_tag部分の出力機能を追加する予定です! mod_ea_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; break; case "mod_brok": // ブローカーの設定変更 break; case "watch_s": // 起動状態の監視 watch_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; break; case "watch_r": // 再起動状態の監視 watch_mode(read_req, out status, out req_error); req_errors = req_errors + req_error; break; default: req_errors = req_errors + "パラメータエラー:" + ope_code; status = false; break; } // 対象の指示のみを再結合させます if (res_request != "") { res_request = res_request + ","; } res_request = res_request + read_req; } } dynamic dyn_obj; if (res_request != "") { dyn_obj = DynamicJson.Parse("[" + res_request + "]"); } else { dyn_obj = null; } error = req_errors; status = true; return(dyn_obj); }
/// <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> /// 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); } }