Sha256: b021164b7ee4748d47759bea9b695efd6a0d4a9a24f608d4af0a893d60848611

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

require 'hashmake'

module SPNet
class ControlMessage < Message

  include Hashmake::HashMakeable
  
  GET = :controlMessageSubtypeGet
  SET = :controlMessageSubtypeSet
  
  SUBTYPES = [
    GET,
    SET
  ]
  
  HASHED_ARGS_SPECS = [
    Hashmake::ArgSpec.new(:reqd => true, :key => :subtype, :type => Symbol, :validator => ->(a){ SUBTYPES.include?(a) } )
  ]
  
  attr_reader :subtype
  
  def initialize hashed_args
    hash_make ControlMessage::HASHED_ARGS_SPECS, hashed_args
    super_hashed_args = hashed_args.merge! :type => Message::CONTROL
    super(super_hashed_args)
  end
  
  def self.make_handler get_handler, set_handler
    handler = lambda do |message|
      raise ArgumentError, "message is not a ControlMessage" unless message.is_a?(ControlMessage)
      
      if message.subtype == GET
        return get_handler.call message
      elsif message.subtype == SET
        return set_handler.call message
      else
        raise ArgumentError, "message subtype #{message.subtype} is not valid"
      end
      
    end
    return handler
  end
  
  def self.make_set_message data
    ControlMessage.new :subtype => SET, :data => data
  end

  def self.make_get_message
    ControlMessage.new :subtype => GET
  end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spnet-0.1.2 lib/spnet/control_message.rb
spnet-0.1.1 lib/spnet/control_message.rb