/// <summary> /// 上报短信取号结果到远程 /// </summary> /// <param name="imsi">本地SIM卡IMSI号</param> /// <param name="phoneNumber">本机号码</param> private void PostIMSIPhoneNumberToRemote(string imsi, string phoneNumber) { #region 代码分离前 //var request = (HttpWebRequest)WebRequest.Create(Report_IMSI_PhoneNumber_Handler_Url); //request.ContentType = "application/x-www-form-urlencoded"; //request.Method = "POST"; //string body = string.Format("IMSI={0}&PhoneNumber={1}", imsi, phoneNumber); //byte[] btBodys = Encoding.UTF8.GetBytes(body); //request.ContentLength = btBodys.Length; //using (var stream = request.GetRequestStream()) //{ // stream.Write(btBodys, 0, btBodys.Length); // stream.Close(); //} //request.GetRequestStreamAsync(); #endregion HttpRequestHelper.RequestData data = new HttpRequestHelper.RequestData(); data.Method = HttpRequestHelper.RequestMethod.POST; data.URL = Report_IMSI_PhoneNumber_Handler_Url; data.ContentType = "application/x-www-form-urlencoded"; data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.IMSI, imsi); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.PhoneNumber, phoneNumber); HttpRequestHelper.GetHelper().AddRequestDataForThread(data); }
private void Btn_Click(object sender, EventArgs e) { if (ds.Count > 0) { flag = false; ThreadPool.QueueUserWorkItem(new WaitCallback((obj) => { for (int index = 0; index < ds.Count; index++) { var device = ds[index]; HttpRequestHelper.RequestData data = new HttpRequestHelper.RequestData(); data.Method = HttpRequestHelper.RequestMethod.PUT; data.URL = ""; data.ContentType = "application/x-www-form-urlencoded"; data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.IMSI, device.IMSI); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.CCID, device.CCID); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.PhoneNumber, device.PhoneNumber); HttpRequestHelper.GetHelper().AddRequestDataForThread(data); waitCount--; successCount++; ChangeLabelCount(); Thread.Sleep(50); } flag = true; }), null); } }
private void PostIMSIPhoneNumberToRemote(Device device) { HttpRequestHelper.RequestData data = new HttpRequestHelper.RequestData(); data.Method = HttpRequestHelper.RequestMethod.POST; data.URL = Report_IMSI_PhoneNumber_Handler_Url; data.ContentType = "application/x-www-form-urlencoded"; data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.IMSI, device.IMSI); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.CCID, device.CCID); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.PhoneNumber, device.PhoneNumber); HttpRequestHelper.GetHelper().AddRequestDataForThread(data); }
/// <summary> /// 还应简化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tBtnTestCall_Click(object sender, EventArgs e) { WorkModelLabel.Text = "模式:模式取号"; if (null != CallNumbers && CallNumbers.Count > 0) { #region ---------------多线程方式拨号取号(参考)------------------- //方法里面是最初设计思路,有可借鉴之处请咨询查看 //多线程存在问题:在程序退出后,线程可能还在执行。 //var actions = new Action[ReadyDevices.Count]; //for (int i = 0; i < ReadyDevices.Count; i++) //{ // var j = i; // actions[i] = () => // { // CallNumber callNumber = null; // //int count = 0;//重试次数 // #region---------------查找可用待拨号码------------------- // while (true) // { // lock (readyDevicesObj) // { // foreach (var c in CallNumbers) // { // if (c.State == 0) // { // callNumber = c; // c.State = 1; // break; // } // } // } // if (null == callNumber) // { // Thread.Sleep(100); // } // else // { // break; // } // } // #endregion // #region-----------在远程服务器中记录本机IMSI和待拨号码信息------------ // //进行web请求上传,先发布请求然后实际拨号 // //如果设备拨号不成功,那么请求发送的时间将不会被服务器更改 // while (true) // { // var request = (HttpWebRequest)WebRequest.Create( // string.Format("http://192.168.1.200/ComHandler.ashx?imsi={0}&phone={1}", // ReadyDevices[j].IMSI, callNumber.PhoneNumber) // ); // request.Method = "get"; // var response = (HttpWebResponse)request.GetResponse(); // StreamReader reader = new StreamReader(response.GetResponseStream()); // var str = reader.ReadToEnd(); // if (str == "0") // { // Thread.Sleep(2000); // continue; // } // else // { // break; // } // } // #endregion // //count = 0; // ReadyDevices[j].Prot.DataReceived -= DataReceived; // #region-----------在拨号错误的情况下,循环3次测试拨号操作(废弃)------------ // //while (true) // //{ // // //实际拨号操作 // // string cmd = string.Format("ATD{0};", callNumber.PhoneNumber); // // ReadyDevices[j].Prot.DiscardInBuffer(); // // ReadyDevices[j].Prot.WriteLine(cmd); // // Thread.Sleep(500); // // string str = ReadyDevices[j].Prot.ReadExisting(); // // if (str.Contains("ERROR")) // // { // // count++; // // if (count < 3) // // continue; // // else // // { // // callNumber.State = 0; // // return; // // } // // } // // else // // { // // break; // // } // //} // #endregion // #region-----------在拨号错误的情况下,中断后续操作即提前结束该线程------------ // string cmd = string.Format("ATD{0};", callNumber.PhoneNumber); // ReadyDevices[j].Prot.DiscardInBuffer(); // ReadyDevices[j].Prot.WriteLine(cmd); // Thread.Sleep(500); // var strs = ReadyDevices[j].Prot.ReadExisting(); // if (strs.Contains("ERROR")) // { // callNumber.State = 0; // return; // } // Thread.Sleep(2000); // ReadyDevices[j].Prot.WriteLine("AT+CHUP"); // callNumber.State = 0; // ReadyDevices[j].Prot.DataReceived += DataReceived; // #endregion // #region-----------获取远程服务器上该ISMI对应的手机号码------------ // //获取远程号码 // var request2 = (HttpWebRequest)WebRequest.Create( // string.Format("http://192.168.1.200/GetNumberHandler.ashx?imsi={0}", // ReadyDevices[j].IMSI) // ); // request2.Method = "get"; // var response2 = (HttpWebResponse)request2.GetResponse(); // var reader2 = new StreamReader(response2.GetResponseStream()); // var s = reader2.ReadLine(); // //运行到这里出错可能性较小,所以可以不用判断 // //var flog = string.IsNullOrEmpty(str); // //if(flog) // //{ // // ChangeComListView(ReadyDevices[j].Index, 4, "获取失败"); // //} // //else // //{ // // ChangeComListView(ReadyDevices[j].Index, 4, s); // //} // ChangeComListView(ReadyDevices[j].Index, 4, s); // #endregion // }; //} //启动上面创建的多线程 //for (int i = 0; i < actions.Length; i++) //{ // Thread thread = new Thread(new ThreadStart(actions[i])); // thread.Start(); //} #endregion #region ---------------线程池方式拨号取号(简化版)(还应再次简化为A线程池线程负责上报,B线程池1个线程负责取号。)------------------- for (int i = 0; i < ReadyDevices.Count; i++) { if (!string.IsNullOrEmpty(ReadyDevices[i].PhoneNumber)) { continue;//跳过已经取号成功的串口设备 } ThreadPool.QueueUserWorkItem(new WaitCallback((obj) => { int j = (int)obj; CallNumber callNumber = null;//线程待拨号码 #region ---------------查找可用待拨号码------------------- while (true) { lock (readyDevicesObj) { foreach (var c in CallNumbers) { if (c.State == 0) { callNumber = c; c.State = 1; break; } } } if (null == callNumber) { Thread.Sleep(100); } else { break; } } #endregion #region -----------在远程服务器中记录本机IMSI和待拨号码信息------------ //while (true) //{ // var request = (HttpWebRequest)WebRequest.Create( // string.Format("{0}?imsi={1}&phone={2}", IMSI_CallNumber_Handler_Url, // ReadyDevices[j].IMSI, callNumber.PhoneNumber) // ); // request.Method = "get"; // var response = (HttpWebResponse)request.GetResponse(); // StreamReader reader = new StreamReader(response.GetResponseStream()); // var str = reader.ReadToEnd(); // if (str == "0") // { // Thread.Sleep(2000); // continue; // } // else // { // break; // } //} #endregion #region -----------在远程服务器中记录本机IMSI和待拨号码信息------------ HttpRequestHelper.RequestData data = new HttpRequestHelper.RequestData(); data.Method = HttpRequestHelper.RequestMethod.GET; data.URL = IMSI_CallNumber_Handler_Url; data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.IMSI, ReadyDevices[j].IMSI); data.AddKeyValue(HttpRequestHelper.RequestData.RequestDataKey.Phone, callNumber.PhoneNumber); HttpRequestHelper.GetHelper().AddRequestDataForThread(data); #endregion #region -----------在拨号错误的情况下,中断后续操作即提前结束该线程------------ string cmd = string.Format("ATD{0};", callNumber.PhoneNumber); ReadyDevices[j].DiscardInBuffer(); var strs = ReadyDevices[j].ExecuteCommand(cmd); WriteLog(string.Format("{0}-{1}", ReadyDevices[j].IMSI, strs)); if (strs.Contains("ERROR")) { callNumber.State = 0; return; } Thread.Sleep(10000); ReadyDevices[j].ExecuteCommand("AT+CHUP"); Thread.Sleep(2000); #endregion #region -----------获取远程服务器上该ISMI对应的手机号码------------ var request2 = (HttpWebRequest)WebRequest.Create( string.Format("{0}/{1}", Get_PhoneNumber_Handler_Url, ReadyDevices[j].IMSI) ); request2.Method = "get"; var response2 = (HttpWebResponse)request2.GetResponse(); var reader2 = new StreamReader(response2.GetResponseStream()); var s = reader2.ReadLine(); ReadyDevices[j].PhoneNumber = s; ChangeComListView(ReadyDevices[j].PortName, (int)ListViewSetting.ColumnIndex.本机号码, s); callNumber.State = 0; #endregion }), i); } #endregion } }