Ejemplo n.º 1
0
 public static JsonOperation GetInstance()
 {
     if (_JsonOperation == null)
     {
         _JsonOperation = new JsonOperation();
     }
     return(_JsonOperation);
 }
        public static void CreatePeriodicRequest(int d)
        {
            //workItem.Status == AsyncStatus.Canceled
            asyncRequest = ThreadPool.RunAsync(
                async(workItem) =>
            {
                while (true)
                {
                    //延迟时间
                    await Task.Delay(d);

                    Debug.WriteLine("进入正常工作线程");
                    double ctemp    = SlaveModel.GetInstance().CTemp;
                    double dtemp    = SlaveModel.GetInstance().DTemp;
                    string workMode = SlaveModel.GetInstance().WorkMode;
                    string speed    = SlaveModel.GetInstance().Speed;



                    if (workMode == "Cooling")
                    {
                        ctemp -= 1.0;
                        if (ctemp < dtemp)
                        {
                            ctemp = dtemp;
                        }
                    }
                    else
                    {
                        ctemp += 1.0;
                        if (ctemp > dtemp)
                        {
                            ctemp = dtemp;
                        }
                    }
                    string message = JsonOperation.GetInstance().PraseJson(2, "req", dtemp, ctemp, speed, workMode);
                    await TcpClient.GetInstance().SendToTcpServer(message);

                    //启动5秒定时器
                    CreateTimer(5000);
                    //等待Ack
                    string JsonString = await TcpClient.GetInstance().WaitTcpServer();
                    Debug.WriteLine(JsonOperation.GetInstance().DeserializeJson("ack", JsonString));
                    //如果收到的消息是ack
                    if (JsonOperation.GetInstance().DeserializeJson("ack", JsonString))
                    {
                        //取消定时器
                        DelayTimer.Cancel();

                        //停止自己变化线程
                        if (asyncSelfChange != null)
                        {
                            asyncSelfChange.Cancel();
                            Debug.WriteLine("停止自己变化");
                        }

                        //累加消费金额
                        SlaveModel.GetInstance().Cost += double.Parse(JsonOperation.GetInstance().DeserializeJson(JsonString));
                        //如果当前正在工作,就更新温度,否则就设置为开始工作
                        if (SlaveModel.GetInstance().IsWorking == true)
                        {
                            SlaveModel.GetInstance().CTemp = ctemp;
                            SlaveModel.GetInstance().DTemp = dtemp;
                        }
                        else
                        {
                            SlaveModel.GetInstance().IsWorking = true;
                        }
                    }
                }
            });
        }