Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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
            }
        }