Sha256: b5d750505796f3bdf6bb52a37440ee01b535b56101a249f53654961cdd9db4ad

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

require "socket"
require "timeout"

module Bowline
  module Desktop
    module Network
      extend Bowline::Watcher::Base
      watch :on_online, :on_offline, :on_change
      
      def online!
        return if @online
        @online = true
        watcher.call(:on_online)
        watcher.call(:on_change)
      end
      
      def offline!
        return if @online == false
        @online = false
        watcher.call(:on_offline)
        watcher.call(:on_change)
      end
      
      def online?
        @online
      end
      
      def host
        @host ||= "google.com"
      end
      
      def host=(host)
        @host = host
      end
      
      def port
        @port ||= 80
      end
      
      def port=(port)
        @port = port
      end
      
      def poll!
        Thread.new do
          loop do
            ping ? online! : offline!
            sleep 30
          end
        end
      end
            
      private
            
        def ping
          Timeout::timeout(3) {
            TCPSocket.new(host, port).close
          }
          true
        rescue Errno::ECONNREFUSED, Timeout::Error, StandardError
          false
        end
      
      extend self
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bowline-0.9.4 lib/bowline/desktop/network.rb
bowline-0.9.3 lib/bowline/desktop/network.rb
bowline-0.9.2 lib/bowline/desktop/network.rb
bowline-0.9.1 lib/bowline/desktop/network.rb
bowline-0.6.3 lib/bowline/desktop/network.rb