Class: Telegraph::Message
- Inherits:
-
Object
- Object
- Telegraph::Message
- Extended by:
- Logging
- Includes:
- Logging
- Defined in:
- lib/telegraph/message.rb
Instance Attribute Summary collapse
-
#body ⇒ Object
readonly
Returns the value of attribute body.
-
#sequence_ack ⇒ Object
readonly
Returns the value of attribute sequence_ack.
-
#sequence_number ⇒ Object
readonly
Returns the value of attribute sequence_number.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(body, sequence_number, sequence_ack) ⇒ Message
constructor
A new instance of Message.
- #write(stream) ⇒ Object
Methods included from Logging
Constructor Details
#initialize(body, sequence_number, sequence_ack) ⇒ Message
Returns a new instance of Message.
7 8 9 10 11 |
# File 'lib/telegraph/message.rb', line 7 def initialize(body, sequence_number, sequence_ack) @body = body @sequence_number = sequence_number @sequence_ack = sequence_ack end |
Instance Attribute Details
#body ⇒ Object (readonly)
Returns the value of attribute body.
5 6 7 |
# File 'lib/telegraph/message.rb', line 5 def body @body end |
#sequence_ack ⇒ Object (readonly)
Returns the value of attribute sequence_ack.
5 6 7 |
# File 'lib/telegraph/message.rb', line 5 def sequence_ack @sequence_ack end |
#sequence_number ⇒ Object (readonly)
Returns the value of attribute sequence_number.
5 6 7 |
# File 'lib/telegraph/message.rb', line 5 def sequence_number @sequence_number end |
Class Method Details
.read(stream) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/telegraph/message.rb', line 22 def read(stream) header_data = read_data(stream, 12, "header") size, sequence_number, sequence_ack = header_data.unpack("NNN") = read_data(stream, size, "message") debug { "read #{[4..20]}... (#{.length} bytes)" } Message.new Marshal.load(), sequence_number, (sequence_ack == 0 ? nil : sequence_ack) end |
.read_data(stream, length, label) ⇒ Object
31 32 33 34 35 36 |
# File 'lib/telegraph/message.rb', line 31 def read_data(stream, length, label) data = stream.read(length) raise IOError, "connection closed" unless data raise IOError, "incomplete #{label} data" unless data.length == length data end |
Instance Method Details
#write(stream) ⇒ Object
13 14 15 16 17 |
# File 'lib/telegraph/message.rb', line 13 def write(stream) = Marshal.dump(body) debug { "send #{[4..20]}... (#{.length} bytes)" } stream.write [.size, @sequence_number, @sequence_ack || 0].pack("NNN") + end |