#!/usr/bin/env ruby

#------ PhidgetBrowser.rb: PhidgetでWeb閲覧 ---------------#
#------------------- By Koji Tsukada 2005/11 --------------#

require "socket"

module PhidgetApplication
  class PhidgetBrowser
    LEVEL_MAX = 1024
  
    def initialize(ip = "127.0.0.1", port = 4321, sleep_time = 0)
      main(ip, port, sleep_time)
    end
  
    def main(ip, port, sleep_time)
      url_list = load_url
      socket = TCPSocket.new(ip, port)
      while line = socket.gets
        level = parse(line.chomp)
        if(level != nil)
          p level.to_s
          if sleep_time == 0 
            set_url(url_list, level)
          else
            set_url_with_sleep(url_list, level, sleep_time)
          end
        end
      end
      socket.close
    end

    def load_url(file = "url.txt")
      urls = Array.new
      File.open(file) do |f|
        f.each do |line|
          if(line !~ /^#/)
            urls.push(line.chomp!)
            p line
          end
        end
      end
      urls
    end
    
    def parse(line)
      args = line.split(",")
      if args[0] == "In" and
         args[1] == "InterfaceKit" and
         args[2] == "Analog"
        case args[3]
          when "0"
            level = args[4].to_i
        end
      end
      level
    end

    def set_url(url_list, level)
      num = (level / (LEVEL_MAX / url_list.length)).to_i
      if num != @num_pre
        p url_list[num].to_s
        system "cygstart #{url_list[num]}"
        @num_pre = num
      end
    end
    
    def set_url_with_sleep(url_list, level, sleep_time = 1)
      @num = (level / (LEVEL_MAX / url_list.length)).to_i
      p @num.to_s
      if @num != @num_pre && !@sleeping
        Thread.start do
          @sleeping = true
          sleep(sleep_time)
          p url_list[@num].to_s
          system "cygstart #{url_list[@num]}"
          @sleeping = false
        end
      end
      @num_pre = @num
    end
  end
   
  #############################################
  #プログラム開始
  #############################################
  case ARGV.length
    when 0:
      puts "Usage: PhidgetBrowser [ip] [port] [sleep_time]"
      PhidgetBrowser.new()
    # when 1:
    #  PhidgetBrowser.new("127.0.0.1", 4321, ARGV[0].to_i)  
    when 2:
      PhidgetBrowser.new(ARGV[0],ARGV[1].to_i)
    when 3:
      PhidgetBrowser.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i)
    else
      puts "Usage: PhidgetBrowser [ip] [port] [sleep_time]"
      exit(0)
  end  
end
