Esempio n. 1
0
        internal void UpdateFromIntermediate(Action <ICacheUpdater <TObject, TKey> > updateAction)
        {
            if (updateAction == null)
            {
                throw new ArgumentNullException(nameof(updateAction));
            }

            lock (_locker)
            {
                ChangeSet <TObject, TKey> changes = null;

                _editLevel++;
                if (_editLevel == 1)
                {
                    var previewHandler = _changesPreview.HasObservers ? (Action <ChangeSet <TObject, TKey> >)InvokePreview : null;
                    changes = _readerWriter.Write(updateAction, previewHandler, _changes.HasObservers);
                }
                else
                {
                    _readerWriter.WriteNested(updateAction);
                }

                _editLevel--;

                if (_editLevel == 0)
                {
                    InvokeNext(changes);
                }
            }
        }
Esempio n. 2
0
 internal void UpdateFromIntermediate(Action <ICacheUpdater <TObject, TKey> > updateAction)
 {
     if (updateAction == null)
     {
         throw new ArgumentNullException(nameof(updateAction));
     }
     lock (_writeLock)
     {
         InvokeNext(_readerWriter.Write(updateAction, _changes.HasObservers));
     }
 }
Esempio n. 3
0
        private static void MultiThreaded(string[] args)
        {
            MPI.Environment.Run(ref args, communicator =>
            {
                var sorter   = new MPIQuickSort(communicator);
                var isMaster = communicator.Rank == 0;

                if (isMaster)
                {
                    var inputFile  = args[0];
                    var outputFile = args[1];

                    var array = ReaderWriter.Read(inputFile);

                    IList <int> result = null;

                    using (var performanceCounter = new PerformanceCounter($"Execution time: "))
                    {
                        result = sorter.ParallelSort(array, 0, array.Count - 1);
                    }

                    ReaderWriter.Write(outputFile, result);

                    //Console.WriteLine($"Verify result: {Verify(result, inputFile)}");
                }
                else
                {
                    sorter.WorkerLoop();
                }
            });
        }
Esempio n. 4
0
        private int _editLevel; // The level of recursion in editing.

        public ObservableCache(IObservable <IChangeSet <TObject, TKey> > source)
        {
            _readerWriter = new ReaderWriter <TObject, TKey>();

            var loader = source.Synchronize(_locker)
                         .Finally(() =>
            {
                _changes.OnCompleted();
                _changesPreview.OnCompleted();
            })
                         .Subscribe(changeset =>
            {
                var previewHandler = _changesPreview.HasObservers ? (Action <ChangeSet <TObject, TKey> >)InvokePreview : null;
                var changes        = _readerWriter.Write(changeset, previewHandler, _changes.HasObservers);
                InvokeNext(changes);
            }, ex =>
            {
                _changesPreview.OnError(ex);
                _changes.OnError(ex);
            });

            _cleanUp = Disposable.Create(() =>
            {
                loader.Dispose();
                _changes.OnCompleted();
                _changesPreview.OnCompleted();
                if (_countChanged.IsValueCreated)
                {
                    _countChanged.Value.OnCompleted();
                }
            });
        }
Esempio n. 5
0
        private static void SingleThreaded(string[] args)
        {
            var inputFile  = args[0];
            var outputFile = args[1];

            var array = ReaderWriter.Read(inputFile);

            QuickSort.Sort(array, 0, array.Count - 1);

            ReaderWriter.Write(outputFile, array);
        }
Esempio n. 6
0
        /// <inheritdoc />
        public void Edit([NotNull] Action <IExtendedList <T> > updateAction)
        {
            if (updateAction == null)
            {
                throw new ArgumentNullException(nameof(updateAction));
            }

            lock (_writeLock)
            {
                InvokeNext(_readerWriter.Write(updateAction));
            }
        }
Esempio n. 7
0
 private void _ClientHandlerStage2(Stream Stream)
 {
     using (ReaderWriter rw = new ReaderWriter(Stream))
     {
         BooruUser user = _Booru.DefaultUser;
         while (_ThreadPool.IsRunning)
         {
             RequestCode requestCode = (RequestCode)rw.ReadUShort();
             if (requestCode != RequestCode.Disconnect)
             {
                 byte[] payload = rw.ReadBytes();
                 _Logger.LogLine("Client request: RQ = {0}, {1} bytes payload", Enum.GetName(typeof(RequestCode), requestCode), payload.Length);
                 using (var inputMs = new MemoryStream(payload))
                     using (var outputMs = new MemoryStream())
                     {
                         try
                         {
                             using (var rw2 = new ReaderWriter(inputMs, outputMs))
                                 _ClientHandlerStage3((RequestCode)requestCode, rw2, ref user);
                             rw.Write(true);
                             rw.Write(outputMs.ToArray(), true);
                         }
                         catch (Exception ex)
                         {
                             _Logger.LogException("ClientRequest", ex);
                             rw.Write(false);
                             rw.Write(ex.Message, true);
                         }
                         rw.Flush();
                     }
             }
             else
             {
                 _Logger.LogLine("Client disconnected gracefully");
                 break;
             }
         }
     }
 }
Esempio n. 8
0
        public ObservableCache(IObservable <IChangeSet <TObject, TKey> > source)
        {
            _readerWriter = new ReaderWriter <TObject, TKey>();

            var loader = source
                         .Synchronize(_locker)
                         .Select(changes => _readerWriter.Write(changes, _changes.HasObservers))
                         .Finally(_changes.OnCompleted)
                         .Subscribe(InvokeNext, _changes.OnError);

            _cleanUp = Disposable.Create(() =>
            {
                loader.Dispose();
                _changes.OnCompleted();
                if (_countChanged.IsValueCreated)
                {
                    _countChanged.Value.OnCompleted();
                }
            });
        }
Esempio n. 9
0
        /// <inheritdoc />
        public void Edit([NotNull] Action <IExtendedList <T> > updateAction)
        {
            if (updateAction == null)
            {
                throw new ArgumentNullException(nameof(updateAction));
            }

            lock (_writeLock)
            {
                IChangeSet <T> changes = null;

                _editLevel++;

                if (_editLevel == 1)
                {
                    if (_changesPreview.HasObservers)
                    {
                        changes = _readerWriter.WriteWithPreview(updateAction, InvokeNextPreview);
                    }
                    else
                    {
                        changes = _readerWriter.Write(updateAction);
                    }
                }
                else
                {
                    _readerWriter.WriteNested(updateAction);
                }

                _editLevel--;

                if (_editLevel == 0)
                {
                    InvokeNext(changes);
                }
            }
        }
Esempio n. 10
0
        private void _ClientHandlerStage3(RequestCode RQ, ReaderWriter RW, ref BooruUser User)
        {
            switch (RQ)
            {
            default: throw new NotSupportedException("Unknown request code");

            case RequestCode.Get_Post:
            {
                ulong id = RW.ReadULong();
                using (var post = _Booru.GetPost(User, id, false))
                    post.ToWriter(RW);
            } break;

            case RequestCode.Get_Thumb:
            {
                ulong id = RW.ReadULong();
                using (var thumb = _Booru.GetThumbnail(User, id))
                    thumb.ToWriter(RW);
            } break;

            case RequestCode.Get_Image:
            {
                ulong id = RW.ReadULong();
                using (var image = _Booru.GetImage(User, id))
                    image.ToWriter(RW);
            } break;

            case RequestCode.Get_Tag:
            {
                ulong id = RW.ReadULong();
                _Booru.GetTag(User, id).ToWriter(RW);
            } break;

            case RequestCode.Get_Info:
                _Booru.BooruInfo.ToWriter(RW);
                break;

            case RequestCode.Get_AllTags:
            {
                List <string> tags = _Booru.GetAllTags();
                RW.Write((uint)tags.Count);
                foreach (string tag in tags)
                {
                    RW.Write(tag, true);
                }
            } break;

            case RequestCode.Get_PostTags:
            {
                ulong id = RW.ReadULong();
                using (var post = _Booru.GetPost(User, id, false))
                    post.Tags.ToWriter(RW);
            } break;

            case RequestCode.Get_User:
                User.ToWriter(RW);
                break;

            case RequestCode.Get_PostCount:
                RW.Write(_Booru.GetPostCount());
                break;

            case RequestCode.Search_String:     //User limitations?
            {
                string       pattern = RW.ReadString();
                List <ulong> ids     = _Booru.Search(User, pattern);
                RW.Write((uint)ids.Count);
                foreach (ulong id in ids)
                {
                    RW.Write(id);
                }
            } break;

            case RequestCode.Search_Image:
                throw new NotImplementedException();     //TODO Implement

            case RequestCode.Login:
            {
                string username = RW.ReadString();
                string password = RW.ReadString();
                User = _Booru.Login(User, username, password);
            } break;

            case RequestCode.Logout:
                User = _Booru.DefaultUser;
                break;

            case RequestCode.Search_Tags:
            {
                string term  = RW.ReadString();
                byte   limit = RW.ReadByte();
                _Booru.SearchTags(term, limit).ToWriter(RW);
            } break;

            case RequestCode.Start_GC:
                if (!User.IsAdmin)
                {
                    throw new BooruException(BooruException.ErrorCodes.NoPermission);
                }
                else
                {
                    GC.Collect();
                }
                break;

            case RequestCode.Add_Post:
                using (var post = BooruPost.FromReader(RW))
                {
                    post.Tags  = BooruTagList.FromReader(RW);
                    post.Image = BooruImage.FromReader(RW);
                    ulong id = _Booru.AddPost(User, post);
                    RW.Write(id);
                    if (_MN != null)
                    {
                        using (var thumb = _Booru.GetThumbnail(null, id))
                            _MN.NotificatePostAdded(id, post, thumb);
                    }
                } break;

            case RequestCode.Edit_Post:
            {
                using (var post = BooruPost.FromReader(RW))
                {
                    post.Tags = BooruTagList.FromReader(RW);
                    _Booru.EditPost(User, post);
                }
            } break;

            case RequestCode.Edit_Image:
            {
                ulong id = RW.ReadULong();
                using (var image = BooruImage.FromReader(RW))
                    _Booru.EditImage(User, id, image);
            } break;

            case RequestCode.Delete_Post:
            {
                ulong id = RW.ReadULong();
                _Booru.DeletePost(User, id);
            } break;
            }
        }
Esempio n. 11
0
 public void Write(string cmd)
 {
     wr.Write(cmd);
 }
Esempio n. 12
0
 private IDisposable LoadFromSource(IObservable <IChangeSet <T> > source)
 {
     return(source
            .Subscribe(changes => _readerWriter.Write(changes)
                       .Then(InvokeNext, _changes.OnError), () => _changes.OnCompleted()));
 }
Esempio n. 13
0
        private static void MultiThreadedVol2(string[] args)
        {
            MPI.Environment.Run(ref args, communicator =>
            {
                //Initialize
                var inputFile  = args[0];
                var outputFile = args[1];

                var sorter    = new QSorter(communicator);
                var isManager = communicator.Rank == 0;

                int[] result = null;

                //Send array parts to workers
                if (isManager)
                {
                    var array   = ReaderWriter.Read(inputFile);
                    var qsArray = new QSArray(array);

                    sorter.InitializeWithData(qsArray);
                }
                else
                {
                    sorter.InitializeWithData(null);
                }

                //Parallel QSort
                using (var performanceCounter = new PerformanceCounter($"Execution time [{communicator.Rank}]: "))
                {
                    while (true)
                    {
                        if (sorter.LastInGroup)
                        {
                            sorter.Sort();
                            break;
                        }

                        sorter.PivotBroadcast();
                        sorter.PartitionAndPartsExchange();
                        sorter.GroupHalfToSubGroup();
                    }

                    sorter.SendWorkResult();

                    //Collect all parts together
                    if (isManager)
                    {
                        result = sorter.MergeDataFromWorkers();
                    }
                }

                //Write to output file
                if (isManager)
                {
                    var list = result.ToList();
                    ReaderWriter.Write(outputFile, list);

                    //Console.WriteLine($"Verified: {Verify(list, inputFile)}");
                }
            });
        }
Esempio n. 14
0
 void ISynchronizer.WriteDataToStorage()
 {
     readerWriter.Write(model.GetData());
 }