Exemple #1
0
        //Speichert die XML in den Ordner des Servers
        //Überwacht zusätzlich den status der xml, ob diese Abgeschlossen sind oder nicht
        public void DateiSchreiben(XmlDocument xmlDocument)
        {
            if (xmlDocument != null)
            {
                _xml        = xmlDocument;
                _clientName = _xml.DocumentElement.Attributes[0].Value;

                if (File.Exists(_clientName + "_NC.xml"))
                {
                    if (CheckForRoot(_xml) != true)
                    {
                        Thread appendingThread = new Thread(() => AppendXml(_xml, 1));
                        appendingThread.Start();
                    }
                    else if (CheckForRoot(_xml))
                    {
                        if (File.Exists(_clientName + ".xml"))
                        {
                            Thread savinThread = new Thread(() => AppendXml(_xml, 2));
                            savinThread.Start();
                        }
                        else
                        {
                            Thread savinThread = new Thread(() => AppendXml(_xml, 3));
                            savinThread.Start();
                        }
                    }
                }
                else if (File.Exists(_clientName + "_NC.xml") == false)
                {
                    if (!CheckForRoot(_xml))
                    {
                        string dateiname            = _clientName + "_1NC.xml";
                        object thisThreadSyncObject = new object();
                        thisThreadSyncObject = _keyDict.GetOrAdd(dateiname, thisThreadSyncObject);
                        if (Monitor.TryEnter(thisThreadSyncObject))
                        {
                            try
                            {
                                Console.WriteLine("versuche:Speichere nicht fertige xml erstmalig");
                                Thread savinThread = new Thread(() => SaveXml(_xml, _clientName + "_NC.xml", 1));
                                savinThread.Start();
                            }
                            finally
                            {
                                Monitor.Exit(thisThreadSyncObject);
                            }
                        }
                        else
                        {
                            Thread.Sleep(30);
                            DateiSchreiben(xmlDocument);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Achtung das root element ist als erstes angekommen");
                        Thread savinThread = new Thread(() => SaveXml(_xml, _clientName + ".xml", 1));
                        savinThread.Start();
                    }
                }
            }
            else
            {
                Console.WriteLine("Fehler:XmlDocument entspricht null");
            }
        }