Class: ROS::TCPROS::Client
- Inherits:
-
Object
- Object
- ROS::TCPROS::Client
- Includes:
- Message
- Defined in:
- lib/ros/tcpros/client.rb
Overview
rosrpc's client for subscriber
Instance Attribute Summary (collapse)
-
- (Integer) byte_received
readonly
Received byte.
-
- (String) host
readonly
Host name.
-
- (String) id
Id for slave API.
-
- (Queue) msg_queue
readonly
Message queue.
-
- (Integer) port
readonly
Port number of this client.
-
- (String) target_uri
readonly
URI of connection target.
Instance Method Summary (collapse)
-
- (TCPROS::Header) build_header
build header data for subscription.
-
- (Client) initialize(host, port, caller_id, topic_name, topic_type, target_uri, tcp_no_delay)
constructor
A new instance of Client.
-
- (Object) shutdown
close the connection.
-
- (Object) start
start recieving data.
Methods included from Message
#protocol, #read_all, #read_header, #write_header, #write_msg
Constructor Details
- (Client) initialize(host, port, caller_id, topic_name, topic_type, target_uri, tcp_no_delay)
Returns a new instance of Client
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/ros/tcpros/client.rb', line 29 def initialize(host, port, caller_id, topic_name, topic_type, target_uri, tcp_no_delay) @caller_id = caller_id @topic_name = topic_name @topic_type = topic_type @port = port @host = host @target_uri = target_uri @msg_queue = Queue.new @socket = TCPSocket.open(@host, @port) @tcp_no_delay = tcp_no_delay if tcp_no_delay @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) end @byte_received = 0 @is_running = true end |
Instance Attribute Details
- (Integer) byte_received (readonly)
Returns received byte
102 103 104 |
# File 'lib/ros/tcpros/client.rb', line 102 def byte_received @byte_received end |
- (String) host (readonly)
Returns host name
98 99 100 |
# File 'lib/ros/tcpros/client.rb', line 98 def host @host end |
- (String) id
Returns id for slave API
106 107 108 |
# File 'lib/ros/tcpros/client.rb', line 106 def id @id end |
- (Queue) msg_queue (readonly)
Returns message queue
100 101 102 |
# File 'lib/ros/tcpros/client.rb', line 100 def msg_queue @msg_queue end |
- (Integer) port (readonly)
Returns port number of this client
96 97 98 |
# File 'lib/ros/tcpros/client.rb', line 96 def port @port end |
- (String) target_uri (readonly)
Returns URI of connection target
104 105 106 |
# File 'lib/ros/tcpros/client.rb', line 104 def target_uri @target_uri end |
Instance Method Details
- (TCPROS::Header) build_header
build header data for subscription.
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/ros/tcpros/client.rb', line 51 def build_header header = Header.new header.push_data("callerid", @caller_id) header.push_data("topic", @topic_name) header.push_data("md5sum", @topic_type.md5sum) header.push_data("type", @topic_type.type) if @tcp_no_delay header.push_data("tcp_nodelay", '1') else header.push_data("tcp_nodelay", '0') end header end |
- (Object) shutdown
close the connection. kill the thread if it is not response.
85 86 87 88 89 90 91 92 93 |
# File 'lib/ros/tcpros/client.rb', line 85 def shutdown @is_running = false if not @thread.join(0.1) Thread::kill(@thread) end if not @socket.closed? @socket.close end end |
- (Object) start
start recieving data. The received messages are pushed into a message queue.
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ros/tcpros/client.rb', line 68 def start write_header(@socket, build_header) read_header(@socket) @thread = Thread.start do while @is_running data = read_all(@socket) msg = @topic_type.new msg.deserialize(data) @byte_received += data.length @msg_queue.push(msg) end end end |