private void StartCoordinator() { MetadataHooks metadata = new MetadataHooks { OnMetadataMeasured = data => MetaGet?.Handle(data), OnMetadataPieceReceived = OnMetadataPieceReceived, OnMetadataRequestSent = OnMetadataRequestSent }; CoordinatorHooks hooks = new CoordinatorHooks { OnPeerConnected = OnPeerConnected, OnPeerDisconnected = OnPeerDisconnected, OnBitfieldChanged = OnPeerBitfieldChanged, OnStatusChanged = OnPeerStatusChanged, OnBlockReceived = data => DataGet?.Handle(data), OnMessageRequested = data => Sender?.Send(data.Peer, data.Message), OnKeepAliveRequested = data => Sender?.SendKeepAlive(data.Peer) }; Coordinator = new CoordinatorBuilder() .WithHash(Hash) .WithMemory(Memory) .WithPipeline(Pipeline) .WithPlugin(new MetadataPlugin(metadata)) .Build(hooks); Coordinator.Start(); }
internal static CoordinatorBuilder WithExchange(this CoordinatorBuilder builder, SwarmSettings settings, PeersHooks hooks) { if (settings.Metadata) { builder = builder.WithPlugin(new PeersPlugin(hooks)); } return(builder); }
internal static CoordinatorBuilder WithMetadata(this CoordinatorBuilder builder, SwarmSettings settings, MetadataHooks hooks) { if (settings.Metadata) { builder = builder.WithPlugin(new MetadataPlugin(hooks)); } return(builder); }
public CoordinatorSession Start() { CoordinatorService coordinator = new CoordinatorBuilder() .WithHash(FileHash.Random()) .WithPipeline(pipeline) .Build(); return(new CoordinatorSession(coordinator)); }
public MetashareSession Start() { Metainfo metainfo; byte[] bytes = Bytes.Random(20000); using (FileSandbox temp = new FileSandbox(new EmptyFileLocator())) { MetainfoBuilder builder = new MetainfoBuilder(temp.Directory); string path = temp.CreateFile("debian-8.5.0-amd64-CD-1.iso"); File.WriteAllBytes(path, bytes); builder.AddFile(path); metainfo = builder.ToMetainfo(out bytes); } FileSandbox sandbox = new FileSandbox(new EmptyFileLocator()); string destination = Path.Combine(sandbox.Directory, metainfo.Hash.ToString()); File.WriteAllBytes(destination + ".metainfo", bytes); CoordinatorService glue = new CoordinatorBuilder() .WithHash(metainfo.Hash) .WithMemory(new MemoryBuilder().Build()) .WithPlugin(new MetadataPlugin(new MetadataHooks())) .Build(); MetafileService metafile = new MetafileBuilder() .WithHash(metainfo.Hash) .WithDestination(destination + ".metainfo") .WithFiles(files) .WithPipeline(pipeline) .Build(); MetashareService service = new MetashareBuilder() .WithHash(metainfo.Hash) .WithPipeline(pipeline) .WithGlue(glue) .WithMetafile(metafile) .Build(); TaskCompletionSource <bool> onVerified = new TaskCompletionSource <bool>(); metafile.Hooks.OnMetafileVerified += _ => onVerified.SetResult(true); metafile.Start(); metafile.Verify(); onVerified.Task.Wait(5000); return(new MetashareSession(service)); }
public PeersSession Start() { PeersHooks hooks = new PeersHooks(); PeersPlugin plugin = new PeersPlugin(hooks); CoordinatorService coordinator = new CoordinatorBuilder() .WithHash(FileHash.Random()) .WithPipeline(pipeline) .WithPlugin(plugin) .Build(); return(new PeersSession(coordinator, plugin)); }
public MetadataSession Start() { MetadataHooks hooks = new MetadataHooks(); MetadataPlugin plugin = new MetadataPlugin(hooks); CoordinatorService coordinator = new CoordinatorBuilder() .WithHash(FileHash.Random()) .WithPipeline(pipeline) .WithPlugin(plugin) .Build(); return(new MetadataSession(coordinator, plugin)); }