public bool initialize(Connection connection) { #if DEBUG EDB.WriteLine("Init transport publisher link: " + parent.name); #endif this.connection = connection; connection.DroppedEvent += onConnectionDropped; if (connection.transport.getRequiresHeader()) { connection.setHeaderReceivedCallback(onHeaderReceived); IDictionary header = new Hashtable(); header["topic"] = parent.name; header["md5sum"] = parent.md5sum; header["callerid"] = this_node.Name; header["type"] = parent.datatype; header["tcp_nodelay"] = "1"; connection.writeHeader(header, onHeaderWritten); } else { connection.read(4, onMessageLength); } return(true); }
private bool onHeaderReceived(Connection conn, Header header) { if (conn != connection) { return(false); } if (!setHeader(header)) { drop(); return(false); } if (retry_timer != null) { ROS.timer_manager.RemoveTimer(ref retry_timer); } connection.read(4, onMessageLength); return(true); }
public virtual void onRequestLength(Connection conn, ref byte[] buffer, uint size, bool success) { if (!success) { return; } if (conn != connection || size != 4) { throw new Exception("Invalid request length read"); } uint len = BitConverter.ToUInt32(buffer, 0); if (len > 1000000000) { ROS.Error("A message over a gigabyte was predicted... stop... being... bad."); connection.drop(Connection.DropReason.Destructing); return; } connection.read(len, onRequest); }
private bool onRequestWritten(Connection conn) { connection.read(5, onResponseOkAndLength); return(true); }
private void onRequestWritten(Connection conn) { connection.read(5, onResponseOkAndLength); }