Class: Tamashii::Agent::CardReader

Inherits:
Component
  • Object
show all
Defined in:
lib/tamashii/agent/card_reader.rb

Constant Summary collapse

ERROR_RESET_TIMER =
5

Instance Method Summary collapse

Methods inherited from Component

#check_new_event, #display_name, #get_device_instance, #handle_new_event, #initialize_device, #load_default_device, #restart_current_component_async, #run, #run!, #run_worker_loop, #send_event, #stop, #stop_threads

Methods included from Tamashii::Agent::Common::Loggable

#display_name, #logger, #progname

Constructor Details

#initialize(name, master, options = {}) ⇒ CardReader

Returns a new instance of CardReader.



12
13
14
15
# File 'lib/tamashii/agent/card_reader.rb', line 12

def initialize(name, master, options = {})
  super
  @reader = initialize_device
end

Instance Method Details

#clean_upObject



80
81
82
83
# File 'lib/tamashii/agent/card_reader.rb', line 80

def clean_up
  super
  @reader.shutdown
end

#default_device_nameObject



17
18
19
# File 'lib/tamashii/agent/card_reader.rb', line 17

def default_device_name
  'Dummy'
end

#get_device_class_name(device_name) ⇒ Object



21
22
23
# File 'lib/tamashii/agent/card_reader.rb', line 21

def get_device_class_name(device_name)
  "CardReader::#{device_name}"
end

#handle_cardObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/tamashii/agent/card_reader.rb', line 55

def handle_card
  uid = @reader.poll_uid
  case uid
  when nil
    return false
  when :error
    set_error_timer
    return false
  else
    process_uid(uid)
    reset_error_timer
    return true
  end
end

#process_event(event) ⇒ Object

override



76
77
78
# File 'lib/tamashii/agent/card_reader.rb', line 76

def process_event(event)
  # silent is gold
end

#process_uid(uid) ⇒ Object



70
71
72
73
# File 'lib/tamashii/agent/card_reader.rb', line 70

def process_uid(uid)
  logger.info "New card detected, UID: #{uid}"
  @master.send_event(Event.new(Event::CARD_DATA, uid.join('-')))
end

#reset_error_timerObject



25
26
27
28
29
30
# File 'lib/tamashii/agent/card_reader.rb', line 25

def reset_error_timer
  return unless @error_timer_task
  @error_timer_task.cancel
  @error_timer_task = nil
  logger.info "Error timer is reset"
end

#set_error_timerObject



32
33
34
35
36
# File 'lib/tamashii/agent/card_reader.rb', line 32

def set_error_timer
  return if @error_timer_task && !@error_timer_task.unscheduled?
  logger.info "Error timer is set"
  @error_timer_task = Concurrent::ScheduledTask.execute(ERROR_RESET_TIMER) { restart_current_component_async }
end

#worker_loopObject

override



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/tamashii/agent/card_reader.rb', line 39

def worker_loop
  loop do
    if !handle_new_event(true)
      # no event available
      sleep 0.1
    end
    if handle_card
      # card is sent, sleep to prevent duplicate sent
      sleep 1.0
    else
      # no card available
      sleep 0.1
    end
  end
end