hap_client 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hap_client/parser.rb +4 -0
- data/lib/hap_client/request.rb +36 -17
- data/lib/hap_client/version.rb +1 -1
- data/lib/hap_client.rb +77 -24
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 06df4fc89f6507b7c23e719dda77142ffaa4d49362af671659f1c4a0308218cc
         | 
| 4 | 
            +
              data.tar.gz: 5b76e602105df2387c5290420d085bb8dd7d5bc6a0edd4eb38c10540021c9c58
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: af58a2db3e43f5a67f14cbd00ab45e96f9daa0ade9112d0f217232d0ba4fb5a0de22d26ec32d8c1c6d3cb8a3ba8b8cc220ecc7a374b0da77e977005f5336d5d1
         | 
| 7 | 
            +
              data.tar.gz: 961526453a5f82f3b19825c36f6275a742cb782e0975629949aa57805169348dc78d48b9c7fcc081e8cc826af53348cdd84e34033dcf65501fb2984a9a417f4a
         | 
    
        data/lib/hap_client/parser.rb
    CHANGED
    
    
    
        data/lib/hap_client/request.rb
    CHANGED
    
    | @@ -4,6 +4,41 @@ module HAP | |
| 4 4 | 
             
              module Request
         | 
| 5 5 | 
             
                include EncryptionRequest
         | 
| 6 6 |  | 
| 7 | 
            +
                def init_request()
         | 
| 8 | 
            +
                  @req_queue = EM::Queue.new
         | 
| 9 | 
            +
                  @res_queue = EM::Queue.new
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  response_work = nil
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  request_work = Proc.new do |req|
         | 
| 14 | 
            +
                    if encryption_ready?
         | 
| 15 | 
            +
                      encrypt(req).each do |r|
         | 
| 16 | 
            +
                        if @socket.nil?
         | 
| 17 | 
            +
                          send_data(r)
         | 
| 18 | 
            +
                        else
         | 
| 19 | 
            +
                          @socket.write(r)
         | 
| 20 | 
            +
                        end
         | 
| 21 | 
            +
                      end
         | 
| 22 | 
            +
                    else
         | 
| 23 | 
            +
                      if @socket.nil?
         | 
| 24 | 
            +
                        send_data(req)
         | 
| 25 | 
            +
                      else
         | 
| 26 | 
            +
                        @socket.write(req)
         | 
| 27 | 
            +
                      end
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    init_parser()
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    @res_queue.pop(&response_work)
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  response_work = Proc.new do |res|
         | 
| 36 | 
            +
                    @req_queue.pop(&request_work)
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  @req_queue.pop(&request_work)
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 7 42 | 
             
                def get(url)
         | 
| 8 43 | 
             
                  request("GET", url)
         | 
| 9 44 | 
             
                end
         | 
| @@ -46,23 +81,7 @@ module HAP | |
| 46 81 | 
             
                    req << data.to_s
         | 
| 47 82 | 
             
                  end
         | 
| 48 83 |  | 
| 49 | 
            -
                   | 
| 50 | 
            -
                    encrypt(req).each do |r|
         | 
| 51 | 
            -
                      if @socket.nil?
         | 
| 52 | 
            -
                        send_data(r)
         | 
| 53 | 
            -
                      else
         | 
| 54 | 
            -
                        @socket.write(r)
         | 
| 55 | 
            -
                      end
         | 
| 56 | 
            -
                    end
         | 
| 57 | 
            -
                  else
         | 
| 58 | 
            -
                    if @socket.nil?
         | 
| 59 | 
            -
                      send_data(req)
         | 
| 60 | 
            -
                    else
         | 
| 61 | 
            -
                      @socket.write(req)
         | 
| 62 | 
            -
                    end
         | 
| 63 | 
            -
                  end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  init_parser()
         | 
| 84 | 
            +
                  @req_queue.push(req)
         | 
| 66 85 | 
             
                end
         | 
| 67 86 | 
             
              end
         | 
| 68 87 | 
             
            end
         | 
    
        data/lib/hap_client/version.rb
    CHANGED
    
    
    
        data/lib/hap_client.rb
    CHANGED
    
    | @@ -16,6 +16,9 @@ module HAP | |
| 16 16 | 
             
                  @name = "Unknown Client"
         | 
| 17 17 | 
             
                  @mode = :init
         | 
| 18 18 | 
             
                  @values = {}
         | 
| 19 | 
            +
                  @ids = {}
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  init_request()
         | 
| 19 22 | 
             
                  init_log()
         | 
| 20 23 | 
             
                end
         | 
| 21 24 |  | 
| @@ -23,35 +26,39 @@ module HAP | |
| 23 26 | 
             
                  info("Set Value #{aid}:#{iid} to #{value}")
         | 
| 24 27 | 
             
                  data = {
         | 
| 25 28 | 
             
                    "characteristics" => [{
         | 
| 26 | 
            -
                                            "aid" => aid,
         | 
| 27 | 
            -
                                            "iid" => iid,
         | 
| 28 | 
            -
                                            "value" => value
         | 
| 29 | 
            +
                                            "aid" => aid.to_i,
         | 
| 30 | 
            +
                                            "iid" => iid.to_i,
         | 
| 31 | 
            +
                                            "value" => value.to_i
         | 
| 29 32 | 
             
                                          }]
         | 
| 30 33 | 
             
                  }
         | 
| 31 34 |  | 
| 32 35 | 
             
                  put("/characteristics", "application/hap+json", JSON.generate(data))
         | 
| 33 36 | 
             
                end
         | 
| 34 37 |  | 
| 35 | 
            -
                def subscribe( | 
| 36 | 
            -
                   | 
| 38 | 
            +
                def subscribe(&block)
         | 
| 39 | 
            +
                  events = []
         | 
| 40 | 
            +
                  @values.each do |service|
         | 
| 41 | 
            +
                    service[1].each do |val|
         | 
| 42 | 
            +
                      value = val[1]
         | 
| 43 | 
            +
                      if value[:perms].include?("ev")
         | 
| 44 | 
            +
                        info("Subscribe to #{value[:aid]}:#{value[:iid]}")
         | 
| 45 | 
            +
                        events.push({
         | 
| 46 | 
            +
                                      :aid => value[:aid],
         | 
| 47 | 
            +
                                      :iid => value[:iid],
         | 
| 48 | 
            +
                                      :ev => true
         | 
| 49 | 
            +
                                    })
         | 
| 50 | 
            +
                      end
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 37 54 | 
             
                  data = {
         | 
| 38 | 
            -
                     | 
| 39 | 
            -
                                            "aid" => aid,
         | 
| 40 | 
            -
                                            "iid" => iid,
         | 
| 41 | 
            -
                                            "ev" => "true"
         | 
| 42 | 
            -
                                          }]
         | 
| 55 | 
            +
                    :characteristics => events
         | 
| 43 56 | 
             
                  }
         | 
| 44 57 |  | 
| 45 58 | 
             
                  put("/characteristics", "application/hap+json", JSON.generate(data))
         | 
| 46 | 
            -
                end
         | 
| 47 59 |  | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                    service.each do |val|
         | 
| 51 | 
            -
                      if val[:perms].include?("ev")
         | 
| 52 | 
            -
                        subscribe(val[:aid], val[:iid])
         | 
| 53 | 
            -
                      end
         | 
| 54 | 
            -
                    end
         | 
| 60 | 
            +
                  if block_given?
         | 
| 61 | 
            +
                    @callback = block
         | 
| 55 62 | 
             
                  end
         | 
| 56 63 | 
             
                end
         | 
| 57 64 |  | 
| @@ -64,6 +71,27 @@ module HAP | |
| 64 71 | 
             
                  end
         | 
| 65 72 | 
             
                end
         | 
| 66 73 |  | 
| 74 | 
            +
                def get_value(aid, iid)
         | 
| 75 | 
            +
                  @values[aid][iid][:value]
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                def get_type(aid, iid)
         | 
| 79 | 
            +
                  @ids[aid][iid]
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                def get_id(service_id, characteristic_id)
         | 
| 83 | 
            +
                  @services.each do |service|
         | 
| 84 | 
            +
                    if service[:type] == service_id
         | 
| 85 | 
            +
                      service[:characteristics].each do |char|
         | 
| 86 | 
            +
                        if char[:type] == characteristic_id
         | 
| 87 | 
            +
                          return char
         | 
| 88 | 
            +
                        end
         | 
| 89 | 
            +
                      end
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
                  return nil
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
             | 
| 67 95 | 
             
                def to_s
         | 
| 68 96 | 
             
                  @name
         | 
| 69 97 | 
             
                end
         | 
| @@ -71,6 +99,8 @@ module HAP | |
| 71 99 | 
             
                private
         | 
| 72 100 |  | 
| 73 101 | 
             
                def parse_message(data)
         | 
| 102 | 
            +
                  @res_queue.push(1)
         | 
| 103 | 
            +
             | 
| 74 104 | 
             
                  case @mode
         | 
| 75 105 | 
             
                  when :pair_setup
         | 
| 76 106 | 
             
                    pair_setup_parse(data)
         | 
| @@ -90,19 +120,38 @@ module HAP | |
| 90 120 | 
             
                end
         | 
| 91 121 |  | 
| 92 122 | 
             
                def parse_accessories(data)
         | 
| 93 | 
            -
                   | 
| 123 | 
            +
                  begin
         | 
| 124 | 
            +
                    data = JSON.parse(data, :symbolize_names=>true)
         | 
| 125 | 
            +
                  rescue JSON::ParserError => e
         | 
| 126 | 
            +
                    error(e.inspect)
         | 
| 127 | 
            +
                    error(data)
         | 
| 128 | 
            +
                    return nil
         | 
| 129 | 
            +
                  end
         | 
| 94 130 |  | 
| 95 | 
            -
                   | 
| 131 | 
            +
                  if data[:accessories]
         | 
| 132 | 
            +
                    @services = data[:accessories][0][:services]
         | 
| 96 133 |  | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 134 | 
            +
                    @services.each do |service|
         | 
| 135 | 
            +
                      @values[service[:type]] = {}
         | 
| 136 | 
            +
                      @ids[service[:iid]] = {}
         | 
| 99 137 |  | 
| 100 | 
            -
             | 
| 138 | 
            +
                      parse_characteristics(service)
         | 
| 139 | 
            +
                    end
         | 
| 140 | 
            +
                  elsif data[:characteristics]
         | 
| 141 | 
            +
                    parse_event(data)
         | 
| 142 | 
            +
                    init_parser
         | 
| 101 143 | 
             
                  end
         | 
| 102 144 |  | 
| 103 145 | 
             
                  return data
         | 
| 104 146 | 
             
                end
         | 
| 105 147 |  | 
| 148 | 
            +
                def parse_event(data)
         | 
| 149 | 
            +
                  val = data[:characteristics]
         | 
| 150 | 
            +
                  val.each do |value|
         | 
| 151 | 
            +
                    on_event(value[:aid], value[:iid], value[:value])
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
             | 
| 106 155 | 
             
                def parse_characteristics(service)
         | 
| 107 156 | 
             
                  service[:characteristics].each do |char|
         | 
| 108 157 | 
             
                    val = char[:value]
         | 
| @@ -110,9 +159,13 @@ module HAP | |
| 110 159 | 
             
                    @values[service[:type]][char[:type]] = {
         | 
| 111 160 | 
             
                      :aid => char[:aid],
         | 
| 112 161 | 
             
                      :iid => char[:iid],
         | 
| 113 | 
            -
                      :perms => char[:perms | 
| 162 | 
            +
                      :perms => char[:perms],
         | 
| 114 163 | 
             
                      :value => val
         | 
| 115 164 | 
             
                    }
         | 
| 165 | 
            +
                    @ids[char[:aid]][char[:iid]] = {
         | 
| 166 | 
            +
                      :service => service[:type],
         | 
| 167 | 
            +
                      :characteristic => char[:type]
         | 
| 168 | 
            +
                    }
         | 
| 116 169 |  | 
| 117 170 | 
             
                    if service[:type] == "3E"
         | 
| 118 171 | 
             
                      case char[:type]
         |