Class: Presence::Tracker

Inherits:
Object
  • Object
show all
Defined in:
lib/presence/listeners/tracker.rb

Overview

Scanner listener that tracks all MACs found by the scanner. This listener is intended to be used when scanning in a loop. The tracker will maintain a list of MAC addresses on the network and detect when a new client connects or when a connected client disconnects.

Instance Method Summary collapse

Constructor Details

#initializeTracker

Returns a new instance of Tracker.



10
11
12
13
# File 'lib/presence/listeners/tracker.rb', line 10

def initialize
  @mac_history = {}
  @current_list = Presence::MACList.new
end

Instance Method Details

#listener_registered(l, scanner) ⇒ Object



15
16
17
# File 'lib/presence/listeners/tracker.rb', line 15

def listener_registered(l, scanner)
  scanner.register_listener(@current_list) if l == self
end

#mac_changed(mac, old_ip, new_ip) ⇒ Object



43
44
45
46
# File 'lib/presence/listeners/tracker.rb', line 43

def mac_changed(mac, old_ip, new_ip)
  puts " ** #{mac} changed ip from: #{old_ip} to #{new_ip}"
  # Do something interesting.
end

#mac_connected(mac, ip) ⇒ Object



38
39
40
41
# File 'lib/presence/listeners/tracker.rb', line 38

def mac_connected(mac, ip)
  puts " ** #{mac} connected as #{ip}"
  # Do something interesting.
end

#mac_disconnected(mac, old_ip) ⇒ Object



48
49
50
51
# File 'lib/presence/listeners/tracker.rb', line 48

def mac_disconnected(mac, old_ip)
  puts " ** #{mac} disconnected from #{old_ip}"
  # Do something interesting.
end

#mac_found(ip, mac) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/presence/listeners/tracker.rb', line 19

def mac_found(ip, mac)
  if @mac_history[mac].nil?
    mac_connected(mac, ip)
  elsif @mac_history[mac] != ip
    mac_changed(mac, @mac_history[mac], ip)
  end
  @mac_history[mac] = ip
end

#scan_finished(ip_prefix, range) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/presence/listeners/tracker.rb', line 28

def scan_finished(ip_prefix, range)
  macs_left = @mac_history.keys - @current_list.macs_found.keys
  macs_left.each do |mac|
    old_ip = @mac_history[mac]
    mac_disconnected(mac, old_ip)
    @mac_history.delete(mac)
  end
  @current_list.macs_found.clear
end