module EventMachine::Protocols::FrameObjectProtocol

FrameObjectProtocol is a reimplementation of ObjectProtocol suitable for UDP

module RubyServer
  include EM::P::FrameObjectProtocol

  def receive_object obj
    send_object({'you said' => obj})
  end
end

Public Instance Methods

handle_exception(datagram, e) click to toggle source

Invoked whenever FrameObjectProtocol fails to deserialize an object

# File lib/em/protocols/frame_object_protocol.rb, line 73
def handle_exception datagram, e
  # stub
end
receive_data(data) click to toggle source

@private

# File lib/em/protocols/frame_object_protocol.rb, line 36
def receive_data data
  p data

  begin
    if data.size < 4
      raise "Received invalid datagram, datagram way too small"
    end

    size=data.unpack('N').first

    if data.size != 4+size
      actual_size = data.size-4
      raise "Received invalid datagram: expected size=#{size}, actual size=#{actual_size}"
    end

    obj = serializer.load data[4..-1]
  rescue => e
    handle_exception(data, e)
    return
  end

  p obj
  receive_object obj
end
receive_object(obj) click to toggle source

Invoked with ruby objects received over the network

# File lib/em/protocols/frame_object_protocol.rb, line 62
def receive_object obj
  # stub
end
send_object(obj) click to toggle source

Sends a ruby object over the network

# File lib/em/protocols/frame_object_protocol.rb, line 67
def send_object obj
  data = serializer.dump(obj)
  send_data [data.respond_to?(:bytesize) ? data.bytesize : data.size, data].pack('Na*')
end
serializer() click to toggle source

By default returns Marshal, override to return JSON or YAML, or any other serializer/deserializer responding to dump and load.

# File lib/em/protocols/frame_object_protocol.rb, line 31
def serializer
  Marshal
end