Class: NNG::Message
- Inherits:
-
Object
- Object
- NNG::Message
- Defined in:
- lib/nng/message.rb
Overview
NNG message wrapper
Instance Attribute Summary collapse
-
#msg_ptr ⇒ Object
readonly
Returns the value of attribute msg_ptr.
Instance Method Summary collapse
-
#append(data) ⇒ self
Append data to message body.
-
#body ⇒ String
Get message body.
-
#clear ⇒ self
Clear message body.
-
#dup ⇒ Message
Duplicate message.
-
#free ⇒ nil
Free the message.
-
#freed? ⇒ Boolean
Check if message is freed.
-
#header ⇒ String
Get message header.
-
#header_append(data) ⇒ self
Append data to message header.
-
#header_clear ⇒ self
Clear message header.
-
#header_length ⇒ Integer
Get message header length.
-
#initialize(size: 0) ⇒ Message
constructor
Create a new message.
-
#insert(data) ⇒ self
Insert data at the beginning of message body.
-
#length ⇒ Integer
(also: #size)
Get message body length.
-
#to_ptr ⇒ FFI::Pointer
Get the internal message pointer (for use with send/recv).
Constructor Details
#initialize(size: 0) ⇒ Message
Create a new message
10 11 12 13 14 15 16 |
# File 'lib/nng/message.rb', line 10 def initialize(size: 0) @msg_ptr = ::FFI::MemoryPointer.new(:pointer) ret = FFI.nng_msg_alloc(@msg_ptr, size) FFI.check_error(ret, "Allocate message") @msg = @msg_ptr.read_pointer @freed = false end |
Instance Attribute Details
#msg_ptr ⇒ Object (readonly)
Returns the value of attribute msg_ptr.
6 7 8 |
# File 'lib/nng/message.rb', line 6 def msg_ptr @msg_ptr end |
Instance Method Details
#append(data) ⇒ self
Append data to message body
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/nng/message.rb', line 21 def append(data) check_freed data_str = data.to_s data_ptr = ::FFI::MemoryPointer.new(:uint8, data_str.bytesize) data_ptr.put_bytes(0, data_str) ret = FFI.nng_msg_append(@msg, data_ptr, data_str.bytesize) FFI.check_error(ret, "Append to message") self end |
#body ⇒ String
Get message body
48 49 50 51 52 53 |
# File 'lib/nng/message.rb', line 48 def body check_freed body_ptr = FFI.nng_msg_body(@msg) length = FFI.nng_msg_len(@msg) body_ptr.read_bytes(length) end |
#clear ⇒ self
Clear message body
95 96 97 98 99 |
# File 'lib/nng/message.rb', line 95 def clear check_freed FFI.nng_msg_clear(@msg) self end |
#dup ⇒ Message
Duplicate message
111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/nng/message.rb', line 111 def dup check_freed dup_ptr = ::FFI::MemoryPointer.new(:pointer) ret = FFI.nng_msg_dup(dup_ptr, @msg) FFI.check_error(ret, "Duplicate message") new_msg = allocate new_msg.instance_variable_set(:@msg, dup_ptr.read_pointer) new_msg.instance_variable_set(:@msg_ptr, dup_ptr) new_msg.instance_variable_set(:@freed, false) new_msg end |
#free ⇒ nil
Free the message
126 127 128 129 130 131 |
# File 'lib/nng/message.rb', line 126 def free return if @freed FFI.nng_msg_free(@msg) @freed = true nil end |
#freed? ⇒ Boolean
Check if message is freed
135 136 137 |
# File 'lib/nng/message.rb', line 135 def freed? @freed end |
#header ⇒ String
Get message header
65 66 67 68 69 70 |
# File 'lib/nng/message.rb', line 65 def header check_freed header_ptr = FFI.nng_msg_header(@msg) length = FFI.nng_msg_header_len(@msg) header_ptr.read_bytes(length) end |
#header_append(data) ⇒ self
Append data to message header
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/nng/message.rb', line 82 def header_append(data) check_freed data_str = data.to_s data_ptr = ::FFI::MemoryPointer.new(:uint8, data_str.bytesize) data_ptr.put_bytes(0, data_str) ret = FFI.nng_msg_header_append(@msg, data_ptr, data_str.bytesize) FFI.check_error(ret, "Append to message header") self end |
#header_clear ⇒ self
Clear message header
103 104 105 106 107 |
# File 'lib/nng/message.rb', line 103 def header_clear check_freed FFI.nng_msg_header_clear(@msg) self end |
#header_length ⇒ Integer
Get message header length
74 75 76 77 |
# File 'lib/nng/message.rb', line 74 def header_length check_freed FFI.nng_msg_header_len(@msg) end |
#insert(data) ⇒ self
Insert data at the beginning of message body
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/nng/message.rb', line 35 def insert(data) check_freed data_str = data.to_s data_ptr = ::FFI::MemoryPointer.new(:uint8, data_str.bytesize) data_ptr.put_bytes(0, data_str) ret = FFI.nng_msg_insert(@msg, data_ptr, data_str.bytesize) FFI.check_error(ret, "Insert to message") self end |
#length ⇒ Integer Also known as: size
Get message body length
57 58 59 60 |
# File 'lib/nng/message.rb', line 57 def length check_freed FFI.nng_msg_len(@msg) end |
#to_ptr ⇒ FFI::Pointer
Get the internal message pointer (for use with send/recv)
141 142 143 |
# File 'lib/nng/message.rb', line 141 def to_ptr @msg end |