Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
 /// <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);