Esempio n. 1
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);
        }
Esempio n. 2
0
        private void writeTransport()
        {
            lock ( writing )
            {
                if (dropped)
                {
                    return;
                }

                bool can_write_more = true;
                while (write_callback != null && can_write_more && !dropped)
                {
                    int to_write   = write_size - write_sent;
                    int bytes_sent = transport.write(write_buffer, write_sent, to_write);
                    if (bytes_sent <= 0)
                    {
                        return;
                    }
                    write_sent += (int)bytes_sent;
                    if (bytes_sent < write_size - write_sent)
                    {
                        can_write_more = false;
                    }
                    if (write_sent == write_size && !dropped)
                    {
                        WriteFinishedFunc callback = write_callback;
                        write_callback = null;
                        write_buffer   = null;
                        write_sent     = 0;
                        write_size     = 0;
                        if (!callback(this))
                        {
                            ROS.Error()($"[{ThisNode.Name}] Failed to invoke {callback.GetMethodInfo().Name}");
                        }
                    }
                }
            }
        }