Ejemplo n.º 1
0
        public void writeHeader(IDictionary <string, string> key_vals, WriteFinishedFunc finished_func)
        {
            header_written_callback = finished_func;
            if (!transport.getRequiresHeader())
            {
                onHeaderWritten(this);
                return;
            }
            int len = 0;

            byte[] buffer = null;
            header.Write(key_vals, out buffer, out len);
            int msg_len = (int)len + 4;

            byte[] full_msg = new byte[msg_len];
            int    j        = 0;

            byte[] blen = Header.ByteLength(len);
            for ( ; j < 4; j++)
            {
                full_msg[j] = blen[j];
            }
            for (int i = 0; j < msg_len; j++)
            {
                i           = j - 4;
                full_msg[j] = buffer[i];
            }
            write(full_msg, msg_len, onHeaderWritten, true);
        }
Ejemplo n.º 2
0
        public static async Task <bool> Exists(string serviceName, bool logFailureReason = false)
        {
            string mappedName = Names.Resolve(serviceName);

            string host;
            int    port;

            try
            {
                (host, port) = await ServiceManager.Instance.LookupServiceAsync(mappedName);
            }
            catch
            {
                if (logFailureReason)
                {
                    ROS.Info()("waitForService: Service[{0}] has not been advertised, waiting...", mappedName);
                }
                return(false);
            }

            using (var tcpClient = new TcpClient())
            {
                try
                {
                    await tcpClient.ConnectAsync(host, port);
                }
                catch
                {
                    if (logFailureReason)
                    {
                        ROS.Info()("waitForService: Service[{0}] could not connect to host [{1}:{2}], waiting...", mappedName, host, port);
                    }

                    return(false);
                }

                var headerFields = new Dictionary <string, string>
                {
                    { "probe", "1" },
                    { "md5sum", "*" },
                    { "callerid", ThisNode.Name },
                    { "service", mappedName }
                };

                Header.Write(headerFields, out byte[] headerbuf, out int size);

                byte[] sizebuf = BitConverter.GetBytes(size);

                var stream = tcpClient.GetStream();
                await stream.WriteAsync(sizebuf, 0, sizebuf.Length);

                await stream.WriteAsync(headerbuf, 0, size);
            }

            return(true);
        }
Ejemplo n.º 3
0
        public async Task WriteHeader(IDictionary <string, string> headerValues, CancellationToken cancel)
        {
            Header.Write(headerValues, out byte[] headerBuffer, out int headerLength);
            int messageLength = (int)headerLength + 4;

            byte[] messageBuffer = new byte[messageLength];
            Buffer.BlockCopy(BitConverter.GetBytes(headerLength), 0, messageBuffer, 0, 4);
            Buffer.BlockCopy(headerBuffer, 0, messageBuffer, 4, headerBuffer.Length);
            await Stream.WriteAsync(messageBuffer, 0, messageBuffer.Length, cancel);
        }
Ejemplo n.º 4
0
        public static bool exists(string serviceName, bool logFailureReason = false)
        {
            string mappedName = Names.Resolve(serviceName);

            string host = "";
            int    port = 0;

            if (ServiceManager.Instance.LookUpService(mappedName, ref host, ref port))
            {
                var transport = new TcpTransport();
                if (transport.connect(host, port))
                {
                    var m = new Dictionary <string, string>
                    {
                        { "probe", "1" },
                        { "md5sum", "*" },
                        { "callerid", ThisNode.Name },
                        { "service", mappedName }
                    };

                    var h = new Header();
                    h.Write(m, out byte[] headerbuf, out int size);

                    byte[] sizebuf = BitConverter.GetBytes(size);

                    transport.write(sizebuf, 0, sizebuf.Length);
                    transport.write(headerbuf, 0, size);

                    return(true);
                }
                if (logFailureReason)
                {
                    ROS.Info()($"[{ThisNode.Name}] waitForService: Service[{mappedName}] could not connect to host [{host}:{port}], waiting...");
                }
            }
            else if (logFailureReason)
            {
                ROS.Info()($"[{ThisNode.Name}] waitForService: Service[{mappedName}] has not been advertised, waiting...");
            }
            return(false);
        }