Sha256: a557d683017eb4ff472e2a0f2a7021b85bb5fbd6f3716aa75b0e7fe9f909d793

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

require_relative 'handler'
require 'maxcube/messages/parser'

module MaxCube
  module Messages
    module UDP
      class Parser
        include Handler
        include Messages::Parser

        KEYS = %i[prefix serial_number id].freeze

        %w[i n h].each { |f| require_relative 'type/' << f }

        MSG_TYPES = %w[I N h c].freeze

        include MessageI
        include MessageN
        include MessageH

        MSG_PREFIX = (UDP::MSG_PREFIX + 'Ap').freeze

        def parse_udp_msg(msg)
          check_udp_msg(msg)
          hash = parse_udp_msg_head(msg)
          return hash unless parse_msg_body(@io.string, hash, 'udp')
          check_udp_hash(hash)
        end

        private

        def msg_msg_type(msg)
          msg[19]
        end

        def parse_udp_msg_head(msg)
          @io = StringIO.new(msg, 'rb')
          hash = {
            prefix: read(8),
            serial_number: read(10),
            id: read(1, true),
            type: read(1),
          }
          @io.string = @io.read
          hash
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
maxcube-client-0.4.1 lib/maxcube/messages/udp/parser.rb
maxcube-client-0.4.0 lib/maxcube/messages/udp/parser.rb