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); }
public TransientMessageBroker(AppMessageObserver sentinel) { this.Sentinel = sentinel; }
public Subscriber(string messageTypeName, AppMessageObserver Observer, Action <string, Subscriber> quit) { this.messageTypeName = messageTypeName; this.Observer = Observer; this.quit = quit; }
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)); } }
public IDisposable Listen(AppMessageObserver Observer, string messageTypeName) => Broker().Listen(ConditionalRelay, messageTypeName);
public IDisposable Listen(AppMessageObserver Observer, string messageTypeName) => this;