Module: EventMachine::Protocols::ObjectProtocol
- Defined in:
- lib/em/protocols/object_protocol.rb
Overview
ObjectProtocol allows for easy communication using marshaled ruby objects
module RubyServer
include EM::P::ObjectProtocol
def receive_object obj
send_object({'you said' => obj})
end
end
Instance Method Summary collapse
-
#receive_data(data) ⇒ Object
:nodoc:.
-
#receive_object(obj) ⇒ Object
Invoked with ruby objects received over the network.
-
#send_object(obj) ⇒ Object
Sends a ruby object over the network.
-
#serializer ⇒ Object
By default returns Marshal, override to return JSON or YAML, or any other serializer/deserializer responding to #dump and #load.
Instance Method Details
#receive_data(data) ⇒ Object
:nodoc:
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/em/protocols/object_protocol.rb', line 20 def receive_data data # :nodoc: (@buf ||= '') << data while @buf.size >= 4 if @buf.size >= 4+(size=@buf.unpack('N').first) @buf.slice!(0,4) receive_object serializer.load(@buf.slice!(0,size)) else break end end end |
#receive_object(obj) ⇒ Object
Invoked with ruby objects received over the network
34 35 36 |
# File 'lib/em/protocols/object_protocol.rb', line 34 def receive_object obj # stub end |
#send_object(obj) ⇒ Object
Sends a ruby object over the network
39 40 41 42 |
# File 'lib/em/protocols/object_protocol.rb', line 39 def send_object obj data = serializer.dump(obj) send_data [data.respond_to?(:bytesize) ? data.bytesize : data.size, data].pack('Na*') end |
#serializer ⇒ Object
By default returns Marshal, override to return JSON or YAML, or any other serializer/deserializer responding to #dump and #load.
16 17 18 |
# File 'lib/em/protocols/object_protocol.rb', line 16 def serializer Marshal end |