/// <summary> /// Read process. /// </summary> /// <param name="reader">Reader from which to deserialize.</param> /// <returns>Process.</returns> private static Rendezvous.Process ReadProcess(BinaryReader reader) { var processName = reader.ReadString(); var processVersion = reader.ReadString(); var process = new Rendezvous.Process(processName, processVersion); // read endpoint info var endpointCount = reader.ReadInt32(); for (var i = 0; i < endpointCount; i++) { Rendezvous.Endpoint endpoint; switch (reader.ReadByte()) { case 0: // TcpEndpoint var address = reader.ReadString(); var port = reader.ReadInt32(); endpoint = new Rendezvous.TcpSourceEndpoint(address, port); break; case 1: // NetMQEndpoint endpoint = new Rendezvous.NetMQSourceEndpoint(reader.ReadString()); break; case 2: // RemoteExporterEndpoint var host = reader.ReadString(); port = reader.ReadInt32(); var transport = (TransportKind)reader.ReadInt32(); endpoint = new Rendezvous.RemoteExporterEndpoint(host, port, transport); break; case 3: // RemoteClockExporerEndpoint host = reader.ReadString(); port = reader.ReadInt32(); endpoint = new Rendezvous.RemoteClockExporterEndpoint(host, port); break; default: throw new Exception("Unknown type of Endpoint."); } // read stream info var streamCount = reader.ReadInt32(); for (var j = 0; j < streamCount; j++) { var name = reader.ReadString(); var typeName = reader.ReadString(); endpoint.AddStream(new Rendezvous.Stream(name, typeName)); } process.AddEndpoint(endpoint); } return(process); }
/// <summary> /// Create a rendezvous endpoint from a <see cref="NetMQWriter"/>. /// </summary> /// <param name="writer"><see cref="NetMQWriter"/> from which to create endpoint.</param> /// <returns>Rendezvous endpoint.</returns> public static Rendezvous.Endpoint ToRendezvousEndpoint(this NetMQWriter writer) { // Each NetWriter is an endpoint emitting one or more topics/streams. var endpoint = new Rendezvous.NetMQSourceEndpoint(writer.Address); foreach (var(name, type) in writer.Topics) { endpoint.AddStream(new Rendezvous.Stream(name, type)); } return(endpoint); }
/// <summary> /// Create a <see cref="NetMQSource{T}"/> from a <see cref="Rendezvous.NetMQSourceEndpoint"/>. /// </summary> /// <typeparam name="T">Type of data stream.</typeparam> /// <param name="endpoint"><see cref="Rendezvous.NetMQSourceEndpoint"/> from which to create .</param> /// <param name="pipeline">The pipeline to add the component to.</param> /// <param name="topic">Topic name.</param> /// <param name="deserializer">The deserializer to use to deserialize messages.</param> /// <param name="useSourceOriginatingTimes">Flag indicating whether or not to post with originating times received over the socket. If false, we ignore them and instead use pipeline's current time.</param> /// <returns><see cref="NetMQSource{T}"/>.</returns> public static NetMQSource <T> ToNetMQSource <T>(this Rendezvous.NetMQSourceEndpoint endpoint, Pipeline pipeline, string topic, IFormatDeserializer deserializer, bool useSourceOriginatingTimes = true) => new NetMQSource <T>(pipeline, topic, endpoint.Address, deserializer, useSourceOriginatingTimes);