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); }
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); }
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); }
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); }