procon_bypass_man 0.1.15 → 0.1.16

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/Gemfile.lock +24 -6
  4. data/README.md +8 -0
  5. data/lib/ext/em_pure_ruby.rb +25 -0
  6. data/lib/procon_bypass_man/background.rb +0 -1
  7. data/lib/procon_bypass_man/buttons_setting_configuration/layer.rb +2 -6
  8. data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +1 -1
  9. data/lib/procon_bypass_man/bypass.rb +13 -6
  10. data/lib/procon_bypass_man/commands/print_boot_message_command.rb +50 -1
  11. data/lib/procon_bypass_man/commands/print_message_command.rb +8 -0
  12. data/lib/procon_bypass_man/commands/run_remote_pbm_action_dispatch_command.rb +1 -1
  13. data/lib/procon_bypass_man/commands/send_reload_config_event_command.rb +1 -2
  14. data/lib/procon_bypass_man/commands.rb +1 -0
  15. data/lib/procon_bypass_man/configuration.rb +27 -0
  16. data/lib/procon_bypass_man/domains/binary/base.rb +11 -0
  17. data/lib/procon_bypass_man/domains/binary/has_immutable_binary.rb +5 -0
  18. data/lib/procon_bypass_man/domains/binary/has_mutable_binary.rb +5 -0
  19. data/lib/procon_bypass_man/domains/binary/inbound_procon_binary.rb +23 -0
  20. data/lib/procon_bypass_man/domains/binary/processing_procon_binary.rb +80 -0
  21. data/lib/procon_bypass_man/domains.rb +11 -0
  22. data/lib/procon_bypass_man/{plugin.rb → plugins.rb} +0 -0
  23. data/lib/procon_bypass_man/processor.rb +4 -5
  24. data/lib/procon_bypass_man/procon/button.rb +11 -0
  25. data/lib/procon_bypass_man/procon/button_collection.rb +2 -12
  26. data/lib/procon_bypass_man/procon/layer_changer.rb +3 -2
  27. data/lib/procon_bypass_man/procon/press_button_aware.rb +5 -4
  28. data/lib/procon_bypass_man/procon/user_operation.rb +46 -63
  29. data/lib/procon_bypass_man/procon/{analog_stick.rb → value_objects/analog_stick.rb} +3 -4
  30. data/lib/procon_bypass_man/procon/value_objects/procon_reader.rb +34 -0
  31. data/lib/procon_bypass_man/procon.rb +16 -14
  32. data/lib/procon_bypass_man/remote_pbm_action/{lib → commands}/update_remote_pbm_action_status_command.rb +0 -0
  33. data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +1 -1
  34. data/lib/procon_bypass_man/{value_objects → remote_pbm_action/value_objects}/remote_pbm_action_object.rb +0 -0
  35. data/lib/procon_bypass_man/remote_pbm_action.rb +1 -1
  36. data/lib/procon_bypass_man/runner.rb +3 -3
  37. data/lib/procon_bypass_man/scheduler.rb +0 -7
  38. data/lib/procon_bypass_man/version.rb +1 -1
  39. data/lib/procon_bypass_man/websocket/pbm_job_client.rb +79 -0
  40. data/lib/procon_bypass_man.rb +12 -6
  41. data/procon_bypass_man.gemspec +2 -0
  42. data/project_template/app.rb +1 -1
  43. data/sig/main.rbs +15 -1
  44. metadata +45 -10
  45. data/lib/procon_bypass_man/background/jobs/fetch_and_run_remote_pbm_action_job.rb +0 -29
  46. data/lib/procon_bypass_man/boot_message.rb +0 -48
  47. data/lib/procon_bypass_man/commands/run_local_shell_command.rb +0 -6
  48. data/lib/procon_bypass_man/procon_reader.rb +0 -31
@@ -1,77 +1,60 @@
1
- class ProconBypassMan::Procon
2
- class UserOperation
3
- attr_reader :binary
1
+ # ボタンを押しているか判断するクラス。バイナリの書き換えはしない
2
+ class ProconBypassMan::Procon::UserOperation
3
+ attr_reader :binary
4
4
 
5
- ::ProconBypassMan::Procon::ButtonCollection::BUTTONS_MAP.each do |button, _value|
6
- define_method "pressed_#{button}?" do
7
- pressed_button?(button)
8
- end
9
- end
5
+ ASCII_ENCODING = "ASCII-8BIT"
10
6
 
11
- def initialize(binary)
12
- unless binary.encoding.name == ASCII_ENCODING
13
- raise "おかしいです"
14
- end
15
- @binary = binary
7
+ # @param [String] binary
8
+ def initialize(binary)
9
+ unless binary.encoding.name == ASCII_ENCODING
10
+ raise "おかしいです"
16
11
  end
17
12
 
18
- ZERO_BIT = ["0"].pack("H*").freeze
19
- ASCII_ENCODING = "ASCII-8BIT"
20
-
21
- def set_no_action!
22
- binary[3] = ZERO_BIT
23
- binary[4] = ZERO_BIT
24
- binary[5] = ZERO_BIT
25
- end
13
+ @binary = ProconBypassMan::Domains::ProcessingProconBinary.new(binary: binary)
14
+ end
26
15
 
27
- def apply_left_analog_stick_cap(cap: )
28
- binary[6..8] = ProconBypassMan::Procon::AnalogStickCap.new(binary).capped_position(cap_hypotenuse: cap).to_binary
29
- end
16
+ def set_no_action!
17
+ binary.set_no_action!
18
+ end
30
19
 
31
- def unpress_button(button)
32
- return if not pressed_button?(button)
20
+ def apply_left_analog_stick_cap(cap: )
21
+ binary.write_as_apply_left_analog_stick_cap(cap: cap)
22
+ end
33
23
 
34
- byte_position = ButtonCollection.load(button).byte_position
35
- value = binary[byte_position].unpack("H*").first.to_i(16) - (2**ButtonCollection.load(button).bit_position)
36
- binary[byte_position] = ["%02X" % value.to_s].pack("H*")
37
- end
24
+ # @param [Symbol] button
25
+ def unpress_button(button)
26
+ return if not pressing_button?(button)
27
+ binary.write_as_unpress_button(button)
28
+ end
38
29
 
39
- def press_button(button)
40
- return if pressed_button?(button)
30
+ # @param [Symbol] button
31
+ def press_button(button)
32
+ return if pressing_button?(button)
33
+ binary.write_as_press_button(button)
34
+ end
41
35
 
42
- byte_position = ButtonCollection.load(button).byte_position
43
- value = binary[byte_position].unpack("H*").first.to_i(16) + (2**ButtonCollection.load(button).bit_position)
44
- binary[byte_position] = ["%02X" % value.to_s].pack("H*")
45
- end
36
+ # @param [Symbol] button
37
+ def press_button_only(button)
38
+ binary.write_as_press_button_only(button)
39
+ end
46
40
 
47
- def press_button_only(button)
48
- [ProconBypassMan::Procon::Consts::NO_ACTION.dup].pack("H*").tap do |no_action_binary|
49
- ButtonCollection.load(button).byte_position
50
- byte_position = ButtonCollection.load(button).byte_position
51
- value = 2**ButtonCollection.load(button).bit_position
52
- no_action_binary[byte_position] = ["%02X" % value.to_s].pack("H*")
53
- binary[3] = no_action_binary[3]
54
- binary[4] = no_action_binary[4]
55
- binary[5] = no_action_binary[5]
56
- end
57
- end
41
+ # @return [void]
42
+ def merge(target_binary)
43
+ binary.write_as_merge!(
44
+ ProconBypassMan::Domains::ProcessingProconBinary.new(binary: target_binary)
45
+ )
46
+ end
58
47
 
59
- def merge(target_binary: )
60
- tb = [target_binary].pack("H*")
61
- binary[3] = tb[3]
62
- binary[4] = tb[4]
63
- binary[5] = tb[5]
64
- binary[6] = tb[6]
65
- binary[7] = tb[7]
66
- binary[8] = tb[8]
67
- binary[9] = tb[9]
68
- binary[10] = tb[10]
69
- binary[11] = tb[11]
70
- self.binary
71
- end
48
+ # @param [Symbol] button
49
+ # @return [Boolean]
50
+ def pressing_button?(button)
51
+ ProconBypassMan::PressButtonAware.new(@binary.raw).pressing_button?(button)
52
+ end
72
53
 
73
- def pressed_button?(button)
74
- ProconBypassMan::PpressButtonAware.new(binary).pressed_button?(button)
75
- end
54
+ # @param [Array<Symbol>] buttons
55
+ # @return [Boolean]
56
+ def pressing_all_buttons?(buttons)
57
+ aware = ProconBypassMan::PressButtonAware.new(@binary.raw)
58
+ buttons.all? { |b| aware.pressing_button?(b) }
76
59
  end
77
60
  end
@@ -4,13 +4,12 @@ class ProconBypassMan::Procon::AnalogStick
4
4
 
5
5
  def initialize(binary: )
6
6
  @neutral_position = ProconBypassMan::ButtonsSettingConfiguration.instance.neutral_position
7
-
8
- byte6 = binary[6].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
9
- byte7 = binary[7].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
10
- byte8 = binary[8].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
7
+ bytes = binary[ProconBypassMan::Procon::ButtonCollection::LEFT_ANALOG_STICK.fetch(:byte_position)]
8
+ byte6, byte7, byte8 = bytes.each_char.map { |x| x.unpack("H*").first.to_i(16).to_s(2).rjust(8, "0") }
11
9
 
12
10
  self.bin_x = "#{byte7[4..7]}#{byte6}"
13
11
  self.bin_y = "#{byte8}#{byte7[0..3]}"
12
+ freeze
14
13
  end
15
14
 
16
15
  def abs_x
@@ -0,0 +1,34 @@
1
+ module ProconBypassMan
2
+ class ProconReader
3
+ def initialize(binary: )
4
+ @binary = binary
5
+ @analog_stick = ProconBypassMan::Procon::AnalogStick.new(binary: binary)
6
+ freeze
7
+ end
8
+
9
+ # @return [Array<Symbol>]
10
+ def pressing
11
+ aware = ProconBypassMan::PressButtonAware.new(@binary)
12
+ pressed_table = ::ProconBypassMan::Procon::ButtonCollection::BUTTONS.reduce({}) do |acc, button|
13
+ acc[button] = aware.pressing_button?(button)
14
+ acc
15
+ end
16
+ pressed_table.select { |_key, value| value }.keys
17
+ end
18
+
19
+ def left_analog_stick
20
+ { x: @analog_stick.relative_x, y: @analog_stick.relative_y }
21
+ end
22
+
23
+ def left_analog_stick_by_abs
24
+ { x: @analog_stick.abs_x, y: @analog_stick.abs_y }
25
+ end
26
+
27
+ def to_hash
28
+ { left_analog_stick: left_analog_stick,
29
+ left_analog_stick_by_abs: left_analog_stick_by_abs,
30
+ buttons: pressing,
31
+ }
32
+ end
33
+ end
34
+ end
@@ -20,8 +20,11 @@ class ProconBypassMan::Procon
20
20
  end
21
21
  reset!
22
22
 
23
+ # @param [string] binary
23
24
  def initialize(binary)
24
- self.user_operation = ProconBypassMan::Procon::UserOperation.new(binary.dup)
25
+ self.user_operation = ProconBypassMan::Procon::UserOperation.new(
26
+ binary.dup
27
+ )
25
28
  end
26
29
 
27
30
  def status; @@status[:buttons]; end
@@ -43,7 +46,7 @@ class ProconBypassMan::Procon
43
46
 
44
47
  if ongoing_macro.finished?
45
48
  current_layer.macros.each do |macro_name, options|
46
- if options[:if_pressed].all? { |b| user_operation.pressed_button?(b) }
49
+ if user_operation.pressing_all_buttons?(options[:if_pressed])
47
50
  @@status[:ongoing_macro] = MacroRegistry.load(macro_name)
48
51
  end
49
52
  end
@@ -60,7 +63,7 @@ class ProconBypassMan::Procon
60
63
  next
61
64
  end
62
65
 
63
- if options[:if_pressed] && options[:if_pressed].all? { |b| user_operation.pressed_button?(b) }
66
+ if options[:if_pressed] && user_operation.pressing_all_buttons?(options[:if_pressed])
64
67
  FlipCache.fetch(key: button, expires_in: options[:flip_interval]) do
65
68
  status[button] = !status[button]
66
69
  end
@@ -75,7 +78,7 @@ class ProconBypassMan::Procon
75
78
  @@status[:ongoing_mode] = ProconBypassMan::Procon::ModeRegistry.load(current_layer.mode)
76
79
  end
77
80
  if(binary = ongoing_mode.next_binary)
78
- self.user_operation.merge(target_binary: binary)
81
+ self.user_operation.merge([binary].pack("H*"))
79
82
  end
80
83
  return
81
84
  end
@@ -83,24 +86,24 @@ class ProconBypassMan::Procon
83
86
  status
84
87
  end
85
88
 
86
- # @return [String<binary>]
89
+ # @return [ProconBypassMan::Domains::ProcessingProconBinary]
87
90
  def to_binary
88
91
  if ongoing_mode.name != :manual
89
- return user_operation.binary
92
+ return user_operation.binary.raw
90
93
  end
91
94
 
92
95
  if ongoing_macro.ongoing?
93
- step = ongoing_macro.next_step or return(user_operation.binary)
96
+ step = ongoing_macro.next_step or return(user_operation.binary.raw)
94
97
  user_operation.press_button_only(step)
95
- return user_operation.binary
98
+ return user_operation.binary.raw
96
99
  end
97
100
 
98
101
  current_layer.disables.each do |button|
99
102
  user_operation.unpress_button(button)
100
103
  end
101
104
 
102
- current_layer.left_analog_stick_caps.each do |button, options|
103
- if button.nil? || button.all? { |b| user_operation.pressed_button?(b) }
105
+ current_layer.left_analog_stick_caps.each do |buttons, options|
106
+ if buttons.nil? || user_operation.pressing_all_buttons?(buttons)
104
107
  options[:force_neutral]&.each do |force_neutral_button|
105
108
  user_operation.unpress_button(force_neutral_button)
106
109
  end
@@ -116,7 +119,7 @@ class ProconBypassMan::Procon
116
119
  end
117
120
 
118
121
  # 押している時だけ連打
119
- if options[:if_pressed] && options[:if_pressed].all? { |b| user_operation.pressed_button?(b) }
122
+ if options[:if_pressed] && user_operation.pressing_all_buttons?(options[:if_pressed])
120
123
  if !status[button]
121
124
  user_operation.unpress_button(button)
122
125
  end
@@ -128,16 +131,15 @@ class ProconBypassMan::Procon
128
131
  end
129
132
 
130
133
  current_layer.remaps.each do |from_button, to_buttons|
131
- if user_operation.pressed_button?(from_button)
134
+ if user_operation.pressing_button?(from_button)
132
135
  user_operation.unpress_button(from_button)
133
- # TODO 2重でpressしないようにしたい
134
136
  to_buttons[:to].each do |to_button|
135
137
  user_operation.press_button(to_button)
136
138
  end
137
139
  end
138
140
  end
139
141
 
140
- user_operation.binary
142
+ user_operation.binary.raw
141
143
  end
142
144
 
143
145
  private
@@ -5,7 +5,7 @@ module ProconBypassMan
5
5
  def action_content(args: )
6
6
  require "pbmenv"
7
7
  ProconBypassMan.logger.info "execute RestorePbmSettingAction!"
8
- setting = args["setting"] or raise(ProconBypassMan::RemotePbmAction::NeedPbmVersionError, "settingが必要です, #{args.inspect}")
8
+ setting = args.dig("setting") or raise(ProconBypassMan::RemotePbmAction::NeedPbmVersionError, "settingが必要です, #{args.inspect}")
9
9
  File.write(
10
10
  ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path,
11
11
  setting.to_yaml,
@@ -5,7 +5,7 @@ module ProconBypassMan
5
5
  require "procon_bypass_man/remote_pbm_action/reboot_os_action"
6
6
  require "procon_bypass_man/remote_pbm_action/stop_pbm_action"
7
7
  require "procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb"
8
- require "procon_bypass_man/remote_pbm_action/lib/update_remote_pbm_action_status_command"
8
+ require "procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command"
9
9
 
10
10
  ACTION_CHANGE_PBM_VERSION = "change_pbm_version"
11
11
  ACTION_REBOOT_OS = "reboot_os"
@@ -1,5 +1,4 @@
1
1
  require_relative "io_monitor"
2
- require_relative "boot_message"
3
2
 
4
3
  class ProconBypassMan::Runner
5
4
  class InterruptForRestart < StandardError; end
@@ -31,6 +30,7 @@ class ProconBypassMan::Runner
31
30
  main_loop_pid = Kernel.fork { ProconBypassMan::BypassCommand.new(gadget: @gadget, procon: @procon).execute }
32
31
 
33
32
  begin
33
+ # TODO 小プロセスが消滅した時に、メインプロセスは生き続けてしまい、何もできなくなる問題がある
34
34
  while(readable_io = IO.select([self_read]))
35
35
  signal = readable_io.first[0].gets.strip
36
36
  handle_signal(signal)
@@ -39,14 +39,14 @@ class ProconBypassMan::Runner
39
39
  $will_terminate_token = true
40
40
  Process.kill("TERM", main_loop_pid)
41
41
  Process.wait
42
- ProconBypassMan.logger.info("Reloading config file")
42
+ ProconBypassMan::PrintMessageCommand.execute(text: "Reloading config file")
43
43
  begin
44
44
  ProconBypassMan::ButtonsSettingConfiguration::Loader.reload_setting
45
45
  ProconBypassMan::SendReloadConfigEventCommand.execute
46
46
  rescue ProconBypassMan::CouldNotLoadConfigError
47
47
  ProconBypassMan::SendErrorCommand.execute(error: "設定ファイルが不正です。再読み込みができませんでした")
48
48
  end
49
- ProconBypassMan.logger.info("バイパス処理を再開します")
49
+ ProconBypassMan::PrintMessageCommand.execute(text: "バイパス処理を再開します")
50
50
  rescue Interrupt
51
51
  $will_terminate_token = true
52
52
  Process.kill("TERM", main_loop_pid)
@@ -68,13 +68,6 @@ module ProconBypassMan
68
68
  end
69
69
 
70
70
  def self.register_schedules
71
- register(
72
- schedule: Schedule.new(
73
- klass: ProconBypassMan::FetchAndRunRemotePbmActionJob,
74
- args: [],
75
- interval: 3,
76
- )
77
- )
78
71
  register(
79
72
  schedule: Schedule.new(
80
73
  klass: ProconBypassMan::SyncDeviceStatsJob,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProconBypassMan
4
- VERSION = "0.1.15"
4
+ VERSION = "0.1.16"
5
5
  end
@@ -0,0 +1,79 @@
1
+ module ProconBypassMan
2
+ module Websocket
3
+ module PbmJobClient
4
+ CHANNEL = 'PbmJobChannel'
5
+
6
+ def self.start!
7
+ return unless ProconBypassMan.config.enable_ws?
8
+
9
+ Thread.start do
10
+ loop do
11
+ run
12
+ rescue
13
+ retry
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.run
19
+ EventMachine.run do
20
+ client = ActionCableClient.new(
21
+ ProconBypassMan.config.current_ws_server_url, {
22
+ channel: CHANNEL, device_id: ProconBypassMan.device_id,
23
+ }
24
+ )
25
+
26
+ client.connected {
27
+ ProconBypassMan.logger.info('successfully connected in ProconBypassMan::Websocket::PbmJobClient')
28
+ }
29
+ client.subscribed { |msg|
30
+ puts({ event: :subscribed, msg: msg })
31
+ ProconBypassMan::SyncDeviceStatsJob.perform(ProconBypassMan::DeviceStatus.current)
32
+ }
33
+
34
+ client.received do |data|
35
+ validate_and_run(data: data)
36
+ rescue => e
37
+ ProconBypassMan::SendErrorCommand.execute(error: e)
38
+ end
39
+
40
+ client.disconnected {
41
+ puts :disconnected
42
+ client.reconnect!
43
+ sleep 2
44
+ }
45
+ client.errored { |msg| puts :errored; puts msg }
46
+ client.pinged { |msg|
47
+ ProconBypassMan.cache.fetch key: 'ws_pinged', expires_in: 10 do
48
+ ProconBypassMan.logger.info(msg)
49
+ end
50
+ }
51
+ end
52
+ end
53
+
54
+ # @raise [ProconBypassMan::RemotePbmActionObject::ValidationError]
55
+ # @param [Hash] data
56
+ # @return [Void]
57
+ def self.validate_and_run(data: )
58
+ ProconBypassMan.logger.debug { data }
59
+ pbm_job_hash = data.dig("message")
60
+ begin
61
+ pbm_job_object = ProconBypassMan::RemotePbmActionObject.new(action: pbm_job_hash["action"],
62
+ status: pbm_job_hash["status"],
63
+ uuid: pbm_job_hash["uuid"],
64
+ created_at: pbm_job_hash["created_at"],
65
+ job_args: pbm_job_hash["args"])
66
+ pbm_job_object.validate!
67
+ rescue ProconBypassMan::RemotePbmActionObject::ValidationError => e
68
+ raise
69
+ end
70
+
71
+ ProconBypassMan::RunRemotePbmActionDispatchCommand.execute(
72
+ action: pbm_job_object.action,
73
+ uuid: pbm_job_object.uuid,
74
+ job_args: pbm_job_object.job_args
75
+ )
76
+ end
77
+ end
78
+ end
79
+ end
@@ -4,6 +4,9 @@ require "json"
4
4
  require "net/http"
5
5
  require "fileutils"
6
6
  require "securerandom"
7
+ require 'em/pure_ruby'
8
+ require "action_cable_client"
9
+ require "ext/em_pure_ruby"
7
10
 
8
11
  require_relative "procon_bypass_man/version"
9
12
  require_relative "procon_bypass_man/remote_pbm_action"
@@ -21,6 +24,7 @@ require_relative "procon_bypass_man/support/server_pool"
21
24
  require_relative "procon_bypass_man/background"
22
25
  require_relative "procon_bypass_man/commands"
23
26
  require_relative "procon_bypass_man/bypass"
27
+ require_relative "procon_bypass_man/domains"
24
28
  require_relative "procon_bypass_man/device_connector"
25
29
  require_relative "procon_bypass_man/device_status"
26
30
  require_relative "procon_bypass_man/runner"
@@ -28,12 +32,14 @@ require_relative "procon_bypass_man/processor"
28
32
  require_relative "procon_bypass_man/configuration"
29
33
  require_relative "procon_bypass_man/buttons_setting_configuration"
30
34
  require_relative "procon_bypass_man/procon"
31
- require_relative "procon_bypass_man/procon_reader"
32
- require_relative "procon_bypass_man/procon/analog_stick"
35
+ require_relative "procon_bypass_man/procon/button"
36
+ require_relative "procon_bypass_man/procon/value_objects/analog_stick"
37
+ require_relative "procon_bypass_man/procon/value_objects/procon_reader"
33
38
  require_relative "procon_bypass_man/procon/analog_stick_cap"
34
- require_relative "procon_bypass_man/value_objects/remote_pbm_action_object"
39
+ require_relative "procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object"
35
40
  require_relative "procon_bypass_man/scheduler"
36
- require_relative "procon_bypass_man/plugin"
41
+ require_relative "procon_bypass_man/plugins"
42
+ require_relative "procon_bypass_man/websocket/pbm_job_client"
37
43
 
38
44
  STDOUT.sync = true
39
45
  Thread.abort_on_exception = true
@@ -51,9 +57,9 @@ module ProconBypassMan
51
57
  def self.run(setting_path: nil)
52
58
  ProconBypassMan::Scheduler.start!
53
59
  ProconBypassMan::Background::JobRunner.start!
60
+ ProconBypassMan::Websocket::PbmJobClient.start!
54
61
 
55
- ProconBypassMan.logger.info "PBMを起動しています"
56
- puts "PBMを起動しています"
62
+ ProconBypassMan::PrintMessageCommand.execute(text: "PBMを起動しています")
57
63
  ProconBypassMan::ButtonsSettingConfiguration::Loader.load(setting_path: setting_path)
58
64
  initialize_pbm
59
65
  gadget, procon = ProconBypassMan::ConnectDeviceCommand.execute!
@@ -29,6 +29,8 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  # Uncomment to register a new dependency of your gem
31
31
  spec.add_dependency "pbmenv"
32
+ spec.add_dependency "action_cable_client"
33
+ spec.add_dependency "sorted_set"
32
34
 
33
35
  # For more information and examples about making a new gem, checkout our
34
36
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -5,7 +5,7 @@ require 'bundler/inline'
5
5
  gemfile do
6
6
  source 'https://rubygems.org'
7
7
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
8
- gem 'procon_bypass_man', '0.1.15'
8
+ gem 'procon_bypass_man', '0.1.16'
9
9
  end
10
10
 
11
11
  ProconBypassMan.configure do |config|
data/sig/main.rbs CHANGED
@@ -201,7 +201,21 @@ class ProconBypassMan::Configuration
201
201
  def digest_path: () -> ::String
202
202
 
203
203
  # @return [String] pbm-webの接続先
204
- def internal_api_servers: () -> untyped
204
+ def current_server: () -> ::String
205
+
206
+ def current_ws_server: () -> (::String | nil)
207
+
208
+ def current_ws_server_url: () -> ::String
209
+
210
+ def enable_ws?: () -> bool
211
+
212
+ def server_pool: () -> untyped
213
+
214
+ def internal_server_pool: () -> untyped
215
+
216
+ def internal_servers: () -> ::Array[string | nil]
217
+
218
+ def internal_api_servers: () -> ::Array[untyped]
205
219
  end
206
220
 
207
221
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: procon_bypass_man
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiikko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-08 00:00:00.000000000 Z
11
+ date: 2021-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pbmenv
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: action_cable_client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sorted_set
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  description: An extension for Nintendo Switch Pro Controller
28
56
  email:
29
57
  - n905i.1214@gmail.com
@@ -52,6 +80,7 @@ files:
52
80
  - docs/setup_raspi.md
53
81
  - docs/setup_raspi.mitamae.rb
54
82
  - docs/setup_raspi_by_mitamae.md
83
+ - lib/ext/em_pure_ruby.rb
55
84
  - lib/procon_bypass_man.rb
56
85
  - lib/procon_bypass_man/background.rb
57
86
  - lib/procon_bypass_man/background/job_performer.rb
@@ -60,7 +89,6 @@ files:
60
89
  - lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb
61
90
  - lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb
62
91
  - lib/procon_bypass_man/background/jobs/concerns/job_runnable.rb
63
- - lib/procon_bypass_man/background/jobs/fetch_and_run_remote_pbm_action_job.rb
64
92
  - lib/procon_bypass_man/background/jobs/report_boot_job.rb
65
93
  - lib/procon_bypass_man/background/jobs/report_error_job.rb
66
94
  - lib/procon_bypass_man/background/jobs/report_event_base_job.rb
@@ -68,7 +96,6 @@ files:
68
96
  - lib/procon_bypass_man/background/jobs/report_pressed_buttons_job.rb
69
97
  - lib/procon_bypass_man/background/jobs/report_reload_config_job.rb
70
98
  - lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb
71
- - lib/procon_bypass_man/boot_message.rb
72
99
  - lib/procon_bypass_man/buttons_setting_configuration.rb
73
100
  - lib/procon_bypass_man/buttons_setting_configuration/layer.rb
74
101
  - lib/procon_bypass_man/buttons_setting_configuration/loader.rb
@@ -79,7 +106,7 @@ files:
79
106
  - lib/procon_bypass_man/commands/bypass_command.rb
80
107
  - lib/procon_bypass_man/commands/connect_device_command.rb
81
108
  - lib/procon_bypass_man/commands/print_boot_message_command.rb
82
- - lib/procon_bypass_man/commands/run_local_shell_command.rb
109
+ - lib/procon_bypass_man/commands/print_message_command.rb
83
110
  - lib/procon_bypass_man/commands/run_remote_pbm_action_dispatch_command.rb
84
111
  - lib/procon_bypass_man/commands/send_error_command.rb
85
112
  - lib/procon_bypass_man/commands/send_reload_config_event_command.rb
@@ -88,18 +115,24 @@ files:
88
115
  - lib/procon_bypass_man/configuration.rb
89
116
  - lib/procon_bypass_man/device_connector.rb
90
117
  - lib/procon_bypass_man/device_status.rb
118
+ - lib/procon_bypass_man/domains.rb
119
+ - lib/procon_bypass_man/domains/binary/base.rb
120
+ - lib/procon_bypass_man/domains/binary/has_immutable_binary.rb
121
+ - lib/procon_bypass_man/domains/binary/has_mutable_binary.rb
122
+ - lib/procon_bypass_man/domains/binary/inbound_procon_binary.rb
123
+ - lib/procon_bypass_man/domains/binary/processing_procon_binary.rb
91
124
  - lib/procon_bypass_man/io_monitor.rb
92
- - lib/procon_bypass_man/plugin.rb
93
125
  - lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb
94
126
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_left_key.rb
95
127
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_right_key.rb
96
128
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_up_key.rb
97
129
  - lib/procon_bypass_man/plugin/splatoon2/mode/guruguru.rb
98
130
  - lib/procon_bypass_man/plugin/splatoon2/version.rb
131
+ - lib/procon_bypass_man/plugins.rb
99
132
  - lib/procon_bypass_man/processor.rb
100
133
  - lib/procon_bypass_man/procon.rb
101
- - lib/procon_bypass_man/procon/analog_stick.rb
102
134
  - lib/procon_bypass_man/procon/analog_stick_cap.rb
135
+ - lib/procon_bypass_man/procon/button.rb
103
136
  - lib/procon_bypass_man/procon/button_collection.rb
104
137
  - lib/procon_bypass_man/procon/consts.rb
105
138
  - lib/procon_bypass_man/procon/flip_cache.rb
@@ -108,14 +141,16 @@ files:
108
141
  - lib/procon_bypass_man/procon/mode_registry.rb
109
142
  - lib/procon_bypass_man/procon/press_button_aware.rb
110
143
  - lib/procon_bypass_man/procon/user_operation.rb
111
- - lib/procon_bypass_man/procon_reader.rb
144
+ - lib/procon_bypass_man/procon/value_objects/analog_stick.rb
145
+ - lib/procon_bypass_man/procon/value_objects/procon_reader.rb
112
146
  - lib/procon_bypass_man/remote_pbm_action.rb
113
147
  - lib/procon_bypass_man/remote_pbm_action/base_action.rb
114
148
  - lib/procon_bypass_man/remote_pbm_action/change_pbm_version_action.rb
115
- - lib/procon_bypass_man/remote_pbm_action/lib/update_remote_pbm_action_status_command.rb
149
+ - lib/procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command.rb
116
150
  - lib/procon_bypass_man/remote_pbm_action/reboot_os_action.rb
117
151
  - lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb
118
152
  - lib/procon_bypass_man/remote_pbm_action/stop_pbm_action.rb
153
+ - lib/procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object.rb
119
154
  - lib/procon_bypass_man/runner.rb
120
155
  - lib/procon_bypass_man/scheduler.rb
121
156
  - lib/procon_bypass_man/support/callbacks.rb
@@ -129,8 +164,8 @@ files:
129
164
  - lib/procon_bypass_man/support/signal_handler.rb
130
165
  - lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client.rb
131
166
  - lib/procon_bypass_man/support/uptime.rb
132
- - lib/procon_bypass_man/value_objects/remote_pbm_action_object.rb
133
167
  - lib/procon_bypass_man/version.rb
168
+ - lib/procon_bypass_man/websocket/pbm_job_client.rb
134
169
  - procon_bypass_man.gemspec
135
170
  - project_template/README.md
136
171
  - project_template/app.rb