Class: Tamashii::Agent::CardReader
Constant Summary
collapse
- ERROR_RESET_TIMER =
5
Instance Method Summary
collapse
Methods inherited from Component
#check_new_event, #handle_new_event, #restart_current_component_async, #run, #run!, #run_worker_loop, #send_event, #stop, #stop_threads
#logger, #progname
Constructor Details
#initialize(master) ⇒ CardReader
Returns a new instance of CardReader.
15
16
17
18
19
|
# File 'lib/tamashii/agent/card_reader.rb', line 15
def initialize(master)
super
@reader = Adapter::CardReader.object
logger.debug "Using card_reader instance: #{@reader.class}"
end
|
Instance Method Details
#clean_up ⇒ Object
80
81
82
83
|
# File 'lib/tamashii/agent/card_reader.rb', line 80
def clean_up
super
@reader.shutdown
end
|
#handle_card ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/tamashii/agent/card_reader.rb', line 51
def handle_card
return false unless @reader.picc_request(MFRC522::PICC_REQA)
begin
uid, sak = @reader.picc_select
process_uid(uid.join("-"))
reset_error_timer
rescue CommunicationError, UnexpectedDataError => e
logger.error "Error when selecting card: #{e.message}"
set_error_timer
rescue => e
logger.error "GemError when selecting card: #{e.message}"
set_error_timer
end
@reader.picc_halt
true
end
|
#process_event(event) ⇒ Object
76
77
78
|
# File 'lib/tamashii/agent/card_reader.rb', line 76
def process_event(event)
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))
end
|
#reset_error_timer ⇒ Object
21
22
23
24
25
26
|
# File 'lib/tamashii/agent/card_reader.rb', line 21
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_timer ⇒ Object
28
29
30
31
32
|
# File 'lib/tamashii/agent/card_reader.rb', line 28
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_loop ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/tamashii/agent/card_reader.rb', line 35
def worker_loop
loop do
if !handle_new_event(true)
sleep 0.1
end
if handle_card
sleep 1.0
else
sleep 0.1
end
end
end
|