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