Beispiel #1
0
        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();
        }
Beispiel #2
0
        internal static CoordinatorBuilder WithExchange(this CoordinatorBuilder builder, SwarmSettings settings, PeersHooks hooks)
        {
            if (settings.Metadata)
            {
                builder = builder.WithPlugin(new PeersPlugin(hooks));
            }

            return(builder);
        }
Beispiel #3
0
        internal static CoordinatorBuilder WithMetadata(this CoordinatorBuilder builder, SwarmSettings settings, MetadataHooks hooks)
        {
            if (settings.Metadata)
            {
                builder = builder.WithPlugin(new MetadataPlugin(hooks));
            }

            return(builder);
        }
Beispiel #4
0
        public CoordinatorSession Start()
        {
            CoordinatorService coordinator =
                new CoordinatorBuilder()
                .WithHash(FileHash.Random())
                .WithPipeline(pipeline)
                .Build();

            return(new CoordinatorSession(coordinator));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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));
        }