Class: EM::P::Redwood::MarshalFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/sup/protocol.rb

Instance Method Summary collapse

Constructor Details

#initializeMarshalFilter

Returns a new instance of MarshalFilter.



108
109
110
111
112
# File 'lib/sup/protocol.rb', line 108

def initialize
  @buf = ''
  @state = :prefix
  @size = 0
end

Instance Method Details

#decode(chunk) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/sup/protocol.rb', line 114

def decode chunk
  received = []
  @buf << chunk

  begin
    if @state == :prefix
      break unless @buf.size >= 4
      prefix = @buf.slice!(0...4)
      @size = prefix.unpack('N')[0]
      @state = :data
    end

    fail unless @state == :data
    break if @buf.size < @size
    received << Marshal.load(@buf.slice!(0...@size))
    @state = :prefix
  end until @buf.empty?

  received
end

#encode(o) ⇒ Object



135
136
137
138
# File 'lib/sup/protocol.rb', line 135

def encode o
  data = Marshal.dump o
  [data.size].pack('N') + data
end