/// <summary> /// TODO: /// </summary> /// <param name="name"></param> /// <param name="stream"></param> /// <param name="cancel"></param> /// <returns></returns> public async Task EstablishProtocolAsync(string name, Stream stream, CancellationToken cancel = default(CancellationToken)) { var protocols = ProtocolRegistry.Protocols.Keys .Where(k => k == name || k.StartsWith(name)) .Select(k => VersionedName.Parse(k)) .OrderByDescending(vn => vn) .Select(vn => vn.ToString()); foreach (var protocol in protocols) { await Message.WriteAsync(protocol, stream, cancel); var result = await Message.ReadStringAsync(stream, cancel); if (result == protocol) { return; } } if (protocols.Count() == 0) { throw new Exception($"Protocol '{name}' is not registered."); } throw new Exception($"{RemotePeer.Id} does not support protocol '{name}'."); }
public void Stringing() { var vn = new VersionedName { Name = "x", Version = new Semver.SemVersion(0, 42) }; Assert.AreEqual("/x/0.42.0", vn.ToString()); }
public void Parsing() { var vn = VersionedName.Parse("/multistream/1.0.0"); Assert.AreEqual("multistream", vn.Name); Assert.AreEqual("1.0.0", vn.Version.ToString()); vn = VersionedName.Parse("/ipfs/id/1.0.0"); Assert.AreEqual("ipfs/id", vn.Name); Assert.AreEqual("1.0.0", vn.Version.ToString()); }
public void Ordering() { var names = new List <VersionedName> { VersionedName.Parse("/x/1.0.0"), VersionedName.Parse("/x/1.1.0"), VersionedName.Parse("/y/0.42.0"), }; var ordered = names.OrderByDescending(n => n).ToArray(); Assert.AreEqual("/y/0.42.0", ordered[0].ToString()); Assert.AreEqual("/x/1.1.0", ordered[1].ToString()); Assert.AreEqual("/x/1.0.0", ordered[2].ToString()); }
public void Comparing() { var a0 = VersionedName.Parse("/x/1.0.0"); var a1 = VersionedName.Parse("/x/1.0.0"); var b = VersionedName.Parse("/x/1.1.0"); var c = VersionedName.Parse("/y/0.42.0"); Assert.AreEqual(0, a0.CompareTo(a1)); Assert.AreEqual(0, a1.CompareTo(a0)); Assert.AreEqual(1, b.CompareTo(a0)); Assert.AreEqual(-1, a0.CompareTo(b)); Assert.AreEqual(1, c.CompareTo(b)); Assert.AreEqual(-1, b.CompareTo(c)); }
public void Value_Equality() { var a0 = VersionedName.Parse("/x/1.0.0"); var a1 = VersionedName.Parse("/x/1.0.0"); var b = VersionedName.Parse("/x/1.1.0"); VersionedName c = null; VersionedName d = null; Assert.IsTrue(c == d); Assert.IsFalse(c == b); Assert.IsFalse(b == c); Assert.IsFalse(c != d); Assert.IsTrue(c != b); Assert.IsTrue(b != c); #pragma warning disable 1718 Assert.IsTrue(a0 == a0); Assert.IsTrue(a0 == a1); Assert.IsFalse(a0 == b); #pragma warning disable 1718 Assert.IsFalse(a0 != a0); Assert.IsFalse(a0 != a1); Assert.IsTrue(a0 != b); Assert.IsTrue(a0.Equals(a0)); Assert.IsTrue(a0.Equals(a1)); Assert.IsFalse(a0.Equals(b)); Assert.AreEqual(a0, a0); Assert.AreEqual(a0, a1); Assert.AreNotEqual(a0, b); Assert.AreEqual(a0, a0); Assert.AreEqual(a0, a1); Assert.AreNotEqual(a0, b); Assert.AreEqual(a0.GetHashCode(), a0.GetHashCode()); Assert.AreEqual(a0.GetHashCode(), a1.GetHashCode()); Assert.AreNotEqual(a0.GetHashCode(), b.GetHashCode()); }