public void EncodeDecodeDiscoveryResponse() { var response = new DiscoveryResponse("tcpex://some:123/SomeService", "1.0"); var encoded = DiscoveryMetadataHelper.Encode(response); var decoded = DiscoveryMetadataHelper.Decode(encoded); Assert.IsNotNull(decoded); Assert.AreEqual(response, decoded); }
public void EncodeDecodeDiscoveryRequest() { var request = new DiscoveryRequest("SomeService"); var encoded = DiscoveryMetadataHelper.Encode(request); var decoded = DiscoveryMetadataHelper.Decode(encoded); Assert.IsNotNull(decoded); Assert.AreEqual(request, decoded); }
public void EscapeUnescapeAnotherTest() { var source = @"\|\\d|a|\\s\s\\p|@@\fd|\pp||\\\p\p"; var escaped = DiscoveryMetadataHelper.Escape(source); Assert.AreNotEqual(source, escaped); var unescaped = DiscoveryMetadataHelper.Unescape(escaped); Assert.AreEqual(source, unescaped); }
public void EscapeUnescapeTests() { var source = @"Something\ wonderful| is h@ppening"; var escaped = DiscoveryMetadataHelper.Escape(source); Assert.AreEqual(@"Something\s wonderful\p is h\appening", escaped); var unescaped = DiscoveryMetadataHelper.Unescape(escaped); Assert.AreEqual(source, unescaped); }
public void EncodeSampleDiscoveryPacket() { var dp = new SamplePacket(); dp.Version = "1.0"; dp.Properties["Name"] = "Dummy"; var packet = DiscoveryMetadataHelper.Encode(dp); Assert.IsNotNull(packet); Assert.IsTrue(packet.Length == 110); }
/// <summary> /// Initializes a new instance of the <see cref="DiscoveryServer"/> class. /// </summary> /// <param name="responseMetadata">The response metadata.</param> /// <param name="port">The port to bind to.</param> /// <param name="localAddress">The local address to bind to.</param> public DiscoveryServer(DiscoveryMetadata responseMetadata, int port = DefaultDiscoveryPort, IPAddress localAddress = null) { if (responseMetadata == null) { throw new ArgumentNullException("responseMetadata", "Discovery response metadata is missing."); } Port = port; LocalAddress = localAddress ?? IPAddress.Any; ResponseMetadata = responseMetadata; ResponseMetadataPacket = DiscoveryMetadataHelper.Encode(ResponseMetadata); }
public void EscapeUnescapeNulls() { var escaped = DiscoveryMetadataHelper.Escape(null); Assert.AreEqual("@", escaped); var unescaped = DiscoveryMetadataHelper.Unescape("@"); Assert.IsNull(unescaped); unescaped = DiscoveryMetadataHelper.Unescape(null); Assert.IsNull(unescaped); }
public void DecodeSampleDiscoveryPacket() { var dp = new SamplePacket(); dp.Version = "EDC35F23-60AD-4730-A9AC-23D57B666DC1"; dp.ServiceUri = @"tcp://msdn.microsoft.com/en-us/library/tst0kwb1(v=vs.110).aspx|Something=Else|#5235@#$%\a\p\|@@"; dp.Properties["ExtraProperty"] = @"#%@$%45654!@#$\4214\|Shame=Value"; DiscoveryMetadataHelper.RegisterDiscoveryMetadataFactory(dp.Signature, () => new SamplePacket()); var packet = DiscoveryMetadataHelper.Encode(dp); var decoded = DiscoveryMetadataHelper.Decode(packet); Assert.IsNotNull(decoded); Assert.AreEqual(decoded.GetType(), typeof(SamplePacket)); Assert.AreEqual(dp, decoded); }
/// <summary> /// Initializes a new instance of the <see cref="DiscoveryClient"/> class. /// </summary> /// <param name="requestMetadata">The request metadata.</param> /// <param name="port">The port of the discovery server.</param> public DiscoveryClient(DiscoveryMetadata requestMetadata, int port = DiscoveryServer.DefaultDiscoveryPort) { if (requestMetadata == null) { throw new ArgumentNullException("requestMetadata", "Discovery request metadata is missing."); } Port = port; RequestMetadata = requestMetadata; RequestMetadataPacket = DiscoveryMetadataHelper.Encode(RequestMetadata); DestinationAddress = IPAddress.Broadcast; DestinationEndpoint = new IPEndPoint(DestinationAddress, Port); Results = new HashSet <DiscoveryMetadata>(); RetryTimeout = TimeSpan.FromSeconds(1); RetryCount = 10; }
private void ReceiveCallback(IAsyncResult asyncResult) { var response = default(DiscoveryMetadata); SafePerform(() => { var udpClient = (UdpClient)asyncResult.AsyncState; var remoteEndpoint = default(IPEndPoint); var responseMetadata = udpClient.EndReceive(asyncResult, ref remoteEndpoint); if (!Stopped) { response = DiscoveryMetadataHelper.Decode(responseMetadata); } }); if (response != null) { HandleResponse(response); } }
private void HandleRequest(UdpClient udpClient, IPEndPoint clientEndpoint, byte[] requestMetadata) { // check if request packet is damaged var request = DiscoveryMetadataHelper.Decode(requestMetadata); if (request == null) { return; } // make sure discovery metadata matches the request if (!ResponseMetadata.Matches(request) || Stopped) { return; } // send a response SafePerform(() => { udpClient.BeginSend(ResponseMetadataPacket, ResponseMetadataPacket.Length, clientEndpoint, SendCallback, udpClient); }); }