class Plux::Parser
Constants
- LAST_MSG
- SEPERATOR
- STREAM_MAX_LEN
- SYSTEM
Public Class Methods
encode(msg)
click to toggle source
# File lib/plux/parser.rb, line 52 def self.encode(msg) len = msg.length.to_s(SYSTEM) msg = "#{len}#{SEPERATOR}#{msg}" len = msg.length return [msg] if len < STREAM_MAX_LEN div, mod = len.divmod(STREAM_MAX_LEN) (mod > 0 ? (div + 1) : div).times.map do |start| msg[start * STREAM_MAX_LEN, STREAM_MAX_LEN] end end
new()
click to toggle source
# File lib/plux/parser.rb, line 9 def initialize @broken = '' end
Public Instance Methods
decode(stream)
click to toggle source
# File lib/plux/parser.rb, line 13 def decode(stream) stream = @broken.concat(stream) result = [] start = 0 pending = stream.length until start >= pending sep_idx = stream.index(SEPERATOR, start) unless sep_idx len_str = stream[start, pending] @broken.clear @broken.concat(len_str) return result end len_str = stream[start, sep_idx - start] est_len = len_str.to_i(SYSTEM) start = sep_idx + 1 msg = stream[start, est_len] act_len = msg.length if act_len < est_len @broken.clear @broken.concat(len_str) @broken.concat(SEPERATOR) @broken.concat(msg) return result end result << msg start += act_len end @broken.clear result end