tamashii-agent 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/exe/tamashii-agent +7 -5
  3. data/lib/tamashii/agent/buzzer.rb +11 -5
  4. data/lib/tamashii/agent/card_reader.rb +21 -21
  5. data/lib/tamashii/agent/common.rb +25 -0
  6. data/lib/tamashii/agent/component.rb +38 -3
  7. data/lib/tamashii/agent/config.rb +13 -2
  8. data/lib/tamashii/agent/device/buzzer/base.rb +26 -0
  9. data/lib/tamashii/agent/device/buzzer/dummy.rb +32 -0
  10. data/lib/tamashii/agent/device/buzzer/gpio_buzzer.rb +89 -0
  11. data/lib/tamashii/agent/device/card_reader/base.rb +16 -0
  12. data/lib/tamashii/agent/device/card_reader/dummy.rb +37 -0
  13. data/lib/tamashii/agent/device/card_reader/mfrc522_spi.rb +43 -0
  14. data/lib/tamashii/agent/device/card_reader/pn532_uart.rb +52 -0
  15. data/lib/tamashii/agent/device/device_base.rb +20 -0
  16. data/lib/tamashii/agent/device/lcd/base.rb +29 -0
  17. data/lib/tamashii/agent/device/lcd/dummy.rb +30 -0
  18. data/lib/tamashii/agent/device/lcd/lcm1602_i2c.rb +133 -0
  19. data/lib/tamashii/agent/handler/base.rb +2 -2
  20. data/lib/tamashii/agent/handler/lcd.rb +1 -1
  21. data/lib/tamashii/agent/handler/remote_response.rb +1 -1
  22. data/lib/tamashii/agent/lcd.rb +14 -16
  23. data/lib/tamashii/agent/master.rb +20 -22
  24. data/lib/tamashii/agent/{connection.rb → networking.rb} +5 -6
  25. data/lib/tamashii/agent/{connection → networking}/request_observer.rb +5 -5
  26. data/lib/tamashii/agent/version.rb +1 -1
  27. data/tamashii-agent.gemspec +4 -3
  28. metadata +32 -16
  29. data/lib/tamashii/agent/adapter/base.rb +0 -28
  30. data/lib/tamashii/agent/adapter/buzzer.rb +0 -21
  31. data/lib/tamashii/agent/adapter/card_reader.rb +0 -20
  32. data/lib/tamashii/agent/adapter/lcd.rb +0 -22
  33. data/lib/tamashii/agent/device/fake_buzzer.rb +0 -30
  34. data/lib/tamashii/agent/device/fake_card_reader.rb +0 -40
  35. data/lib/tamashii/agent/device/fake_lcd.rb +0 -31
  36. data/lib/tamashii/agent/device/lcd.rb +0 -91
  37. data/lib/tamashii/agent/device/pi_buzzer.rb +0 -70
@@ -1,5 +1,5 @@
1
1
  require 'tamashii/agent/common'
2
- require 'tamashii/agent/connection'
2
+ require 'tamashii/agent/networking'
3
3
  require 'tamashii/agent/lcd'
4
4
  require 'tamashii/agent/buzzer'
5
5
  require 'tamashii/agent/card_reader'
@@ -12,13 +12,10 @@ module Tamashii
12
12
  class Master < Component
13
13
 
14
14
  attr_reader :serial_number
15
- attr_reader :host, :port
16
15
 
17
- def initialize(host, port)
18
- super(self)
16
+ def initialize
17
+ super(:master, self)
19
18
  logger.info "Starting Tamashii::Agent #{Tamashii::Agent::VERSION} in #{Config.env} mode"
20
- @host = host
21
- @port = port
22
19
  @serial_number = get_serial_number
23
20
  logger.info "Serial number: #{@serial_number}"
24
21
  create_components
@@ -43,30 +40,30 @@ module Tamashii
43
40
 
44
41
  def create_components
45
42
  @components = {}
46
- create_component(Connection, self)
47
- create_component(Buzzer, self)
48
- create_component(LCD, self)
49
- create_component(CardReader, self)
43
+ Config.components.each do |name, params|
44
+ create_component(name, params)
45
+ end
50
46
  end
51
47
 
52
- def create_component(class_name, *args)
53
- c = class_name.new(*args)
54
- logger.info "Starting component: #{class_name}"
48
+ def create_component(name, params)
49
+ klass = Agent.const_get(params[:class_name])
50
+ logger.info "Starting component #{name}:#{klass}"
51
+ c = klass.new(name, self, params[:options])
52
+ c.instance_eval(&params[:block]) if params[:block]
55
53
  yield c if block_given?
56
54
  c.run
57
- @components[class_name] = c
58
-
59
- c
55
+ @components[name] = c
60
56
  end
61
57
 
62
- def restart_component(class_name)
63
- if old_component = @components[class_name]
64
- logger.info "Stopping component: #{class_name}"
58
+ def restart_component(name)
59
+ if old_component = @components[name]
60
+ params = Config.components[name]
61
+ logger.info "Stopping component: #{name}"
65
62
  old_component.stop # TODO: set timeout for stopping?
66
- logger.info "Restarting component: #{class_name}"
67
- create_component(class_name, self)
63
+ logger.info "Restarting component: #{name}"
64
+ create_component(name, params)
68
65
  else
69
- logger.error "Rstart component failed: unknown component #{name}"
66
+ logger.error "Restart component failed: unknown component #{name}"
70
67
  end
71
68
  end
72
69
 
@@ -129,6 +126,7 @@ module Tamashii
129
126
  @components.each_value do |c|
130
127
  c.stop
131
128
  end
129
+ logger.info "Master stopped"
132
130
  end
133
131
 
134
132
 
@@ -14,9 +14,9 @@ require 'tamashii/client'
14
14
 
15
15
  module Tamashii
16
16
  module Agent
17
- class Connection < Component
17
+ class Networking < Component
18
18
 
19
- autoload :RequestObserver, 'tamashii/agent/connection/request_observer'
19
+ autoload :RequestObserver, 'tamashii/agent/networking/request_observer'
20
20
 
21
21
  class RequestTimeoutError < RuntimeError; end
22
22
 
@@ -43,7 +43,7 @@ module Tamashii
43
43
  attr_reader :url
44
44
  attr_reader :master
45
45
 
46
- def initialize(master)
46
+ def initialize(name, master, options = {})
47
47
  super
48
48
 
49
49
  self.reset
@@ -59,13 +59,13 @@ module Tamashii
59
59
  end
60
60
 
61
61
  def setup_resolver
62
- env_data = {connection: self}
62
+ env_data = {networking: self, master: @master}
63
63
  Resolver.config do
64
64
  [Type::REBOOT, Type::POWEROFF, Type::RESTART, Type::UPDATE].each do |type|
65
65
  handle type, Handler::System, env_data
66
66
  end
67
67
  [Type::LCD_MESSAGE, Type::LCD_SET_IDLE_TEXT].each do |type|
68
- handle type, Handler::LCD, env_data
68
+ handle type, Handler::Lcd, env_data
69
69
  end
70
70
  handle Type::BUZZER_SOUND, Handler::Buzzer, env_data
71
71
  handle Type::RFID_RESPONSE_JSON, Handler::RemoteResponse, env_data
@@ -101,7 +101,6 @@ module Tamashii
101
101
  @client.close
102
102
  end
103
103
 
104
-
105
104
  def send_auth_request
106
105
  # TODO: other types of auth
107
106
  if @client.transmit(Packet.new(Type::AUTH_TOKEN, 0, [Type::CLIENT[:agent], @master.serial_number,Config.token].join(",")).dump)
@@ -2,12 +2,12 @@ require 'tamashii/common'
2
2
 
3
3
  module Tamashii
4
4
  module Agent
5
- class Connection
5
+ class Networking
6
6
  class RequestObserver
7
7
 
8
8
  include Common::Loggable
9
- def initialize(connection, id, ev_type, ev_body, future)
10
- @connection = connection
9
+ def initialize(networking, id, ev_type, ev_body, future)
10
+ @networking = networking
11
11
  @id = id
12
12
  @ev_type = ev_type
13
13
  @ev_body = ev_body
@@ -21,13 +21,13 @@ module Tamashii
21
21
  case res_ev_type
22
22
  when Type::RFID_RESPONSE_JSON
23
23
  logger.debug "Handled: #{res_ev_type}: #{res_ev_body}"
24
- @connection.handle_card_result(JSON.parse(res_ev_body))
24
+ @networking.handle_card_result(JSON.parse(res_ev_body))
25
25
  else
26
26
  logger.warn "Unhandled packet result: #{res_ev_type}: #{res_ev_body}"
27
27
  end
28
28
  else
29
29
  logger.error "#{@id} Failed with #{reason}"
30
- @connection.on_request_timeout(@ev_type, @ev_body)
30
+ @networking.on_request_timeout(@ev_type, @ev_body)
31
31
  end
32
32
  end
33
33
  end
@@ -1,5 +1,5 @@
1
1
  module Tamashii
2
2
  module Agent
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.1"
4
4
  end
5
5
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{The agent module for RubyConfTW checkin system.}
13
13
  spec.description = %q{The agent module for RubyConfTW checkin system.}
14
- spec.homepage = "https://github.com/5xruby/tamashii-agent"
14
+ spec.homepage = "https://github.com/tamashii-io/tamashii-agent"
15
15
 
16
16
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
17
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -40,11 +40,12 @@ Gem::Specification.new do |spec|
40
40
 
41
41
 
42
42
  spec.add_runtime_dependency "tamashii-common", ">=0.1.6"
43
- spec.add_runtime_dependency "tamashii-client"
43
+ spec.add_runtime_dependency "tamashii-client", ">=0.1.2"
44
44
  spec.add_runtime_dependency "websocket-driver"
45
45
  spec.add_runtime_dependency "nio4r"
46
46
  spec.add_runtime_dependency "pi_piper"
47
- spec.add_runtime_dependency "tamashii-mfrc522"
47
+ spec.add_runtime_dependency "tamashii-mfrc522", ">=1.0.8"
48
+ spec.add_runtime_dependency "tamashii-nfc"
48
49
  spec.add_runtime_dependency "i2c"
49
50
  spec.add_runtime_dependency "aasm"
50
51
  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.3.0
4
+ version: 0.3.1
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-09-07 00:00:00.000000000 Z
13
+ date: 2017-09-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -144,14 +144,14 @@ dependencies:
144
144
  requirements:
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: '0'
147
+ version: 0.1.2
148
148
  type: :runtime
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
152
  - - ">="
153
153
  - !ruby/object:Gem::Version
154
- version: '0'
154
+ version: 0.1.2
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: websocket-driver
157
157
  requirement: !ruby/object:Gem::Requirement
@@ -196,6 +196,20 @@ dependencies:
196
196
  version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
198
  name: tamashii-mfrc522
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: 1.0.8
204
+ type: :runtime
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: 1.0.8
211
+ - !ruby/object:Gem::Dependency
212
+ name: tamashii-nfc
199
213
  requirement: !ruby/object:Gem::Requirement
200
214
  requirements:
201
215
  - - ">="
@@ -272,23 +286,23 @@ files:
272
286
  - bin/setup
273
287
  - exe/tamashii-agent
274
288
  - lib/tamashii/agent.rb
275
- - lib/tamashii/agent/adapter/base.rb
276
- - lib/tamashii/agent/adapter/buzzer.rb
277
- - lib/tamashii/agent/adapter/card_reader.rb
278
- - lib/tamashii/agent/adapter/lcd.rb
279
289
  - lib/tamashii/agent/buzzer.rb
280
290
  - lib/tamashii/agent/card_reader.rb
281
291
  - lib/tamashii/agent/common.rb
282
292
  - lib/tamashii/agent/common/loggable.rb
283
293
  - lib/tamashii/agent/component.rb
284
294
  - lib/tamashii/agent/config.rb
285
- - lib/tamashii/agent/connection.rb
286
- - lib/tamashii/agent/connection/request_observer.rb
287
- - lib/tamashii/agent/device/fake_buzzer.rb
288
- - lib/tamashii/agent/device/fake_card_reader.rb
289
- - lib/tamashii/agent/device/fake_lcd.rb
290
- - lib/tamashii/agent/device/lcd.rb
291
- - lib/tamashii/agent/device/pi_buzzer.rb
295
+ - lib/tamashii/agent/device/buzzer/base.rb
296
+ - lib/tamashii/agent/device/buzzer/dummy.rb
297
+ - lib/tamashii/agent/device/buzzer/gpio_buzzer.rb
298
+ - lib/tamashii/agent/device/card_reader/base.rb
299
+ - lib/tamashii/agent/device/card_reader/dummy.rb
300
+ - lib/tamashii/agent/device/card_reader/mfrc522_spi.rb
301
+ - lib/tamashii/agent/device/card_reader/pn532_uart.rb
302
+ - lib/tamashii/agent/device/device_base.rb
303
+ - lib/tamashii/agent/device/lcd/base.rb
304
+ - lib/tamashii/agent/device/lcd/dummy.rb
305
+ - lib/tamashii/agent/device/lcd/lcm1602_i2c.rb
292
306
  - lib/tamashii/agent/event.rb
293
307
  - lib/tamashii/agent/handler.rb
294
308
  - lib/tamashii/agent/handler/base.rb
@@ -298,9 +312,11 @@ files:
298
312
  - lib/tamashii/agent/handler/system.rb
299
313
  - lib/tamashii/agent/lcd.rb
300
314
  - lib/tamashii/agent/master.rb
315
+ - lib/tamashii/agent/networking.rb
316
+ - lib/tamashii/agent/networking/request_observer.rb
301
317
  - lib/tamashii/agent/version.rb
302
318
  - tamashii-agent.gemspec
303
- homepage: https://github.com/5xruby/tamashii-agent
319
+ homepage: https://github.com/tamashii-io/tamashii-agent
304
320
  licenses: []
305
321
  metadata: {}
306
322
  post_install_message:
@@ -1,28 +0,0 @@
1
- require 'tamashii/common'
2
- require 'tamashii/agent/config'
3
-
4
- module Tamashii
5
- module Agent
6
- module Adapter
7
- class Base
8
- class << self
9
- def object(*args, &block)
10
- current_class.new(*args, &block)
11
- end
12
-
13
- def current_class
14
- Config.env == "test" ? fake_class : real_class
15
- end
16
-
17
- def real_class
18
- raise NotImplementedError
19
- end
20
-
21
- def fake_class
22
- raise NotImplementedError
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,21 +0,0 @@
1
- require 'tamashii/agent/adapter/base'
2
- require 'tamashii/agent/device/pi_buzzer'
3
- require 'tamashii/agent/device/fake_buzzer'
4
-
5
- module Tamashii
6
- module Agent
7
- module Adapter
8
- class Buzzer < Base
9
- class << self
10
- def real_class
11
- Device::PIBuzzer
12
- end
13
-
14
- def fake_class
15
- Device::FakeBuzzer
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,20 +0,0 @@
1
- require 'tamashii/agent/adapter/base'
2
- require 'tamashii/agent/device/fake_card_reader'
3
-
4
- module Tamashii
5
- module Agent
6
- module Adapter
7
- class CardReader < Base
8
- class << self
9
- def real_class
10
- MFRC522
11
- end
12
-
13
- def fake_class
14
- Device::FakeCardReader
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,22 +0,0 @@
1
- require 'tamashii/agent/adapter/base'
2
- require 'tamashii/agent/device/lcd'
3
- require 'tamashii/agent/device/fake_lcd'
4
-
5
- module Tamashii
6
- module Agent
7
- module Adapter
8
- # :nodoc:
9
- class LCD < Base
10
- class << self
11
- def real_class
12
- Device::LCD
13
- end
14
-
15
- def fake_class
16
- Device::FakeLCD
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- require 'tamashii/agent/common'
2
- module Tamashii
3
- module Agent
4
- module Device
5
- class FakeBuzzer
6
- include Common::Loggable
7
-
8
- def initialize
9
- logger.debug "Initialized"
10
- end
11
-
12
- def play_ok
13
- logger.debug "Played: OK"
14
- end
15
-
16
- def play_no
17
- logger.debug "Played: No"
18
- end
19
-
20
- def play_error
21
- logger.debug "Played: Error"
22
- end
23
-
24
- def stop
25
- logger.debug "Stopped"
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,40 +0,0 @@
1
- require 'tamashii/agent/common'
2
- module Tamashii
3
- module Agent
4
- module Device
5
- class FakeCardReader
6
- include Common::Loggable
7
-
8
- def initialize(*args)
9
- logger.debug "Initialized"
10
- @last_time = Time.now
11
- end
12
-
13
- def picc_request(*args)
14
- if Time.now - @last_time > 2
15
- @last_time = Time.now
16
- if rand > 0.5
17
- logger.debug "Fake Card Generated"
18
- return true
19
- else
20
- return false
21
- end
22
- else
23
- return false
24
- end
25
- end
26
-
27
- def picc_select(*args)
28
- [Array.new(4){ rand(256)}, "sak"]
29
- end
30
-
31
- def picc_halt(*args)
32
- end
33
-
34
- def shutdown(*args)
35
- end
36
- end
37
- end
38
- end
39
- end
40
-