procon_bypass_man 0.1.21 → 0.1.22
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/.circleci/config.yml +9 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +4 -1
- data/docs/getting_started.md +68 -4
- data/docs/setting/left-analogstick-cap.md +1 -1
- data/docs/setting/splatoon2_macro_dasei_cancel.md +4 -0
- data/docs/setting/splatoon2_macro_sokuwari_bubble.md +4 -0
- data/docs/setting/splatoon2_shake_tansan.md +47 -0
- data/lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb +17 -0
- data/lib/procon_bypass_man/background.rb +1 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/layer.rb +142 -80
- data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +2 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/button.rb +28 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/button_list.rb +31 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/disable_macro_if_pressed.rb +28 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/flip_if_pressed.rb +31 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/force_neutral.rb +28 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/if_pressed.rb +26 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/if_pressed_allows_nil.rb +28 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/open_macro_steps.rb +26 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/param_normalizer.rb +17 -0
- data/lib/procon_bypass_man/buttons_setting_configuration.rb +5 -4
- data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +4 -0
- data/lib/procon_bypass_man/configuration.rb +8 -1
- data/lib/procon_bypass_man/device_connector.rb +1 -4
- data/lib/procon_bypass_man/device_procon_finder.rb +0 -2
- data/lib/procon_bypass_man/domains/analog_stick_position.rb +18 -0
- data/lib/procon_bypass_man/domains/binary/processing_procon_binary.rb +6 -1
- data/lib/procon_bypass_man/domains.rb +1 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/charge_tansan_bomb.rb +21 -0
- data/lib/procon_bypass_man/plugin/splatoon2/version.rb +1 -1
- data/lib/procon_bypass_man/plugins.rb +1 -0
- data/lib/procon_bypass_man/procon/analog_stick_cap.rb +4 -23
- data/lib/procon_bypass_man/procon/analog_stick_manipulator.rb +36 -0
- data/lib/procon_bypass_man/procon/layer_changer.rb +4 -1
- data/lib/procon_bypass_man/procon/macro.rb +5 -2
- data/lib/procon_bypass_man/procon/macro_builder.rb +15 -17
- data/lib/procon_bypass_man/procon/macro_plugin_map.rb +23 -0
- data/lib/procon_bypass_man/procon/macro_registry.rb +21 -10
- data/lib/procon_bypass_man/procon/user_operation.rb +29 -15
- data/lib/procon_bypass_man/procon.rb +19 -5
- data/lib/procon_bypass_man/remote_macro/queue_over_process.rb +62 -0
- data/lib/procon_bypass_man/remote_macro/remote_macro_object.rb +30 -0
- data/lib/procon_bypass_man/remote_macro/remote_macro_receiver.rb +37 -0
- data/lib/procon_bypass_man/remote_macro/remote_macro_sender.rb +8 -0
- data/lib/procon_bypass_man/remote_macro/task.rb +6 -0
- data/lib/procon_bypass_man/remote_macro/task_queue.rb +13 -0
- data/lib/procon_bypass_man/remote_macro.rb +14 -0
- data/lib/procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object.rb +1 -1
- data/lib/procon_bypass_man/remote_pbm_action.rb +1 -0
- data/lib/procon_bypass_man/runner.rb +5 -1
- data/lib/procon_bypass_man/support/remote_macro_http_client.rb +9 -0
- data/lib/procon_bypass_man/usb_device_controller.rb +0 -2
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man/websocket/{pbm_job_client.rb → client.rb} +31 -6
- data/lib/procon_bypass_man.rb +11 -2
- data/procon_bypass_man.gemspec +1 -1
- data/project_template/app.rb +1 -1
- metadata +27 -4
@@ -33,22 +33,22 @@ class ProconBypassMan::Procon::UserOperation
|
|
33
33
|
binary.write_as_press_button(button)
|
34
34
|
end
|
35
35
|
|
36
|
-
# @param [Symbol, Array<Symbol>]
|
37
|
-
def
|
38
|
-
if
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
return
|
46
|
-
end
|
36
|
+
# @param [Symbol, Array<Symbol>] macro_step
|
37
|
+
def press_button_only_or_tilt_sticks(macro_step)
|
38
|
+
macro_step = [macro_step] if not macro_step.is_a?(Array)
|
39
|
+
# スティック操作の時はボタン入力を通す
|
40
|
+
binary.set_no_action! if is_button?(macro_step)
|
41
|
+
|
42
|
+
macro_step.uniq.each do |ms|
|
43
|
+
next if ProconBypassMan::Procon::MacroBuilder::RESERVED_WORD_NONE == ms
|
47
44
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
45
|
+
if is_button?(ms)
|
46
|
+
binary.write_as_press_button(ms)
|
47
|
+
elsif is_stick?(ms)
|
48
|
+
binary.write_as_tilt_left_stick(ms)
|
49
|
+
else
|
50
|
+
warn "知らないmacro stepです"
|
51
|
+
end
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -71,4 +71,18 @@ class ProconBypassMan::Procon::UserOperation
|
|
71
71
|
aware = ProconBypassMan::PressButtonAware.new(@binary.raw)
|
72
72
|
buttons.all? { |b| aware.pressing_button?(b) }
|
73
73
|
end
|
74
|
+
|
75
|
+
# @return [Boolean]
|
76
|
+
def is_button?(button)
|
77
|
+
button = [button] if not button.is_a?(Array)
|
78
|
+
|
79
|
+
button.all? do |b|
|
80
|
+
!!ProconBypassMan::Procon::ButtonCollection::BUTTONS_MAP[b.to_sym] || b.to_sym == ProconBypassMan::Procon::MacroBuilder::RESERVED_WORD_NONE
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Boolean]
|
85
|
+
def is_stick?(step)
|
86
|
+
!!(step =~ /\Atilt_/)
|
87
|
+
end
|
74
88
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "procon_bypass_man/procon/macro_plugin_map"
|
2
|
+
|
1
3
|
class ProconBypassMan::Procon
|
2
4
|
require "procon_bypass_man/procon/consts"
|
3
5
|
require "procon_bypass_man/procon/mode_registry"
|
@@ -78,12 +80,22 @@ class ProconBypassMan::Procon
|
|
78
80
|
end
|
79
81
|
|
80
82
|
if user_operation.pressing_all_buttons?(options[:if_pressed])
|
81
|
-
@@status[:ongoing_macro] = MacroRegistry.load(macro_name)
|
83
|
+
@@status[:ongoing_macro] = MacroRegistry.load(macro_name, force_neutral_buttons: options[:force_neutral])
|
82
84
|
break
|
83
85
|
end
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
89
|
+
# remote macro
|
90
|
+
if task = ProconBypassMan::RemoteMacro::TaskQueueInProcess.non_blocking_shift
|
91
|
+
ProconBypassMan::Procon::MacroRegistry.cleanup_remote_macros!
|
92
|
+
macro_name = task.name || "RemoteMacro-#{task.steps.join}".to_sym
|
93
|
+
ProconBypassMan::Procon::MacroRegistry.install_plugin(macro_name, steps: task.steps, macro_type: :remote)
|
94
|
+
@@status[:ongoing_macro] = MacroRegistry.load(macro_name, macro_type: :remote) do
|
95
|
+
ProconBypassMan::PostCompletedRemoteMacroJob.perform_async(task.uuid)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
87
99
|
case current_layer.mode
|
88
100
|
when :manual
|
89
101
|
@@status[:ongoing_mode] = ModeRegistry.load(:manual)
|
@@ -124,9 +136,11 @@ class ProconBypassMan::Procon
|
|
124
136
|
return user_operation.binary.raw
|
125
137
|
end
|
126
138
|
|
127
|
-
if ongoing_macro.ongoing?
|
128
|
-
|
129
|
-
|
139
|
+
if ongoing_macro.ongoing? && (step = ongoing_macro.next_step)
|
140
|
+
ongoing_macro.force_neutral_buttons&.each do |force_neutral_button|
|
141
|
+
user_operation.unpress_button(force_neutral_button)
|
142
|
+
end
|
143
|
+
user_operation.press_button_only_or_tilt_sticks(step)
|
130
144
|
return user_operation.binary.raw
|
131
145
|
end
|
132
146
|
|
@@ -135,7 +149,7 @@ class ProconBypassMan::Procon
|
|
135
149
|
end
|
136
150
|
|
137
151
|
current_layer.left_analog_stick_caps.each do |config|
|
138
|
-
if config[:if_pressed]
|
152
|
+
if !config[:if_pressed] || user_operation.pressing_all_buttons?(config[:if_pressed])
|
139
153
|
config[:force_neutral]&.each do |force_neutral_button|
|
140
154
|
user_operation.unpress_button(force_neutral_button)
|
141
155
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class ProconBypassMan::QueueOverProcess
|
2
|
+
attr_reader :drb
|
3
|
+
|
4
|
+
@@drb_server = nil
|
5
|
+
@@drb_server_thread = nil
|
6
|
+
|
7
|
+
def self.start!
|
8
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
9
|
+
require 'drb/drb'
|
10
|
+
|
11
|
+
FileUtils.rm_rf(file_path) if File.exist?(file_path)
|
12
|
+
begin
|
13
|
+
@@drb_server = DRb.start_service(url, Queue.new, safe_level: 1)
|
14
|
+
rescue Errno::EADDRINUSE => e
|
15
|
+
ProconBypassMan.logger.error e
|
16
|
+
raise
|
17
|
+
end
|
18
|
+
|
19
|
+
@@drb_server_thread =
|
20
|
+
Thread.new do
|
21
|
+
DRb.thread.join
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.shutdown
|
26
|
+
if @@drb_server
|
27
|
+
@@drb_server_thread.kill
|
28
|
+
@@drb_server.stop_service
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.push(value)
|
33
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
34
|
+
|
35
|
+
drb.push(value)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.pop
|
39
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
40
|
+
|
41
|
+
drb.pop
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.drb
|
45
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
46
|
+
|
47
|
+
@@drb ||= new.drb
|
48
|
+
end
|
49
|
+
|
50
|
+
PROTOCOL = "drbunix"
|
51
|
+
def self.url
|
52
|
+
"#{PROTOCOL}:/tmp/procon_bypass_man_queue"
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.file_path
|
56
|
+
url.gsub("#{PROTOCOL}:", "")
|
57
|
+
end
|
58
|
+
|
59
|
+
def initialize
|
60
|
+
@drb = DRbObject.new_with_uri(self.class.url)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ProconBypassMan
|
2
|
+
class RemoteMacroObject
|
3
|
+
# valueobjectがvalidatorの責務も持っている. 今度分離する
|
4
|
+
class ValidationError < StandardError; end
|
5
|
+
class MustBeNotNilError < ValidationError; end
|
6
|
+
class NonSupportAction < ValidationError; end
|
7
|
+
|
8
|
+
attr_accessor :name, :uuid, :steps
|
9
|
+
|
10
|
+
# @param [String] name
|
11
|
+
# @param [String] uuid
|
12
|
+
# @param [Array] steps
|
13
|
+
def initialize(name: , uuid:, steps: )
|
14
|
+
@name = name
|
15
|
+
@uuid = uuid
|
16
|
+
@steps = steps
|
17
|
+
freeze
|
18
|
+
end
|
19
|
+
|
20
|
+
# @raise [MustBeNotNilError]
|
21
|
+
# @raise [NonSupportAction]
|
22
|
+
# @return [void]
|
23
|
+
def validate!
|
24
|
+
self.uuid or raise MustBeNotNilError, "uuidは値が必須です"
|
25
|
+
unless self.steps.is_a?(Array)
|
26
|
+
raise ValidationError, "stepsは配列です"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class ProconBypassMan::RemoteMacroReceiver
|
2
|
+
# forkしたプロセスで動かすクラス。sock経由で命令を受け取ってmacoのキューに積んでいく
|
3
|
+
def self.start_with_foreground!
|
4
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
5
|
+
|
6
|
+
run
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.start!
|
10
|
+
return unless ProconBypassMan.config.enable_remote_macro?
|
11
|
+
|
12
|
+
Thread.start do
|
13
|
+
start_with_foreground!
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.run
|
18
|
+
while(task = ProconBypassMan::QueueOverProcess.pop)
|
19
|
+
receive(task)
|
20
|
+
end
|
21
|
+
shutdown
|
22
|
+
rescue Errno::ENOENT, Errno::ECONNRESET, Errno::ECONNREFUSED => e
|
23
|
+
ProconBypassMan.logger.debug(e)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
# @param [ProconBypassMan::RemoteMacro::Task] task
|
28
|
+
def self.receive(task)
|
29
|
+
ProconBypassMan.logger.info "[remote macro][receiver] name: #{task.name}, uuid: #{task.uuid}, steps: #{task.steps}"
|
30
|
+
ProconBypassMan::RemoteMacro::TaskQueueInProcess.push(task)
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.shutdown
|
35
|
+
ProconBypassMan.logger.info("ProconBypassMan::RemoteMacroReceiverを終了します。")
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class ProconBypassMan::RemoteMacroSender
|
2
|
+
def self.execute(name: , uuid: , steps: )
|
3
|
+
ProconBypassMan.logger.info "[remote macro][sender] name: #{name}, uuid: #{uuid}, steps: #{steps}"
|
4
|
+
ProconBypassMan::QueueOverProcess.push(
|
5
|
+
ProconBypassMan::RemoteMacro::Task.new(name, uuid, steps)
|
6
|
+
)
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ProconBypassMan
|
2
|
+
module RemoteMacro
|
3
|
+
require "procon_bypass_man/remote_macro/remote_macro_object"
|
4
|
+
require "procon_bypass_man/remote_macro/remote_macro_receiver"
|
5
|
+
require "procon_bypass_man/remote_macro/remote_macro_sender"
|
6
|
+
require "procon_bypass_man/remote_macro/queue_over_process"
|
7
|
+
require "procon_bypass_man/remote_macro/task"
|
8
|
+
require "procon_bypass_man/remote_macro/task_queue"
|
9
|
+
|
10
|
+
ACTION_KEY = "remote_macro"
|
11
|
+
|
12
|
+
TaskQueueInProcess = ProconBypassMan::RemoteMacro::TaskQueue.new
|
13
|
+
end
|
14
|
+
end
|
@@ -11,7 +11,7 @@ module ProconBypassMan
|
|
11
11
|
# @param [String] status
|
12
12
|
# @param [String] #uuid
|
13
13
|
# @param [Time] created_at
|
14
|
-
# @
|
14
|
+
# @param [Hash] job_args
|
15
15
|
def initialize(action: , status:, uuid:, created_at:, job_args: )
|
16
16
|
self.action = action
|
17
17
|
self.status = status
|
@@ -6,6 +6,7 @@ module ProconBypassMan
|
|
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
8
|
require "procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command"
|
9
|
+
require "procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object"
|
9
10
|
|
10
11
|
ACTION_CHANGE_PBM_VERSION = "change_pbm_version"
|
11
12
|
ACTION_REBOOT_OS = "reboot_os"
|
@@ -27,7 +27,11 @@ class ProconBypassMan::Runner
|
|
27
27
|
loop do
|
28
28
|
$will_terminate_token = false
|
29
29
|
# NOTE メインプロセスではThreadをいくつか起動しているので念のためパフォーマンスを優先するためにforkしていく
|
30
|
-
child_pid = Kernel.fork {
|
30
|
+
child_pid = Kernel.fork {
|
31
|
+
DRb.start_service if defined?(DRb)
|
32
|
+
ProconBypassMan::RemoteMacroReceiver.start!
|
33
|
+
ProconBypassMan::BypassCommand.new(gadget: @gadget, procon: @procon).execute
|
34
|
+
}
|
31
35
|
|
32
36
|
begin
|
33
37
|
# TODO 小プロセスが消滅した時に、メインプロセスは生き続けてしまい、何もできなくなる問題がある
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ProconBypassMan
|
2
2
|
module Websocket
|
3
|
-
module
|
3
|
+
module Client
|
4
4
|
CHANNEL = 'PbmJobChannel'
|
5
5
|
|
6
6
|
def self.start!
|
@@ -20,7 +20,7 @@ module ProconBypassMan
|
|
20
20
|
)
|
21
21
|
|
22
22
|
client.connected {
|
23
|
-
ProconBypassMan.logger.info('websocket client: successfully connected in ProconBypassMan::Websocket::
|
23
|
+
ProconBypassMan.logger.info('websocket client: successfully connected in ProconBypassMan::Websocket::Client')
|
24
24
|
}
|
25
25
|
client.subscribed { |msg|
|
26
26
|
ProconBypassMan.logger.info('websocket client: subscribed')
|
@@ -63,17 +63,22 @@ module ProconBypassMan
|
|
63
63
|
# @param [Hash] data
|
64
64
|
def self.dispatch(data: , client: )
|
65
65
|
pbm_job_hash = data.dig("message")
|
66
|
-
|
66
|
+
case pbm_job_hash['action']
|
67
|
+
when "ping"
|
67
68
|
client.perform('pong', { device_id: ProconBypassMan.device_id, message: 'hello from pbm' })
|
69
|
+
when ProconBypassMan::RemoteMacro::ACTION_KEY
|
70
|
+
validate_and_run_remote_macro(data: data)
|
71
|
+
when *ProconBypassMan::RemotePbmAction::ACTIONS
|
72
|
+
validate_and_run_remote_pbm_action(data: data)
|
68
73
|
else
|
69
|
-
|
74
|
+
ProconBypassMan.logger.error "unknown action"
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
78
|
# @raise [ProconBypassMan::RemotePbmActionObject::ValidationError]
|
74
79
|
# @param [Hash] data
|
75
80
|
# @return [Void]
|
76
|
-
def self.
|
81
|
+
def self.validate_and_run_remote_pbm_action(data: )
|
77
82
|
pbm_job_hash = data.dig("message")
|
78
83
|
begin
|
79
84
|
pbm_job_object = ProconBypassMan::RemotePbmActionObject.new(action: pbm_job_hash["action"],
|
@@ -83,7 +88,8 @@ module ProconBypassMan
|
|
83
88
|
job_args: pbm_job_hash["args"])
|
84
89
|
pbm_job_object.validate!
|
85
90
|
rescue ProconBypassMan::RemotePbmActionObject::ValidationError => e
|
86
|
-
|
91
|
+
ProconBypassMan::SendErrorCommand.execute(error: e)
|
92
|
+
return
|
87
93
|
end
|
88
94
|
|
89
95
|
ProconBypassMan::RunRemotePbmActionDispatchCommand.execute(
|
@@ -92,6 +98,25 @@ module ProconBypassMan
|
|
92
98
|
job_args: pbm_job_object.job_args
|
93
99
|
)
|
94
100
|
end
|
101
|
+
|
102
|
+
def self.validate_and_run_remote_macro(data: )
|
103
|
+
pbm_job_hash = data.dig("message")
|
104
|
+
begin
|
105
|
+
remote_macro_object = ProconBypassMan::RemoteMacroObject.new(name: pbm_job_hash["name"],
|
106
|
+
uuid: pbm_job_hash["uuid"],
|
107
|
+
steps: pbm_job_hash["steps"])
|
108
|
+
remote_macro_object.validate!
|
109
|
+
rescue ProconBypassMan::RemoteMacroObject::ValidationError => e
|
110
|
+
ProconBypassMan::SendErrorCommand.execute(error: e)
|
111
|
+
return
|
112
|
+
end
|
113
|
+
|
114
|
+
ProconBypassMan::RemoteMacroSender.execute(
|
115
|
+
name: remote_macro_object.name,
|
116
|
+
uuid: remote_macro_object.uuid,
|
117
|
+
steps: remote_macro_object.steps,
|
118
|
+
)
|
119
|
+
end
|
95
120
|
end
|
96
121
|
end
|
97
122
|
end
|
data/lib/procon_bypass_man.rb
CHANGED
@@ -13,6 +13,7 @@ require "pbmenv"
|
|
13
13
|
|
14
14
|
require_relative "procon_bypass_man/version"
|
15
15
|
require_relative "procon_bypass_man/remote_pbm_action"
|
16
|
+
require_relative "procon_bypass_man/remote_macro"
|
16
17
|
require_relative "procon_bypass_man/support/signal_handler"
|
17
18
|
require_relative "procon_bypass_man/support/callbacks"
|
18
19
|
require_relative "procon_bypass_man/support/yaml_writer"
|
@@ -22,6 +23,7 @@ require_relative "procon_bypass_man/support/uptime"
|
|
22
23
|
require_relative "procon_bypass_man/support/on_memory_cache"
|
23
24
|
require_relative "procon_bypass_man/support/http_client"
|
24
25
|
require_relative "procon_bypass_man/support/report_http_client"
|
26
|
+
require_relative "procon_bypass_man/support/remote_macro_http_client"
|
25
27
|
require_relative "procon_bypass_man/support/update_remote_pbm_action_status_http_client"
|
26
28
|
require_relative "procon_bypass_man/support/send_device_stats_http_client"
|
27
29
|
require_relative "procon_bypass_man/support/server_pool"
|
@@ -44,10 +46,11 @@ require_relative "procon_bypass_man/procon/button"
|
|
44
46
|
require_relative "procon_bypass_man/procon/value_objects/analog_stick"
|
45
47
|
require_relative "procon_bypass_man/procon/value_objects/procon_reader"
|
46
48
|
require_relative "procon_bypass_man/procon/analog_stick_cap"
|
49
|
+
require_relative "procon_bypass_man/procon/analog_stick_manipulator"
|
47
50
|
require_relative "procon_bypass_man/remote_pbm_action/value_objects/remote_pbm_action_object"
|
48
51
|
require_relative "procon_bypass_man/scheduler"
|
49
52
|
require_relative "procon_bypass_man/plugins"
|
50
|
-
require_relative "procon_bypass_man/websocket/
|
53
|
+
require_relative "procon_bypass_man/websocket/client"
|
51
54
|
require_relative "procon_bypass_man/websocket/watchdog"
|
52
55
|
require_relative "procon_bypass_man/websocket/forever"
|
53
56
|
|
@@ -67,7 +70,8 @@ module ProconBypassMan
|
|
67
70
|
def self.run(setting_path: nil)
|
68
71
|
ProconBypassMan::Scheduler.start!
|
69
72
|
ProconBypassMan::Background::JobRunner.start!
|
70
|
-
ProconBypassMan::Websocket::
|
73
|
+
ProconBypassMan::Websocket::Client.start!
|
74
|
+
ProconBypassMan::QueueOverProcess.start!
|
71
75
|
|
72
76
|
ProconBypassMan::PrintMessageCommand.execute(text: "PBMを起動しています")
|
73
77
|
initialize_pbm
|
@@ -76,19 +80,24 @@ module ProconBypassMan
|
|
76
80
|
Runner.new(gadget: gadget, procon: procon).run # ここでblockingする
|
77
81
|
FileUtils.rm_rf(ProconBypassMan.pid_path)
|
78
82
|
FileUtils.rm_rf(ProconBypassMan.digest_path)
|
83
|
+
ProconBypassMan::QueueOverProcess.shutdown
|
79
84
|
rescue ProconBypassMan::CouldNotLoadConfigError
|
80
85
|
ProconBypassMan::SendErrorCommand.execute(error: "設定ファイルが不正です。設定ファイルの読み込みに失敗しました")
|
81
86
|
ProconBypassMan::DeviceStatus.change_to_setting_syntax_error_and_shutdown!
|
87
|
+
# TODO シグナルトラップをしていないのでUSR2を送ったときにプロセスが停止している. 明示的にハンドリングするべき.
|
82
88
|
ProconBypassMan.exit_if_allow(1) do
|
83
89
|
FileUtils.rm_rf(ProconBypassMan.pid_path)
|
84
90
|
FileUtils.rm_rf(ProconBypassMan.digest_path)
|
91
|
+
ProconBypassMan::QueueOverProcess.shutdown
|
85
92
|
end
|
86
93
|
rescue ProconBypassMan::ConnectDeviceCommand::NotFoundProconError
|
87
94
|
ProconBypassMan::SendErrorCommand.execute(error: "プロコンが見つかりませんでした。")
|
88
95
|
ProconBypassMan::DeviceStatus.change_to_procon_not_found_error!
|
96
|
+
# TODO シグナルトラップをしていないのでUSR2を送ったときにプロセスが停止している. 明示的にハンドリングするべき.
|
89
97
|
ProconBypassMan.exit_if_allow(1) do
|
90
98
|
FileUtils.rm_rf(ProconBypassMan.pid_path)
|
91
99
|
FileUtils.rm_rf(ProconBypassMan.digest_path)
|
100
|
+
ProconBypassMan::QueueOverProcess.shutdown
|
92
101
|
end
|
93
102
|
rescue ProconBypassMan::ConnectionError
|
94
103
|
begin
|
data/procon_bypass_man.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = spec.summary
|
13
13
|
spec.homepage = "https://github.com/splaplapla/procon_bypass_man"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new(">=
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
|
16
16
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
18
|
spec.metadata["source_code_uri"] = spec.homepage
|
data/project_template/app.rb
CHANGED
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.
|
4
|
+
version: 0.1.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiikko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pbmenv
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- docs/setting/splatoon2_macro_dasei_cancel.md
|
83
83
|
- docs/setting/splatoon2_macro_sokuwari_bubble.md
|
84
84
|
- docs/setting/splatoon2_recommended_setting.md
|
85
|
+
- docs/setting/splatoon2_shake_tansan.md
|
85
86
|
- docs/setup_raspi.md
|
86
87
|
- docs/setup_raspi.mitamae.rb
|
87
88
|
- docs/setup_raspi_by_mitamae.md
|
@@ -96,6 +97,7 @@ files:
|
|
96
97
|
- lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb
|
97
98
|
- lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb
|
98
99
|
- lib/procon_bypass_man/background/jobs/concerns/job_runnable.rb
|
100
|
+
- lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb
|
99
101
|
- lib/procon_bypass_man/background/jobs/report_boot_job.rb
|
100
102
|
- lib/procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job.rb
|
101
103
|
- lib/procon_bypass_man/background/jobs/report_error_job.rb
|
@@ -109,6 +111,15 @@ files:
|
|
109
111
|
- lib/procon_bypass_man/buttons_setting_configuration.rb
|
110
112
|
- lib/procon_bypass_man/buttons_setting_configuration/layer.rb
|
111
113
|
- lib/procon_bypass_man/buttons_setting_configuration/loader.rb
|
114
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer.rb
|
115
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/button.rb
|
116
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/button_list.rb
|
117
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/disable_macro_if_pressed.rb
|
118
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/flip_if_pressed.rb
|
119
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/force_neutral.rb
|
120
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/if_pressed.rb
|
121
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/if_pressed_allows_nil.rb
|
122
|
+
- lib/procon_bypass_man/buttons_setting_configuration/param_normalizer/open_macro_steps.rb
|
112
123
|
- lib/procon_bypass_man/buttons_setting_configuration/validator.rb
|
113
124
|
- lib/procon_bypass_man/bypass.rb
|
114
125
|
- lib/procon_bypass_man/bypass/usb_hid_logger.rb
|
@@ -127,6 +138,7 @@ files:
|
|
127
138
|
- lib/procon_bypass_man/device_procon_finder.rb
|
128
139
|
- lib/procon_bypass_man/device_status.rb
|
129
140
|
- lib/procon_bypass_man/domains.rb
|
141
|
+
- lib/procon_bypass_man/domains/analog_stick_position.rb
|
130
142
|
- lib/procon_bypass_man/domains/binary/base.rb
|
131
143
|
- lib/procon_bypass_man/domains/binary/has_immutable_binary.rb
|
132
144
|
- lib/procon_bypass_man/domains/binary/has_mutable_binary.rb
|
@@ -134,6 +146,7 @@ files:
|
|
134
146
|
- lib/procon_bypass_man/domains/binary/processing_procon_binary.rb
|
135
147
|
- lib/procon_bypass_man/domains/bypass_mode.rb
|
136
148
|
- lib/procon_bypass_man/io_monitor.rb
|
149
|
+
- lib/procon_bypass_man/plugin/splatoon2/macro/charge_tansan_bomb.rb
|
137
150
|
- lib/procon_bypass_man/plugin/splatoon2/macro/dasei_cancel.rb
|
138
151
|
- lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb
|
139
152
|
- lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_left_key.rb
|
@@ -146,6 +159,7 @@ files:
|
|
146
159
|
- lib/procon_bypass_man/processor.rb
|
147
160
|
- lib/procon_bypass_man/procon.rb
|
148
161
|
- lib/procon_bypass_man/procon/analog_stick_cap.rb
|
162
|
+
- lib/procon_bypass_man/procon/analog_stick_manipulator.rb
|
149
163
|
- lib/procon_bypass_man/procon/button.rb
|
150
164
|
- lib/procon_bypass_man/procon/button_collection.rb
|
151
165
|
- lib/procon_bypass_man/procon/consts.rb
|
@@ -153,12 +167,20 @@ files:
|
|
153
167
|
- lib/procon_bypass_man/procon/layer_changer.rb
|
154
168
|
- lib/procon_bypass_man/procon/macro.rb
|
155
169
|
- lib/procon_bypass_man/procon/macro_builder.rb
|
170
|
+
- lib/procon_bypass_man/procon/macro_plugin_map.rb
|
156
171
|
- lib/procon_bypass_man/procon/macro_registry.rb
|
157
172
|
- lib/procon_bypass_man/procon/mode_registry.rb
|
158
173
|
- lib/procon_bypass_man/procon/press_button_aware.rb
|
159
174
|
- lib/procon_bypass_man/procon/user_operation.rb
|
160
175
|
- lib/procon_bypass_man/procon/value_objects/analog_stick.rb
|
161
176
|
- lib/procon_bypass_man/procon/value_objects/procon_reader.rb
|
177
|
+
- lib/procon_bypass_man/remote_macro.rb
|
178
|
+
- lib/procon_bypass_man/remote_macro/queue_over_process.rb
|
179
|
+
- lib/procon_bypass_man/remote_macro/remote_macro_object.rb
|
180
|
+
- lib/procon_bypass_man/remote_macro/remote_macro_receiver.rb
|
181
|
+
- lib/procon_bypass_man/remote_macro/remote_macro_sender.rb
|
182
|
+
- lib/procon_bypass_man/remote_macro/task.rb
|
183
|
+
- lib/procon_bypass_man/remote_macro/task_queue.rb
|
162
184
|
- lib/procon_bypass_man/remote_pbm_action.rb
|
163
185
|
- lib/procon_bypass_man/remote_pbm_action/base_action.rb
|
164
186
|
- lib/procon_bypass_man/remote_pbm_action/change_pbm_version_action.rb
|
@@ -175,6 +197,7 @@ files:
|
|
175
197
|
- lib/procon_bypass_man/support/http_client.rb
|
176
198
|
- lib/procon_bypass_man/support/never_exit_accidentally.rb
|
177
199
|
- lib/procon_bypass_man/support/on_memory_cache.rb
|
200
|
+
- lib/procon_bypass_man/support/remote_macro_http_client.rb
|
178
201
|
- lib/procon_bypass_man/support/report_http_client.rb
|
179
202
|
- lib/procon_bypass_man/support/safe_timeout.rb
|
180
203
|
- lib/procon_bypass_man/support/send_device_stats_http_client.rb
|
@@ -185,8 +208,8 @@ files:
|
|
185
208
|
- lib/procon_bypass_man/support/yaml_writer.rb
|
186
209
|
- lib/procon_bypass_man/usb_device_controller.rb
|
187
210
|
- lib/procon_bypass_man/version.rb
|
211
|
+
- lib/procon_bypass_man/websocket/client.rb
|
188
212
|
- lib/procon_bypass_man/websocket/forever.rb
|
189
|
-
- lib/procon_bypass_man/websocket/pbm_job_client.rb
|
190
213
|
- lib/procon_bypass_man/websocket/watchdog.rb
|
191
214
|
- procon_bypass_man.gemspec
|
192
215
|
- project_template/README.md
|
@@ -213,7 +236,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
236
|
requirements:
|
214
237
|
- - ">="
|
215
238
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
239
|
+
version: 3.0.0
|
217
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
241
|
requirements:
|
219
242
|
- - ">="
|