IBE.EDDN.EDDNCommunicator.RecievedEDDNData C# (CSharp) Méthode

RecievedEDDNData() private méthode

processing of the recieved data
private RecievedEDDNData ( object sender, EDDN e ) : void
sender object
e EDDN
Résultat void
        private void RecievedEDDNData(object sender, EDDN.EDDNRecievedArgs e)
        {
            String[] DataRows = new String[0];
            String nameAndVersion = String.Empty;
            String name = String.Empty;
            String uploaderID = String.Empty;
            Boolean SimpleEDDNCheck = false;
            List<String> importData = new List<String>();
            enSchema ownSchema;
            enSchema dataSchema;
            bool isTrusty = false;

            try
            {

                if (m_lDBCon.getIniValue<Boolean>("EDDN", "SpoolEDDNToFile", false.ToString(), false))
                {
                    if (m_EDDNSpooler == null)
                    {
                        if (!File.Exists(Program.GetDataPath(@"Logs\EddnOutput.txt")))
                            m_EDDNSpooler = File.CreateText(Program.GetDataPath(@"Logs\EddnOutput.txt"));
                        else
                            m_EDDNSpooler = File.AppendText(Program.GetDataPath(@"Logs\EddnOutput.txt"));
                    }
                    m_EDDNSpooler.WriteLine(e.RawData);
                }

                ownSchema = m_lDBCon.getIniValue<enSchema>(IBE.EDDN.EDDNView.DB_GROUPNAME, "Schema", "Real", false);

                switch (e.InfoType)
                {

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v1_Recieved:

                        UpdateStatisticDataMsg(enMessageTypes.Commodity_V1);
                        //Debug.Print("recieved commodity message ignored");
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));

                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v2_Recieved:

                        UpdateStatisticDataMsg(enMessageTypes.Commodity_V2);
                        //Debug.Print("recieved commodity message ignored");
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));

                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v3_Recieved:

                        JObject dataJObject = (JObject)e.Data;

                        if(m_DuplicateRelayFilter.DataAccepted(dataJObject.SelectToken("header.uploaderID").ToString(), dataJObject.SelectToken("message.systemName") + "|" + dataJObject.SelectToken("message.stationName"), 
                                              dataJObject.SelectToken("message.commodities").Count().ToString(), (DateTime)dataJObject.SelectToken("message.timestamp")))
                        { 
                            UpdateStatisticDataMsg(enMessageTypes.Commodity_V3);
                            UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));

                            // process only if it's the correct schema
                            dataSchema = dataJObject.SelectToken("$schemaRef").Contains("/test") ? enSchema.Test : enSchema.Real;

                            if (ownSchema == dataSchema)
                            {
                                //Debug.Print("handle v3 message");

                                // Don't import our own uploads...
                                if (dataJObject.SelectToken("header.uploaderID").ToString() != UserIdentification())
                                {
                                    DataRows = ConvertCommodityV3_To_CSVRows(dataJObject);
                                    nameAndVersion = String.Format("{0} / {1}", dataJObject.SelectToken("header.softwareName"), dataJObject.SelectToken("header.softwareVersion"));
                                    name = String.Format("{0}", dataJObject.SelectToken("header.softwareName"));
                                    uploaderID = dataJObject.SelectToken("header.uploaderID").ToString();

                                    if(name == "ED-IBE (API)")
                                        Debug.Print("handle v3 ^recieved : " + name);
                                }
                                //else
                                    //Debug.Print("handle v3 rejected (it's our own message)");
                            }
                            //else
                                //Debug.Print("handle v3 rejected (wrong schema)");
                        }
                        //else
                            //Debug.Print("handle v3 rejected (double recieved)");

                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Outfitting_v1_Recieved:
                        UpdateStatisticDataMsg(enMessageTypes.Outfitting_V1);
                        //UpdateRawData("recieved outfitting message ignored (coming feature)");
                        //Debug.Print("recieved outfitting message ignored");
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));
                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Outfitting_v2_Recieved:
                        UpdateStatisticDataMsg(enMessageTypes.Outfitting_V2);
                        //UpdateRawData("recieved outfitting message ignored (coming feature)");
                        //Debug.Print("recieved outfitting message ignored");
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));
                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Shipyard_v1_Recieved:
                        UpdateStatisticDataMsg(enMessageTypes.Shipyard_V1);
                        //UpdateRawData("recieved shipyard message ignored (coming feature)");
                        //Debug.Print("recieved shipyard message ignored");
                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.Shipyard_v2_Recieved:
                        UpdateStatisticDataMsg(enMessageTypes.Shipyard_V2);
                        //UpdateRawData("recieved shipyard message ignored (coming feature)");
                        //Debug.Print("recieved shipyard message ignored");
                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.UnknownData:
                        UpdateStatisticDataMsg(enMessageTypes.unknown);
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));
                        UpdateRawData("Recieved a unknown EDDN message:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData);
                        //Debug.Print("handle unkown message");
                        break;

                    case EDDN.EDDNRecievedArgs.enMessageInfo.ParseError:
                        UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress));
                        Debug.Print("handle error message");
                        UpdateRawData("Error while processing recieved EDDN data:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData);

                        break;

                }

                if (DataRows != null && DataRows.GetUpperBound(0) >= 0)
                {
                    isTrusty = (Program.Data.BaseData.tbtrustedsenders.Rows.Find(name) != null);

                    UpdateStatisticData(DataRows.GetUpperBound(0) + 1, nameAndVersion, e.Adress, uploaderID);

                    foreach (String DataRow in DataRows)
                    {
                        if(m_DuplicateFilter.DataAccepted(DataRow))
                        {
                            

                            // data is plausible ?
                            if (isTrusty || (!Program.PlausibiltyCheck.CheckPricePlausibility(new string[] { DataRow }, SimpleEDDNCheck)))
                            {

                                // import is wanted ?
                                if (m_lDBCon.getIniValue<Boolean>("EDDN", "ImportEDDN", false.ToString(), false))
                                {
                                    // collect importable data
                                    Debug.Print("import :" + DataRow);
                                    importData.Add(DataRow);
                                }

                            }
                            else
                            {
                                Debug.Print("implausible :" + DataRow);
                                // data is implausible
                                string InfoString = string.Format("IMPLAUSIBLE DATA : \"{2}\" from {0}/ID=[{1}]", nameAndVersion, uploaderID, DataRow);

                                UpdateRejectedData(InfoString);

                                if (m_lDBCon.getIniValue<Boolean>("EDDN", "SpoolImplausibleToFile", false.ToString(), false))
                                {

                                    FileStream LogFileStream = null;
                                    string FileName = Program.GetDataPath(@"Logs\EddnImplausibleOutput.txt");

                                    if (File.Exists(FileName))
                                        LogFileStream = File.Open(FileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                                    else
                                        LogFileStream = File.Create(FileName);

                                    LogFileStream.Write(System.Text.Encoding.Default.GetBytes(InfoString + "\n"), 0, System.Text.Encoding.Default.GetByteCount(InfoString + "\n"));
                                    LogFileStream.Close();
                                }
                            }
                        }
                    }

                    // have we collected importable data -> then import now
                    if (importData.Count() > 0)
                    {
                        Program.Data.ImportPricesFromCSVStrings(importData.ToArray(), SQL.EliteDBIO.enImportBehaviour.OnlyNewer, (isTrusty ? SQL.EliteDBIO.enDataSource.fromEDDN_T : SQL.EliteDBIO.enDataSource.fromEDDN));
                        DataChangedEvent.Raise(this, new DataChangedEventArgs(enDataTypes.DataImported));
                    }

                }
            }
            catch (Exception ex)
            {
                UpdateRawData("Error while processing recieved EDDN data:" + Environment.NewLine + ex.GetBaseException().Message + Environment.NewLine + ex.StackTrace);
            }
        }