Module: RxIO::IOFilters::BinDelim

Defined in:
lib/rxio/io_filters/bin_delim.rb

Overview

Binary-Delimiter I/O Filter: Splits messages according to a given fixed *binary delimiter*, which can be any number of bytes, defined through the msg_delim method.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object

Inject Dependencies into Extending Module

Parameters:

  • base (Module)


19
20
21
# File 'lib/rxio/io_filters/bin_delim.rb', line 19

def self.extended base
	base.extend RxIO::HandlerBase
end

Instance Method Details

#filter_input(endpoint, chunk) ⇒ Object

Filter Input: Buffers data chunks sent by the endpoint and extracts messages from them, according to the delimiter defined through msg_delim.

Parameters:

  • endpoint (Hash)
  • chunk (String)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rxio/io_filters/bin_delim.rb', line 34

def filter_input endpoint, chunk

	# Buffer dat shit
	buffer_input endpoint, chunk

	# Ensure Last Position is available
	endpoint[:bin_delim] ||= {}
	endpoint[:bin_delim][:last_pos] ||= 0

	# Loop over Messages
	while true

		# Find Delimiter
		d = endpoint[:ibuf].index @msg_delim, endpoint[:bin_delim][:last_pos]
		endpoint[:bin_delim][:last_pos] = endpoint[:ibuf].bytesize

		# Check Delimiter
		break unless d

		# Slice out Message from Input Buffer
		m = endpoint[:ibuf].slice!(0, d + @msg_delim.bytesize).slice 0, d
		endpoint[:bin_delim][:last_pos] = 0

		# Register Message
		endpoint[:msgs] << m
	end
end

#msg_delim(v) ⇒ Object

Set Message Delimiter: Used to define the binary string used as message delimiter for this protocol.

Parameters:

  • v (String)

    The message delimiter string



26
27
28
# File 'lib/rxio/io_filters/bin_delim.rb', line 26

def msg_delim v
	@msg_delim = v
end

#send_msg(endpoint, msg) ⇒ Object

Send Message: Buffers a message to be sent to the endpoint, after wrapping it according to the delimiter defined through msg_delim.

Parameters:

  • endpoint (Hash)
  • msg (String)


66
67
68
# File 'lib/rxio/io_filters/bin_delim.rb', line 66

def send_msg endpoint, msg
	write endpoint, msg, @msg_delim
end