module Rexpro::Message::Base
Attributes
serializer_type[R]
Public Class Methods
included(klass)
click to toggle source
# File lib/rexpro/message.rb, line 70 def self.included(klass) klass.extend ClassMethods klass.define_fields session_uuid: :to_s, request_uuid: :to_s, meta: :to_hash end
new(attrs = {})
click to toggle source
# File lib/rexpro/message.rb, line 115 def initialize(attrs = {}) @serializer_type = attrs.delete(:serializer_type) || SERIALIZER_MSGPACK self.meta ||= {} attrs.each { |k, v| send("#{k}=", v) } self.session_uuid ||= ZERO_UUID self.request_uuid ||= Message.generate_uuid end
Public Instance Methods
serialize_body(*args)
click to toggle source
# File lib/rexpro/message.rb, line 123 def serialize_body(*args) if serializer_type != SERIALIZER_MSGPACK raise NotImplementedError, 'only MsgPack serialization is supported' end self.class.fields.map do |field| value = send(field) field_method = self.class.field_methods[field] value = value.send(field_method) if field_method value end.to_msgpack(*args) end
write_to(io)
click to toggle source
# File lib/rexpro/message.rb, line 136 def write_to(io) body = serialize_body header = [ PROTOCOL_VERSION, serializer_type, 0, self.class.type, body.size ].pack('CCNCN') io.write(header + body) end