Exemple #1
0
        private HashSet <PhotoModel> TryLoadQueue()
        {
            if (!QueueFile.Exists)
            {
                return(null);
            }
            lock (_queueFileLock)
            {
                using (var stream = QueueFile.OpenRead())
                {
                    Console.WriteLine("*** Loading Queue...");
                    var list      = stream.Load <HashSet <PhotoModel> >(null);
                    var knownSets = new Dictionary <string, PhotosetModel>();
                    foreach (var i in list)
                    {
                        switch (i.State)
                        {
                        case ProcessingStateType.Failed:
                            //TODO: check, if we should retry failed
                            //i.State = ProcessingStateType.Pending;
                            break;

                        case ProcessingStateType.Uploading:
                            //not sure if uploaded! restart
                            i.State = ProcessingStateType.Pending;
                            break;
                            //case ProcessingStateType.Pending:
                            //case ProcessingStateType.Duplicate:
                            //case ProcessingStateType.ReadyToUpload:
                            //case ProcessingStateType.Uploaded:
                            //case ProcessingStateType.Retry:
                            //case ProcessingStateType.Completed:
                            //default:
                            //	break;
                        }
                        var sets = i.Sets.ToArray();
                        foreach (var s in sets)
                        {
                            if (!knownSets.ContainsKey(s.Key))
                            {
                                knownSets.Add(s.Key, s);
                            }
                            else
                            {
                                i.Sets.Remove(s);
                                i.Sets.Add(knownSets[s.Key]);
                            }
                        }
                    }
                    Console.WriteLine($"*** Loaded {list.Count} items into Queue ***");
                    foreach (var g in list.GroupBy(i => i.State))
                    {
                        var spaces = 15 - g.Key.ToString().Length;
                        Console.WriteLine($"    {g.Key}:{new string(' ', spaces)}{g.Count()}");
                    }
                    stream.Close();
                    return(list);
                }
            }
        }
Exemple #2
0
 private void SaveQueue(HashSet <PhotoModel> list)
 {
     if (QueueFile == null)
     {
         return;
     }
     lock (_queueFileLock)
     {
         var tmpFile = new FileInfo(QueueFile.FullName + ".tmp");
         using (var stream = tmpFile.OpenWrite())
         {
             Console.WriteLine("*** Saving Queue...");
             list.ToXml(stream, Encoding.Default, null);
             _qLastSaved = DateTime.Now;
         }
         QueueFile.Refresh();
         if (QueueFile.Exists)
         {
             QueueFile.Delete();
         }
         tmpFile.MoveTo(QueueFile.FullName);
         QueueFile.Refresh();
         Console.WriteLine("*** Queue saved ***");
     }
 }
Exemple #3
0
        private void FileWrite(QueueFile queue_data)
        {
            FileStream _fs = null;

            try
            {
                if (System.IO.Directory.Exists(queue_data.Directory) == false)
                {
                    System.IO.Directory.CreateDirectory(queue_data.Directory);
                }

                var _path = Path.Combine(queue_data.Directory, queue_data.FileName);
                File.WriteAllBytes(_path, queue_data.Buffer);
            }
            catch (Exception ex)
            {
                OEventLog.SNG.WriteEntry(ex.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                if (_fs != null)
                {
                    _fs.Close();
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// 별도 thread에서 QueueFile을 이용해 file에 write 합니다.
        /// </summary>
        /// <param name="directory_name"></param>
        /// <param name="file_name"></param>
        /// <param name="out_buffer"></param>
        public void QueueWrite(string directory_name, string file_name, byte[] out_buffer)
        {
            lock (FileWriteQ.SyncRoot)
            {
                QueueFile _qdata = new QueueFile()
                {
                    Directory = directory_name,
                    FileName  = file_name,
                    Buffer    = out_buffer
                };

                FileWriteQ.Enqueue(_qdata);

                if (QueueThread == null || QueueThread.IsAlive == false)
                {
                    if (QueueThread != null)
                    {
                        QueueThread.Abort();
                    }

                    QueueThread = new Thread(Parser)
                    {
                        IsBackground = true
                    };

                    QueueThread.Start();
                }
            }
        }
Exemple #5
0
        private static async Task Main()
        {
            var queue = new QueueFile(@"C:\Temp\Queues", "Mine");
            await queue.Open();

            await queue.Enqueue(new MyMessage("go go 2"));


            var tasks = new[]
            {
                Application1(),
                Application2()
            };
            await Task.WhenAll(tasks);


            //var message = await queue.Dequeue();

            Console.WriteLine("Hello World!");
        }
Exemple #6
0
        //-----------------------------------------------------------------------------------------------------------------------------
        //
        //-----------------------------------------------------------------------------------------------------------------------------
        private void Parser()
        {
            while (true)
            {
                lock (FileWriteQ.SyncRoot)
                {
                    if (FileWriteQ.Count > 0)
                    {
                        object _dequeue = FileWriteQ.Dequeue();
                        if (_dequeue != null)
                        {
                            QueueFile _qdata = (QueueFile)_dequeue;
                            this.FileWrite(_qdata);
                        }
                    }
                    else
                    {
                        Thread.Sleep(1000);
                    }
                }

                Thread.Sleep(100);
            }
        }
Exemple #7
0
 public QueueFileTests()
 {
     _directory = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
     Directory.CreateDirectory(_directory);
     _sut = new QueueFile(_directory, "Test");
 }