tamashii-agent 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tamashii/agent/buzzer.rb +1 -1
- data/lib/tamashii/agent/card_reader.rb +26 -2
- data/lib/tamashii/agent/component.rb +6 -1
- data/lib/tamashii/agent/connection.rb +21 -12
- data/lib/tamashii/agent/device/fake_card_reader.rb +3 -0
- data/lib/tamashii/agent/event.rb +3 -0
- data/lib/tamashii/agent/lcd.rb +1 -1
- data/lib/tamashii/agent/master.rb +22 -5
- data/lib/tamashii/agent/version.rb +1 -1
- data/tamashii-agent.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08de7a4e07004aa1fc2e0c3296d87c702fcb2e94'
|
4
|
+
data.tar.gz: bb089239efddb15e7f105042dbe972baa83b213e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44930b14acf4795f00ed470ebd5053b6a037b376645918dfc6343a1d7160dbbf12482672c4e750c5ce5ef2b3ca45a7ed987ccf792fb18a6d6e8eca2d3191947e
|
7
|
+
data.tar.gz: 4abad42266ef5bf48f4f8a578af8e927c5492b36b03acef06e535411c3602cdee44842228fcadfbe94bca7c368784fc11e3d87cdc890c515716c590d5e52682a
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mfrc522'
|
2
|
+
require 'concurrent'
|
2
3
|
|
3
4
|
require 'tamashii/agent/component'
|
4
5
|
require 'tamashii/agent/event'
|
@@ -8,13 +9,28 @@ require 'tamashii/agent/adapter/card_reader'
|
|
8
9
|
module Tamashii
|
9
10
|
module Agent
|
10
11
|
class CardReader < Component
|
12
|
+
|
13
|
+
ERROR_RESET_TIMER = 5
|
14
|
+
|
11
15
|
def initialize(master)
|
12
|
-
super
|
13
|
-
@master = master
|
16
|
+
super
|
14
17
|
@reader = Adapter::CardReader.object
|
15
18
|
logger.debug "Using card_reader instance: #{@reader.class}"
|
16
19
|
end
|
17
20
|
|
21
|
+
def reset_error_timer
|
22
|
+
return unless @error_timer_task
|
23
|
+
@error_timer_task.cancel
|
24
|
+
@error_timer_task = nil
|
25
|
+
logger.info "Error timer is reset"
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_error_timer
|
29
|
+
return if @error_timer_task && !@error_timer_task.unscheduled?
|
30
|
+
logger.info "Error timer is set"
|
31
|
+
@error_timer_task = Concurrent::ScheduledTask.execute(ERROR_RESET_TIMER) { restart_current_component_async }
|
32
|
+
end
|
33
|
+
|
18
34
|
# override
|
19
35
|
def worker_loop
|
20
36
|
loop do
|
@@ -39,10 +55,13 @@ module Tamashii
|
|
39
55
|
begin
|
40
56
|
uid, sak = @reader.picc_select
|
41
57
|
process_uid(uid.join("-"))
|
58
|
+
reset_error_timer
|
42
59
|
rescue CommunicationError, UnexpectedDataError => e
|
43
60
|
logger.error "Error when selecting card: #{e.message}"
|
61
|
+
set_error_timer
|
44
62
|
rescue => e
|
45
63
|
logger.error "GemError when selecting card: #{e.message}"
|
64
|
+
set_error_timer
|
46
65
|
end
|
47
66
|
@reader.picc_halt
|
48
67
|
true
|
@@ -57,6 +76,11 @@ module Tamashii
|
|
57
76
|
def process_event(event)
|
58
77
|
# silent is gold
|
59
78
|
end
|
79
|
+
|
80
|
+
def clean_up
|
81
|
+
super
|
82
|
+
@reader.shutdown
|
83
|
+
end
|
60
84
|
end
|
61
85
|
end
|
62
86
|
end
|
@@ -7,7 +7,8 @@ module Tamashii
|
|
7
7
|
class Component
|
8
8
|
include Common::Loggable
|
9
9
|
|
10
|
-
def initialize
|
10
|
+
def initialize(master)
|
11
|
+
@master = master
|
11
12
|
@event_queue = Queue.new
|
12
13
|
end
|
13
14
|
|
@@ -28,6 +29,10 @@ module Tamashii
|
|
28
29
|
ev
|
29
30
|
end
|
30
31
|
|
32
|
+
def restart_current_component_async
|
33
|
+
@master.send_event(Event.new(Event::RESTART_COMPONENT, self.class))
|
34
|
+
end
|
35
|
+
|
31
36
|
def process_event(event)
|
32
37
|
logger.debug "Got event: #{event.type}, #{event.body}"
|
33
38
|
end
|
@@ -76,19 +76,19 @@ module Tamashii
|
|
76
76
|
attr_reader :url
|
77
77
|
attr_reader :master
|
78
78
|
|
79
|
-
def initialize(master
|
80
|
-
super
|
81
|
-
@
|
82
|
-
@
|
79
|
+
def initialize(master)
|
80
|
+
super
|
81
|
+
@host = @master.host
|
82
|
+
@port = @master.port
|
83
|
+
@url = "#{Config.use_ssl ? "wss" : "ws"}://#{@host}:#{@port}/#{Config.entry_point}"
|
83
84
|
self.reset
|
84
85
|
|
85
|
-
@host = host
|
86
|
-
@port = port
|
87
86
|
@tag = 0
|
88
87
|
|
89
88
|
@future_ivar_pool = Concurrent::Map.new
|
90
89
|
@driver_lock = Mutex.new
|
91
90
|
|
91
|
+
@last_error_report_time = Time.now
|
92
92
|
setup_resolver
|
93
93
|
end
|
94
94
|
|
@@ -218,6 +218,10 @@ module Tamashii
|
|
218
218
|
|
219
219
|
def try_create_socket
|
220
220
|
logger.info "try to open socket..."
|
221
|
+
if Time.now - @last_error_report_time > 5.0
|
222
|
+
@master.send_event(Event.new(Event::LCD_MESSAGE, "Initializing\nConnection..."))
|
223
|
+
@last_error_report_time = Time.now
|
224
|
+
end
|
221
225
|
if Config.use_ssl
|
222
226
|
OpenSSL::SSL::SSLSocket.new(TCPSocket.new(@host, @port)).connect
|
223
227
|
else
|
@@ -250,6 +254,7 @@ module Tamashii
|
|
250
254
|
self.auth_success
|
251
255
|
else
|
252
256
|
logger.error "Authentication failed. Delay for 3 seconds"
|
257
|
+
@master.send_event(Event.new(Event::LCD_MESSAGE, "Fatal Error\nAuth Failed"))
|
253
258
|
sleep 3
|
254
259
|
end
|
255
260
|
else
|
@@ -268,12 +273,16 @@ module Tamashii
|
|
268
273
|
def process_event(event)
|
269
274
|
case event.type
|
270
275
|
when Event::CARD_DATA
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
276
|
+
if self.ready?
|
277
|
+
id = event.body
|
278
|
+
wrapped_body = {
|
279
|
+
id: id,
|
280
|
+
ev_body: event.body
|
281
|
+
}.to_json
|
282
|
+
new_remote_request(id, Type::RFID_NUMBER, wrapped_body)
|
283
|
+
else
|
284
|
+
@master.send_event(Event.new(Event::CONNECTION_NOT_READY, "Connection not ready for #{event.type}:#{event.body}"))
|
285
|
+
end
|
277
286
|
end
|
278
287
|
end
|
279
288
|
|
data/lib/tamashii/agent/event.rb
CHANGED
data/lib/tamashii/agent/lcd.rb
CHANGED
@@ -12,9 +12,10 @@ module Tamashii
|
|
12
12
|
class Master < Component
|
13
13
|
|
14
14
|
attr_reader :serial_number
|
15
|
+
attr_reader :host, :port
|
15
16
|
|
16
17
|
def initialize(host, port)
|
17
|
-
super()
|
18
|
+
super(self)
|
18
19
|
logger.info "Starting Tamashii::Agent #{Tamashii::Agent::VERSION} in #{Config.env} mode"
|
19
20
|
@host = host
|
20
21
|
@port = port
|
@@ -42,10 +43,10 @@ module Tamashii
|
|
42
43
|
|
43
44
|
def create_components
|
44
45
|
@components = {}
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
create_component(Connection, self)
|
47
|
+
create_component(Buzzer, self)
|
48
|
+
create_component(LCD, self)
|
49
|
+
create_component(CardReader, self)
|
49
50
|
end
|
50
51
|
|
51
52
|
def create_component(class_name, *args)
|
@@ -53,9 +54,22 @@ module Tamashii
|
|
53
54
|
logger.info "Starting component: #{class_name}"
|
54
55
|
yield c if block_given?
|
55
56
|
c.run
|
57
|
+
@components[class_name] = c
|
58
|
+
|
56
59
|
c
|
57
60
|
end
|
58
61
|
|
62
|
+
def restart_component(class_name)
|
63
|
+
if old_component = @components[class_name]
|
64
|
+
logger.info "Stopping component: #{class_name}"
|
65
|
+
old_component.stop # TODO: set timeout for stopping?
|
66
|
+
logger.info "Restarting component: #{class_name}"
|
67
|
+
create_component(class_name, self)
|
68
|
+
else
|
69
|
+
logger.error "Rstart component failed: unknown component #{name}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
59
73
|
# override
|
60
74
|
def process_event(event)
|
61
75
|
super
|
@@ -74,6 +88,9 @@ module Tamashii
|
|
74
88
|
end
|
75
89
|
when Event::CONNECTION_NOT_READY
|
76
90
|
broadcast_event(Event.new(Event::BEEP, "error"))
|
91
|
+
broadcast_event(Event.new(Event::LCD_MESSAGE, "Fatal Error\nConnection Error"))
|
92
|
+
when Event::RESTART_COMPONENT
|
93
|
+
restart_component(event.body)
|
77
94
|
else
|
78
95
|
broadcast_event(event)
|
79
96
|
end
|
data/tamashii-agent.gemspec
CHANGED
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
spec.add_runtime_dependency "websocket-driver"
|
43
43
|
spec.add_runtime_dependency "nio4r"
|
44
44
|
spec.add_runtime_dependency "pi_piper"
|
45
|
-
spec.add_runtime_dependency "mfrc522"
|
45
|
+
spec.add_runtime_dependency "tamashii-mfrc522"
|
46
46
|
spec.add_runtime_dependency "i2c"
|
47
47
|
spec.add_runtime_dependency "aasm"
|
48
48
|
spec.add_runtime_dependency "concurrent-ruby"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tamashii-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 蒼時弦也
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-08-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -167,7 +167,7 @@ dependencies:
|
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
|
-
name: mfrc522
|
170
|
+
name: tamashii-mfrc522
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
173
|
- - ">="
|