Exemplo n.º 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);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Write update to add process.
        /// </summary>
        /// <param name="process">Process to add.</param>
        /// <param name="writer">Writer to which to write update.</param>
        protected static void WriteAddProcess(Rendezvous.Process process, BinaryWriter writer)
        {
            writer.Write((byte)1); // add
            writer.Write(process.Name);
            writer.Write(process.Version);
            writer.Write(process.Endpoints.Count());
            foreach (var endpoint in process.Endpoints)
            {
                if (endpoint is Rendezvous.TcpSourceEndpoint tcpEndpoint)
                {
                    writer.Write((byte)0); // TcpEndpoint
                    writer.Write(tcpEndpoint.Host);
                    writer.Write(tcpEndpoint.Port);
                }
                else if (endpoint is Rendezvous.NetMQSourceEndpoint netMQEndpoint)
                {
                    writer.Write((byte)1); // NetMQEndpoint
                    writer.Write(netMQEndpoint.Address);
                }
                else if (endpoint is Rendezvous.RemoteExporterEndpoint remoteExporterEndpoint)
                {
                    writer.Write((byte)2); // RemoteExporterEndpoint
                    writer.Write(remoteExporterEndpoint.Host);
                    writer.Write(remoteExporterEndpoint.Port);
                    writer.Write((int)remoteExporterEndpoint.Transport);
                }
                else if (endpoint is Rendezvous.RemoteClockExporterEndpoint remoteClockExporterEndpoint)
                {
                    writer.Write((byte)3); // RemoteClockExporterEndpoint
                    writer.Write(remoteClockExporterEndpoint.Host);
                    writer.Write(remoteClockExporterEndpoint.Port);
                }
                else
                {
                    throw new ArgumentException($"Unknown type of Endpoint ({endpoint.GetType().Name}).");
                }

                writer.Write(endpoint.Streams.Count());
                foreach (var stream in endpoint.Streams)
                {
                    writer.Write(stream.StreamName);
                    writer.Write(stream.TypeName);
                }
            }

            writer.Flush();
        }
Exemplo n.º 3
0
 /// <summary>
 /// Write update to remove process.
 /// </summary>
 /// <param name="process">Process to remove.</param>
 /// <param name="writer">Writer to which to write update.</param>
 protected static void WriteRemoveProcess(Rendezvous.Process process, BinaryWriter writer)
 {
     writer.Write((byte)2); // remove
     writer.Write(process.Name);
     writer.Flush();
 }