Sha256: 8444cdc279170832ea387c012d2dd1d86cd678df593cecc5ec7eca10e6046377

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

require 'rack'
require 'socket'

module AirPlayer
  class Server
    attr_reader :uri

    def initialize(video_path)
      @server = Rack::Server.new(:server => :webrick, :Host => local_ip, :Port => 7070)
      @server.instance_variable_set(:@app, Rack::File.new(video_path))
      @uri  = "http://#{@server.options[:Host]}:#{@server.options[:Port]}"
    end

    def start
      # Output WEBrick access log to file
      $stderr = File.open(Logger.path, File::WRONLY | File::APPEND | File::CREAT)
      @server.start
      $stderr = STDERR
    end

    def stop
      @server.server.shutdown
    end

    private
      # networking - Getting the Hostname or IP in Ruby on Rails - Stack Overflow
      #   http://stackoverflow.com/questions/42566/getting-the-hostname-or-ip-in-ruby-on-rails
      def local_ip
        # turn off reverse DNS resolution temporarily
        orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true

        UDPSocket.open do |s|
          s.connect('8.8.8.8', 1)
          s.addr.last
        end
      ensure
        Socket.do_not_reverse_lookup = orig
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
airplayer-0.0.5 lib/airplayer/server.rb
airplayer-0.0.4 lib/airplayer/server.rb
airplayer-0.0.3 lib/airplayer/server.rb