public static bool exists(string service_name, bool print_failure_reason) { string mapped_name = names.resolve(service_name); string host = ""; int port = 0; if (ServiceManager.Instance.lookUpService(mapped_name, ref host, ref port)) { TcpTransport transport = new TcpTransport(); IDictionary m = new Hashtable { { "probe", "1" }, { "md5sum", "*" }, { "callerid", this_node.Name }, { "service", mapped_name } }; byte[] headerbuf = null; int size = 0; Header h = new Header(); h.Write(m, ref headerbuf, ref size); if (transport.connect(host, port)) { byte[] sizebuf = BitConverter.GetBytes(size); transport.write(sizebuf, 0, sizebuf.Length); transport.write(headerbuf, 0, size); return(true); } if (print_failure_reason) { ROS.Info("waitForService: Service[{0}] could not connect to host [{1}:{2}], waiting...", mapped_name, host, port); } } else if (print_failure_reason) { ROS.Info("waitForService: Service[{0}] has not been advertised, waiting...", mapped_name); } return(false); }
public static bool exists(string service_name, bool print_failure_reason) { string mapped_name = names.resolve(service_name); string host = ""; int port = 0; if (ServiceManager.Instance.lookUpService(mapped_name, ref host, ref port)) { TcpTransport transport = new TcpTransport(); IDictionary m = new Hashtable { {"probe", "1"}, {"md5sum", "*"}, {"callerid", this_node.Name}, {"service", mapped_name} }; byte[] headerbuf = null; int size = 0; Header h = new Header(); h.Write(m, ref headerbuf, ref size); if (transport.connect(host, port)) { byte[] sizebuf = BitConverter.GetBytes(size); transport.write(sizebuf, 0, sizebuf.Length); transport.write(headerbuf, 0, size); return true; } if (print_failure_reason) { ROS.Info("waitForService: Service[{0}] could not connect to host [{1}:{2}], waiting...", mapped_name, host, port); } } else if (print_failure_reason) { ROS.Info("waitForService: Service[{0}] has not been advertised, waiting...", mapped_name); } return false; }
private void writeTransport() { if (dropped || writing) { return; } lock (write_mutex) { writing = true; bool can_write_more = true; while (write_callback != null && can_write_more && !dropped) { uint to_write = write_size - write_sent; int bytes_sent = transport.write(write_buffer, write_sent, to_write); if (bytes_sent <= 0) { writing = false; return; } write_sent += (uint)bytes_sent; if (bytes_sent < write_size - write_sent) { can_write_more = false; } if (write_sent == write_size && !dropped) { WriteFinishedFunc callback; lock (write_callback_mutex) { callback = write_callback; write_callback = null; write_buffer = null; write_sent = 0; write_size = 0; } callback(this); } } writing = false; } }
private void writeTransport() { lock (writing) { if (dropped) { return; } ScopedTimer.Ping(); 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) { lock (write_callback_mutex) { WriteFinishedFunc callback = write_callback; write_callback = null; write_buffer = null; write_sent = 0; write_size = 0; if (!callback(this)) { Console.WriteLine("Failed to invoke " + callback.Method.Name); } } } } } }