Sha256: 89bb5723cc19c208b87cf5797ce11aa1d7147c8499eb90c9749018baac9db53a

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 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 unless @online
        @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

1 entries across 1 versions & 1 rubygems

Version Path
bowline-0.6.2 lib/bowline/desktop/network.rb