Example #1
0
    public IDisposable Listen(AppMessageObserver Observer, string messageTypeName)
    {
        var mtn        = messageTypeName ?? nameof(IAppMessage);
        var subscriber = new Subscriber(mtn, Observer, Unsubscribe);

        subscribers.GetOrAdd(mtn, t => new ConcurrentBag <Subscriber>())
        .Add(subscriber);
        return(subscriber);
    }
Example #2
0
 public TransientMessageBroker(AppMessageObserver sentinel)
 {
     this.Sentinel = sentinel;
 }
Example #3
0
 public Subscriber(string messageTypeName, AppMessageObserver Observer, Action <string, Subscriber> quit)
 {
     this.messageTypeName = messageTypeName;
     this.Observer        = Observer;
     this.quit            = quit;
 }
Example #4
0
        public Option <Link <FolderPath, FilePath> > CreateArchive(FolderPath SrcDir, FilePath DstPath,
                                                                   bool Overwrite = true, AppMessageObserver Observer = null)
        {
            try
            {
                DstPath.Folder.CreateIfMissing();

                var dstPath = Overwrite
                    ? DstPath.DeleteIfExists().Require()
                    : (DstPath.Exists() ? DstPath.UniqueName() : DstPath);

                using (var stream = new FileStream(DstPath, FileMode.OpenOrCreate))
                {
                    using (var archive = new ZipArchive(stream, ZipArchiveMode.Create))
                    {
                        foreach (var srcFile in SrcDir.Files("*.*", true))
                        {
                            Observer?.Invoke(AddingFileToArchive(srcFile, dstPath));
                            var entry = CreateEntry(SrcDir, srcFile, archive);
                            using (var writer = new StreamWriter(entry.Open()))
                                using (var reader = new StreamReader(srcFile))
                                    reader.BaseStream.CopyTo(writer.BaseStream);
                        }
                    }
                }
                return(link(SrcDir, dstPath));
            }
            catch (Exception e)
            {
                return(none <Link <FolderPath, FilePath> >(e));
            }
        }
Example #5
0
 public IDisposable Listen(AppMessageObserver Observer, string messageTypeName)
 => Broker().Listen(ConditionalRelay, messageTypeName);
Example #6
0
 public IDisposable Listen(AppMessageObserver Observer, string messageTypeName)
 => this;