Ejemplo n.º 1
0
        public void Should_sort_128_by_distance_from_end()
        {
            var a = new KNodeId128(ulong.MaxValue, ulong.MaxValue);
            var l = Enumerable.Range(0, 256).Select(i => KNodeId <KNodeId128> .Create()).ToArray();

            Array.Sort(l, new KNodeIdDistanceComparer <KNodeId128>(a));
            l.Should().BeInDescendingOrder(KNodeIdComparer <KNodeId128> .Default);
        }
Ejemplo n.º 2
0
        public void Should_sort_64_by_distance()
        {
            var a = new KNodeId64(ulong.MinValue);
            var l = Enumerable.Range(0, 256).Select(i => KNodeId <KNodeId64> .Create()).ToArray();

            Array.Sort(l, new KNodeIdDistanceComparer <KNodeId64>(a));
            l.Should().BeInAscendingOrder(KNodeIdComparer <KNodeId64> .Default);
        }
Ejemplo n.º 3
0
        public async Task <ActionResult> Get(string key, CancellationToken cancellationToken)
        {
            var h = KNodeId <KNodeId256> .Read(new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(key)));

            var v = await values.GetAsync(h, cancellationToken);

            return(v.HasValue ? (ActionResult)File(v.Value.Data, "application/octet-stream") : NotFound());
        }
Ejemplo n.º 4
0
        public async Task Set(string key, CancellationToken cancellationToken)
        {
            var h = KNodeId <KNodeId256> .Read(new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(key)));

            var v = await values.GetAsync(h, cancellationToken);

            await values.SetAsync(h, new KValueInfo(await Request.Body.ReadAllBytesAsync(), v.HasValue ? (v.Value.Version + 1) : 1, DateTime.UtcNow.AddMinutes(60)), cancellationToken);
        }
        public void Should_calculate_proper_distance_offset_for_int256()
        {
            var a = new KNodeId256(0, 0, 0, 0);
            var b = new KNodeId256(0, 0, 0, 1);
            var o = (Span <byte>) new byte[32];
            var s = (ReadOnlySpan <byte>)o;

            KNodeId.CalculateDistance(a, b, o);
            s.CountLeadingZeros().Should().Be(255);
        }
        public void Should_calculate_proper_distance_offset_for_int64()
        {
            var a = new KNodeId64(0);
            var b = new KNodeId64(1);
            var o = (Span <byte>) new byte[8];
            var s = (ReadOnlySpan <byte>)o;

            KNodeId.CalculateDistance(a, b, o);
            s.CountLeadingZeros().Should().Be(63);
        }
Ejemplo n.º 7
0
        protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            var fmt = new KProtobufMessageFormat <KNodeId256>();
            var slf = KNodeId <KNodeId256> .Create();

            var ink = new KInvokerPolicy <KNodeId256>(slf, logger: logger);
            var rtr = new KFixedTableRouter <KNodeId256>(slf, logger: logger);
            var kad = new KEngine <KNodeId256>(rtr, ink, lup, str, logger: logger);
            var lup = new KNodeLookup <KNodeId256>(kad, logger: logger);
            var str = new KInMemoryStore <KNodeId256>(rtr, ink, lup, TimeSpan.FromMinutes(1), logger: logger);
            var pub = new KInMemoryPublisher <KNodeId256>(ink, lup, str, logger: logger);
            var udp = new KUdpProtocol <KNodeId256>(2848441, kad, fmt, KIpEndpoint.Any, logger);
            var mcd = new KUdpMulticastDiscovery <KNodeId256>(2848441, kad, fmt, logger: logger);

            await udp.StartAsync(cancellationToken);

            await str.StartAsync(cancellationToken);

            await pub.StartAsync(cancellationToken);

            await mcd.StartAsync(cancellationToken);

            await kad.StartAsync(cancellationToken);

            while (cancellationToken.IsCancellationRequested == false)
            {
                await Task.Delay(TimeSpan.FromSeconds(1));
            }

            await kad.StopAsync();

            await mcd.StopAsync();

            await pub.StopAsync();

            await str.StopAsync();

            await udp.StopAsync();
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Generates a node ID for the given string.
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 KNodeId64 IKsKademliaHasher <string, KNodeId64> .Hash(string key) => KNodeId <KNodeId64> .Read(sha1.ComputeHash(Encoding.UTF8.GetBytes(key)));
Ejemplo n.º 9
0
 /// <summary>
 /// Generates a node ID for the given string.
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public KNodeId256 Hash(string key) => KNodeId <KNodeId256> .Read(sha256.ComputeHash(Encoding.UTF8.GetBytes(key)));
 public void Should_generate_random_nodeid_for_256()
 {
     var kid1 = KNodeId.Create <KNodeId256>();
 }
 public void Should_generate_random_nodeid_for_160()
 {
     var kid1 = KNodeId.Create <KNodeId160>();
 }
Ejemplo n.º 12
0
 static void RegisterKademlia(ContainerBuilder builder, ulong networkId)
 {
     builder.RegisterType <KJsonMessageFormat <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KProtobufMessageFormat <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KMessagePackMessageFormat <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KRefresher <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KConnector <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KInvoker <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KInvokerPolicy <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KRequestHandler <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KFixedTableRouter <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KLookup <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KValueAccessor <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KInMemoryStore <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KInMemoryPublisher <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KHost <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KUdpProtocol <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KUdpMulticastDiscovery <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KStaticDiscovery <KNodeId256> >().AsImplementedInterfaces().SingleInstance();
     builder.RegisterType <KHttpProtocol <KNodeId256> >().AsSelf().SingleInstance();
     builder.RegisterType <KHostedService>().AsImplementedInterfaces().SingleInstance();
     builder.Configure <KHostOptions <KNodeId256> >(o => { o.NetworkId = networkId; o.NodeId = KNodeId <KNodeId256> .Create(); });
     builder.Configure <KFixedTableRouterOptions>(o => { });
     builder.Configure <KStaticDiscoveryOptions>(o => { });
     builder.Configure <KHostOptions <KNodeId256> >("Alethic.Kademlia:Host");
     builder.Configure <KFixedTableRouterOptions>("Alethic.Kademlia:FixedTableRouter");
     builder.Configure <KUdpOptions>("Alethic.Kademlia:Udp");
     builder.Configure <KStaticDiscoveryOptions>("Alethic.Kademlia:StaticDiscovery");
 }