Beispiel #1
0
        private void PacketAnalysisLoop()
        {
            while (_keepAlive)
            {
                LoadFile();
                SaveLog();
                if (LoadOpcodeCheck != null)
                {
                    if (OpcodeFinder.Instance.OpcodePartialMatch())
                    {
                        MessageBox.Show("Partial match: SUCCESS");
                    }
                    else
                    {
                        MessageBox.Show("Partial match: FAIL");
                    }
                }

                // Update the UI at every packet if the backend it not overload & if we are recording the network
                if (AnalysisType == AnalysisTypeEnum.Network && TeraSniffer.Instance.Packets.Count < 2000)
                {
                    UpdateUi();
                }
                // If loading log file, wait until completion before display
                if (AnalysisType == AnalysisTypeEnum.LogFile && TeraSniffer.Instance.Packets.Count == 0)
                {
                    UpdateUi();
                }
                var successDequeue = TeraSniffer.Instance.Packets.TryDequeue(out var obj);
                if (!successDequeue)
                {
                    Thread.Sleep(1);
                    continue;
                }

                // Network
                if (AnalysisType == AnalysisTypeEnum.Unknown)
                {
                    AnalysisType = AnalysisTypeEnum.Network;
                }

                if (AnalysisType == AnalysisTypeEnum.LogFile && TeraSniffer.Instance.Connected)
                {
                    throw new Exception("Not allowed to record network while reading log file");
                }

                var message = MessageFactory.Create(obj);
                message.PrintRaw();

                if (message is C_CHECK_VERSION)
                {
                    Version = (message as C_CHECK_VERSION).Versions[0];
                    // TODO reset backend & UI
                }
                OpcodeFinder.Instance.Find(message);
            }
        }
Beispiel #2
0
 void LoadFile()
 {
     if (LoadFileName == null)
     {
         return;
     }
     if (AnalysisType == AnalysisTypeEnum.Network)
     {
         throw new Exception("Not allowed to load a log file while recording in the network");
     }
     AnalysisType = AnalysisTypeEnum.LogFile;
     OpcodeFinder.Instance.Reset();
     ResetUi?.Invoke();
     LogReader.LoadLogFromFile(LoadFileName).ForEach(x => TeraSniffer.Instance.Packets.Enqueue(x));
     LoadFileName = null;
 }
Beispiel #3
0
        /// <summary>
        /// 更新案場數值歷史資料與網頁
        /// </summary>
        /// <param name="receiveData"></param>
        private void Value_Log_Insert(ReceiveData receiveData)
        {
            using (var connection = new MySqlConnection(ConnStr))
            {
                try
                {
                    string search_ReceiveSetting = $"SELECT * FROM {DataDB}.ReceiveSetting WHERE CaseNo = @CaseNo AND ReceiveNo = @ReceiveNo";
                    var    RecevieSetting        = connection.QuerySingleOrDefault <RecevieSetting>(search_ReceiveSetting, new { CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo });
                    if (RecevieSetting != null)
                    {
                        string search_Aiconfig = $"SELECT * FROM {DataDB}.AiConfig WHERE DeviceTypeEnum = @DeviceTypeEnum";
                        var    Aiconfig        = connection.Query <AiConfig>(search_Aiconfig, new { DeviceTypeEnum = RecevieSetting.DeviceTypeEnum }).ToList();
                        if (Aiconfig.Count > 0)
                        {
                            List <decimal> Value = new List <decimal>();
                            for (int i = 0; i < Aiconfig.Count; i++)
                            {
                                AnalysisTypeEnum analysisTypeEnum = (AnalysisTypeEnum)Aiconfig[i].AnalysisMothed;
                                switch (analysisTypeEnum)
                                {
                                case AnalysisTypeEnum.None:
                                {
                                    var ai = Convert.ToDecimal(receiveData.Ai[Aiconfig[i].CharAddress]) * Convert.ToDecimal(Aiconfig[i].Ratio);
                                    Value.Add(ai);
                                }
                                break;

                                case AnalysisTypeEnum.LH:
                                {
                                    var ai = Convert.ToDecimal(receiveData.Ai[Aiconfig[i].CharAddress]) * 1 + Convert.ToDecimal(receiveData.Ai[Aiconfig[i].CharAddress + 1]) * 65536;
                                    Value.Add(ai);
                                    DeviceTypeEnum deviceTypeEnum = (DeviceTypeEnum)RecevieSetting.DeviceTypeEnum;
                                    switch (deviceTypeEnum)
                                    {
                                    case DeviceTypeEnum.RT80:
                                    {
                                        //if (Aiconfig[i].CharAddress == 34)//KWH
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 90)//總時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if(Aiconfig[i].CharAddress == 92)//1機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 96)//2機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        if (Aiconfig[i].ChartTypeEnum == 1)
                                        {
                                            string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                            connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        }
                                    }
                                    break;

                                    case DeviceTypeEnum.RT40_50_60:
                                    {
                                        //if (Aiconfig[i].CharAddress == 34)//KWH
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 38)//總時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 55)//1機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 75)//2機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 94)//3機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        //else if (Aiconfig[i].CharAddress == 114)//4機運轉時數
                                        //{
                                        //    string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                        //    connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        //}
                                        if (Aiconfig[i].ChartTypeEnum == 1)
                                        {
                                            string AIDailyStr = $"CALL {DataLog}.AiDailyProcedure(@ttime,@CaseNo,@ReceiveNo,@AINo,@nowAi)";
                                            connection.Execute(AIDailyStr, new { ttime = receiveData.ttime, CaseNo = receiveData.CaseNo, ReceiveNo = receiveData.RecNo, AINo = Aiconfig[i].AINo, nowAi = ai });
                                        }
                                    }
                                    break;
                                    }
                                }
                                break;

                                default:
                                    break;
                                }
                            }
                            if (Value.Count < 64)
                            {
                                for (int i = Value.Count; i < 64; i++)
                                {
                                    Value.Add(0);
                                }
                            }
                            AI64 aI64 = new AI64()
                            {
                                CaseNo    = receiveData.CaseNo,
                                ttime     = receiveData.ttime,
                                ReceiveNo = receiveData.RecNo,
                            };
                            int index = 0;
                            aI64.Ai1  = Value[index]; index++;
                            aI64.Ai2  = Value[index]; index++;
                            aI64.Ai3  = Value[index]; index++;
                            aI64.Ai4  = Value[index]; index++;
                            aI64.Ai5  = Value[index]; index++;
                            aI64.Ai6  = Value[index]; index++;
                            aI64.Ai7  = Value[index]; index++;
                            aI64.Ai8  = Value[index]; index++;
                            aI64.Ai9  = Value[index]; index++;
                            aI64.Ai10 = Value[index]; index++;
                            aI64.Ai12 = Value[index]; index++;
                            aI64.Ai13 = Value[index]; index++;
                            aI64.Ai14 = Value[index]; index++;
                            aI64.Ai15 = Value[index]; index++;
                            aI64.Ai16 = Value[index]; index++;
                            aI64.Ai17 = Value[index]; index++;
                            aI64.Ai18 = Value[index]; index++;
                            aI64.Ai19 = Value[index]; index++;
                            aI64.Ai20 = Value[index]; index++;
                            aI64.Ai22 = Value[index]; index++;
                            aI64.Ai23 = Value[index]; index++;
                            aI64.Ai24 = Value[index]; index++;
                            aI64.Ai25 = Value[index]; index++;
                            aI64.Ai26 = Value[index]; index++;
                            aI64.Ai27 = Value[index]; index++;
                            aI64.Ai28 = Value[index]; index++;
                            aI64.Ai29 = Value[index]; index++;
                            aI64.Ai30 = Value[index]; index++;
                            aI64.Ai32 = Value[index]; index++;
                            aI64.Ai33 = Value[index]; index++;
                            aI64.Ai34 = Value[index]; index++;
                            aI64.Ai35 = Value[index]; index++;
                            aI64.Ai36 = Value[index]; index++;
                            aI64.Ai37 = Value[index]; index++;
                            aI64.Ai38 = Value[index]; index++;
                            aI64.Ai39 = Value[index]; index++;
                            aI64.Ai40 = Value[index]; index++;
                            aI64.Ai42 = Value[index]; index++;
                            aI64.Ai43 = Value[index]; index++;
                            aI64.Ai44 = Value[index]; index++;
                            aI64.Ai45 = Value[index]; index++;
                            aI64.Ai46 = Value[index]; index++;
                            aI64.Ai47 = Value[index]; index++;
                            aI64.Ai48 = Value[index]; index++;
                            aI64.Ai49 = Value[index]; index++;
                            aI64.Ai50 = Value[index]; index++;
                            aI64.Ai52 = Value[index]; index++;
                            aI64.Ai53 = Value[index]; index++;
                            aI64.Ai54 = Value[index]; index++;
                            aI64.Ai55 = Value[index]; index++;
                            aI64.Ai56 = Value[index]; index++;
                            aI64.Ai57 = Value[index]; index++;
                            aI64.Ai58 = Value[index]; index++;
                            aI64.Ai59 = Value[index]; index++;
                            aI64.Ai60 = Value[index]; index++;
                            aI64.Ai62 = Value[index]; index++;
                            aI64.Ai63 = Value[index]; index++;
                            aI64.Ai64 = Value[index];
                            string InsertLogsql = $"CALL {DataLog}.Ai64LogProcedure(@CaseNo,@ttime,@ReceiveNo,@Ai1,@Ai2,@Ai3,@Ai4,@Ai5,@Ai6,@Ai7,@Ai8,@Ai9,@Ai10," +
                                                  $"@Ai11,@Ai12,@Ai13,@Ai14,@Ai15,@Ai16,@Ai17,@Ai18,@Ai19,@Ai20," +
                                                  $"@Ai21,@Ai22,@Ai23,@Ai24,@Ai25,@Ai26,@Ai27,@Ai28,@Ai29,@Ai30," +
                                                  $"@Ai31,@Ai32,@Ai33,@Ai34,@Ai35,@Ai36,@Ai37,@Ai38,@Ai39,@Ai40," +
                                                  $"@Ai41,@Ai42,@Ai43,@Ai44,@Ai45,@Ai46,@Ai47,@Ai48,@Ai49,@Ai50," +
                                                  $"@Ai51,@Ai52,@Ai53,@Ai54,@Ai55,@Ai56,@Ai57,@Ai58,@Ai59,@Ai60," +
                                                  $"@Ai61,@Ai62,@Ai63,@Ai64)";
                            string InsertWebsql = $"CALL {DataWeb}.Ai64WebProcedure(@CaseNo,@ttime,@ReceiveNo,@Ai1,@Ai2,@Ai3,@Ai4,@Ai5,@Ai6,@Ai7,@Ai8,@Ai9,@Ai10," +
                                                  $"@Ai11,@Ai12,@Ai13,@Ai14,@Ai15,@Ai16,@Ai17,@Ai18,@Ai19,@Ai20," +
                                                  $"@Ai21,@Ai22,@Ai23,@Ai24,@Ai25,@Ai26,@Ai27,@Ai28,@Ai29,@Ai30," +
                                                  $"@Ai31,@Ai32,@Ai33,@Ai34,@Ai35,@Ai36,@Ai37,@Ai38,@Ai39,@Ai40," +
                                                  $"@Ai41,@Ai42,@Ai43,@Ai44,@Ai45,@Ai46,@Ai47,@Ai48,@Ai49,@Ai50," +
                                                  $"@Ai51,@Ai52,@Ai53,@Ai54,@Ai55,@Ai56,@Ai57,@Ai58,@Ai59,@Ai60," +
                                                  $"@Ai61,@Ai62,@Ai63,@Ai64)";
                            int LogCounter = connection.Execute(InsertLogsql, aI64);
                            int WebCounter = connection.Execute(InsertWebsql, aI64);

                            if ((LogCounter / 3) > 0)
                            {
                                Value_Log_Insert_ErrorStr = (" Value_Log異動筆數共" + (LogCounter / 3).ToString() + "筆" + " Value_Web異動筆數共" + (WebCounter / 3).ToString() + "筆");
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Value_Log_Insert_ErrorStr = (ex.Message + "\r\n" + ex.ToString());       // 400 Bad Request
                }
            }
        }