procon_bypass_man 0.1.9 → 0.1.10
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/.gitignore +4 -0
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -8
- data/lib/procon_bypass_man/analog_stick_position.rb +2 -8
- data/lib/procon_bypass_man/boot_message.rb +1 -1
- data/lib/procon_bypass_man/buttons_setting_configuration.rb +100 -0
- data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +20 -0
- data/lib/procon_bypass_man/bypass.rb +57 -38
- data/lib/procon_bypass_man/callbacks.rb +70 -0
- data/lib/procon_bypass_man/configuration/layer.rb +18 -2
- data/lib/procon_bypass_man/configuration/loader.rb +8 -8
- data/lib/procon_bypass_man/configuration/validator.rb +1 -1
- data/lib/procon_bypass_man/configuration.rb +67 -77
- data/lib/procon_bypass_man/outbound/base.rb +40 -0
- data/lib/procon_bypass_man/outbound/error_reporter.rb +13 -0
- data/lib/procon_bypass_man/outbound/reporter.rb +12 -0
- data/lib/procon_bypass_man/outbound/usb_hid_data_reporter.rb +13 -0
- data/lib/procon_bypass_man/procon/analog_stick_cap.rb +1 -1
- data/lib/procon_bypass_man/procon/layer_changeable.rb +2 -2
- data/lib/procon_bypass_man/procon/macro_registry.rb +2 -2
- data/lib/procon_bypass_man/procon/mode_registry.rb +2 -2
- data/lib/procon_bypass_man/procon/user_operation.rb +4 -0
- data/lib/procon_bypass_man/procon.rb +9 -5
- data/lib/procon_bypass_man/runner.rb +1 -1
- data/lib/procon_bypass_man/uptime.rb +3 -1
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man.rb +20 -73
- data/project_template/README.md +1 -1
- data/project_template/app.rb +5 -5
- data/project_template/systemd_units/pbm_web.service +11 -0
- data/project_template/web.rb +16 -0
- data/sig/main.rbs +44 -4
- metadata +11 -4
- data/lib/procon_bypass_man/error_reporter.rb +0 -44
- data/lib/procon_bypass_man/reporter.rb +0 -42
@@ -0,0 +1,40 @@
|
|
1
|
+
module ProconBypassMan
|
2
|
+
module Outbound
|
3
|
+
class Base
|
4
|
+
class Client
|
5
|
+
def initialize(path: , server: )
|
6
|
+
@path = path
|
7
|
+
if server.is_a?(Array)
|
8
|
+
@server = server.first
|
9
|
+
else
|
10
|
+
@server = server
|
11
|
+
end
|
12
|
+
@hostname = `hostname`.chomp
|
13
|
+
end
|
14
|
+
|
15
|
+
def post(body: )
|
16
|
+
# TODO ここでvalidationする
|
17
|
+
if @server.nil?
|
18
|
+
ProconBypassMan.logger.info('送信先が未設定なのでスキップしました')
|
19
|
+
return
|
20
|
+
end
|
21
|
+
|
22
|
+
uri = URI.parse("#{@server}#{@path}")
|
23
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
24
|
+
http.use_ssl = uri.scheme === "https"
|
25
|
+
response = http.post(
|
26
|
+
uri.path,
|
27
|
+
{ report: body.to_json, hostname: @hostname }.to_json,
|
28
|
+
{ "Content-Type" => "application/json" },
|
29
|
+
)
|
30
|
+
unless response.code == /^20/
|
31
|
+
ProconBypassMan.logger.error(response.body)
|
32
|
+
end
|
33
|
+
rescue => e
|
34
|
+
puts e
|
35
|
+
ProconBypassMan.logger.error(e)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "procon_bypass_man/outbound/base"
|
2
|
+
|
3
|
+
class ProconBypassMan::ErrorReporter < ProconBypassMan::Outbound::Base
|
4
|
+
PATH = "/api/error_reports"
|
5
|
+
|
6
|
+
def self.report(body: )
|
7
|
+
Client.new(
|
8
|
+
path: PATH,
|
9
|
+
server: ProconBypassMan.config.api_server,
|
10
|
+
).post(body: body.full_message.to_json)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "procon_bypass_man/outbound/base"
|
2
|
+
|
3
|
+
class ProconBypassMan::Reporter < ProconBypassMan::Outbound::Base
|
4
|
+
PATH = "/api/reports"
|
5
|
+
|
6
|
+
def self.report(body: )
|
7
|
+
Client.new(
|
8
|
+
path: PATH,
|
9
|
+
server: ProconBypassMan.config.api_server,
|
10
|
+
).post(body: body.to_json)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "procon_bypass_man/outbound/base"
|
2
|
+
|
3
|
+
class ProconBypassMan::UsbHidDataReporter < ProconBypassMan::Outbound::Base
|
4
|
+
PATH = "/api/usb_hid_chunks"
|
5
|
+
|
6
|
+
def self.report(body: )
|
7
|
+
Client.new(
|
8
|
+
path: PATH,
|
9
|
+
server: ProconBypassMan.config.internal_api_servers,
|
10
|
+
).post(body: body.to_json)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -22,7 +22,7 @@ class ProconBypassMan::Procon::AnalogStickCap
|
|
22
22
|
attr_accessor :neutral_position
|
23
23
|
|
24
24
|
def initialize(binary)
|
25
|
-
@neutral_position = ProconBypassMan::
|
25
|
+
@neutral_position = ProconBypassMan::ButtonsSettingConfiguration.instance.neutral_position
|
26
26
|
@binary = binary
|
27
27
|
|
28
28
|
byte6 = binary[6].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
|
@@ -16,10 +16,10 @@ module ProconBypassMan::Procon::LayerChangeable
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def change_layer?
|
19
|
-
if ProconBypassMan::
|
19
|
+
if ProconBypassMan::ButtonsSettingConfiguration.instance.prefix_keys.empty?
|
20
20
|
raise "prefix_keysが未設定です"
|
21
21
|
end
|
22
|
-
ProconBypassMan::
|
22
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.prefix_keys.map { |b| pressed_button?(b) }.all?
|
23
23
|
end
|
24
24
|
|
25
25
|
def pressed_next_layer?
|
@@ -37,11 +37,11 @@ class ProconBypassMan::Procon::MacroRegistry
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.reset!
|
40
|
-
ProconBypassMan::
|
40
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.macro_plugins = {}
|
41
41
|
end
|
42
42
|
|
43
43
|
def self.plugins
|
44
|
-
ProconBypassMan::
|
44
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.macro_plugins
|
45
45
|
end
|
46
46
|
|
47
47
|
reset!
|
@@ -35,11 +35,11 @@ class ProconBypassMan::Procon::ModeRegistry
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.reset!
|
38
|
-
ProconBypassMan::
|
38
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.mode_plugins = {}
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.plugins
|
42
|
-
ProconBypassMan::
|
42
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.mode_plugins
|
43
43
|
end
|
44
44
|
|
45
45
|
reset!
|
@@ -31,6 +31,8 @@ class ProconBypassMan::Procon
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def unpress_button(button)
|
34
|
+
return if not pressed_button?(button)
|
35
|
+
|
34
36
|
byte_position = ButtonCollection.load(button).byte_position
|
35
37
|
value = binary[byte_position].unpack("H*").first.to_i(16) - (2**ButtonCollection.load(button).bit_position)
|
36
38
|
binary[byte_position] = ["%02X" % value.to_s].pack("H*")
|
@@ -41,6 +43,8 @@ class ProconBypassMan::Procon
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def press_button(button)
|
46
|
+
return if pressed_button?(button)
|
47
|
+
|
44
48
|
byte_position = ButtonCollection.load(button).byte_position
|
45
49
|
value = binary[byte_position].unpack("H*").first.to_i(16) + (2**ButtonCollection.load(button).bit_position)
|
46
50
|
binary[byte_position] = ["%02X" % value.to_s].pack("H*")
|
@@ -31,7 +31,7 @@ class ProconBypassMan::Procon
|
|
31
31
|
def current_layer_key; @@status[:current_layer_key]; end
|
32
32
|
|
33
33
|
def current_layer
|
34
|
-
ProconBypassMan::
|
34
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.layers[current_layer_key]
|
35
35
|
end
|
36
36
|
|
37
37
|
def apply!
|
@@ -95,10 +95,14 @@ class ProconBypassMan::Procon
|
|
95
95
|
return user_operation.binary
|
96
96
|
end
|
97
97
|
|
98
|
+
current_layer.disables.each do |button|
|
99
|
+
user_operation.unpress_button(button)
|
100
|
+
end
|
101
|
+
|
98
102
|
current_layer.left_analog_stick_caps.each do |button, options|
|
99
103
|
if button.nil? || button.all? { |b| user_operation.pressed_button?(b) }
|
100
104
|
options[:force_neutral]&.each do |force_neutral_button|
|
101
|
-
user_operation.
|
105
|
+
user_operation.unpress_button(force_neutral_button)
|
102
106
|
end
|
103
107
|
user_operation.apply_left_analog_stick_cap(cap: options[:cap])
|
104
108
|
end
|
@@ -107,7 +111,7 @@ class ProconBypassMan::Procon
|
|
107
111
|
current_layer.flip_buttons.each do |button, options|
|
108
112
|
# 何もしないで常に連打
|
109
113
|
if !options[:if_pressed] && status[button]
|
110
|
-
user_operation.press_button(button)
|
114
|
+
user_operation.press_button(button)
|
111
115
|
next
|
112
116
|
end
|
113
117
|
|
@@ -118,7 +122,7 @@ class ProconBypassMan::Procon
|
|
118
122
|
end
|
119
123
|
|
120
124
|
options[:force_neutral]&.each do |force_neutral_button|
|
121
|
-
user_operation.
|
125
|
+
user_operation.unpress_button(force_neutral_button)
|
122
126
|
end
|
123
127
|
end
|
124
128
|
end
|
@@ -128,7 +132,7 @@ class ProconBypassMan::Procon
|
|
128
132
|
user_operation.unpress_button(from_button)
|
129
133
|
# TODO 2重でpressしないようにしたい
|
130
134
|
to_buttons[:to].each do |to_button|
|
131
|
-
user_operation.press_button(to_button)
|
135
|
+
user_operation.press_button(to_button)
|
132
136
|
end
|
133
137
|
end
|
134
138
|
end
|
@@ -35,7 +35,7 @@ class ProconBypassMan::Runner
|
|
35
35
|
Process.wait
|
36
36
|
ProconBypassMan.logger.info("Reloading config file")
|
37
37
|
begin
|
38
|
-
ProconBypassMan::
|
38
|
+
ProconBypassMan::ButtonsSettingConfiguration::Loader.reload_setting
|
39
39
|
puts "設定ファイルの再読み込みができました"
|
40
40
|
rescue ProconBypassMan::CouldNotLoadConfigError
|
41
41
|
ProconBypassMan.logger.error "設定ファイルが不正です。再読み込みができませんでした"
|
@@ -3,7 +3,9 @@ require "time"
|
|
3
3
|
module ProconBypassMan
|
4
4
|
class Uptime
|
5
5
|
def self.from_boot
|
6
|
-
|
6
|
+
result = `uptime -s`.chomp
|
7
|
+
return -1 if result == '' # darwin系だとsオプションが使えない
|
8
|
+
boot_time = result.to_i
|
7
9
|
return Time.now.to_i - boot_time.to_i
|
8
10
|
rescue => e
|
9
11
|
ProconBypassMan.logger.error(e)
|
data/lib/procon_bypass_man.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require "logger"
|
2
2
|
require 'yaml'
|
3
|
+
require "json"
|
4
|
+
require "net/http"
|
3
5
|
require "fileutils"
|
4
6
|
|
5
7
|
require_relative "procon_bypass_man/version"
|
8
|
+
require_relative "procon_bypass_man/callbacks"
|
6
9
|
require_relative "procon_bypass_man/analog_stick_position"
|
7
10
|
require_relative "procon_bypass_man/timer"
|
8
11
|
require_relative "procon_bypass_man/bypass"
|
@@ -10,43 +13,42 @@ require_relative "procon_bypass_man/device_connector"
|
|
10
13
|
require_relative "procon_bypass_man/runner"
|
11
14
|
require_relative "procon_bypass_man/processor"
|
12
15
|
require_relative "procon_bypass_man/configuration"
|
16
|
+
require_relative "procon_bypass_man/buttons_setting_configuration"
|
13
17
|
require_relative "procon_bypass_man/procon"
|
14
18
|
require_relative "procon_bypass_man/procon/debug_dumper"
|
15
19
|
require_relative "procon_bypass_man/procon/analog_stick_cap"
|
16
|
-
require_relative "procon_bypass_man/reporter"
|
17
|
-
require_relative "procon_bypass_man/error_reporter"
|
20
|
+
require_relative "procon_bypass_man/outbound/reporter"
|
21
|
+
require_relative "procon_bypass_man/outbound/error_reporter"
|
22
|
+
require_relative "procon_bypass_man/outbound/usb_hid_data_reporter"
|
18
23
|
require_relative "procon_bypass_man/on_memory_cache"
|
19
24
|
|
20
25
|
STDOUT.sync = true
|
21
26
|
Thread.abort_on_exception = true
|
22
27
|
|
23
|
-
# new feature from ruby3.0
|
24
|
-
if GC.respond_to?(:auto_compact)
|
25
|
-
GC.auto_compact = true
|
26
|
-
end
|
27
|
-
|
28
28
|
module ProconBypassMan
|
29
|
+
extend ProconBypassMan::Configuration::ClassAttributes
|
30
|
+
|
29
31
|
class ProConRejected < StandardError; end
|
30
32
|
class CouldNotLoadConfigError < StandardError; end
|
31
33
|
class FirstConnectionError < StandardError; end
|
32
34
|
class EternalConnectionError < StandardError; end
|
33
35
|
|
34
|
-
def self.
|
36
|
+
def self.buttons_setting_configure(setting_path: nil, &block)
|
35
37
|
unless setting_path
|
36
38
|
logger.warn "setting_pathが未設定です。設定ファイルのライブリロードが使えません。"
|
37
39
|
end
|
38
40
|
|
39
41
|
if block_given?
|
40
|
-
ProconBypassMan::
|
42
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.instance_eval(&block)
|
41
43
|
else
|
42
|
-
ProconBypassMan::
|
44
|
+
ProconBypassMan::ButtonsSettingConfiguration::Loader.load(setting_path: setting_path)
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
48
|
def self.run(setting_path: nil, &block)
|
47
49
|
ProconBypassMan.logger.info "PBMを起動しています"
|
48
50
|
puts "PBMを起動しています"
|
49
|
-
|
51
|
+
buttons_setting_configure(setting_path: setting_path, &block)
|
50
52
|
File.write(pid_path, $$)
|
51
53
|
Runner.new.run
|
52
54
|
rescue CouldNotLoadConfigError
|
@@ -65,76 +67,21 @@ module ProconBypassMan
|
|
65
67
|
retry
|
66
68
|
end
|
67
69
|
|
68
|
-
def self.
|
69
|
-
@@
|
70
|
-
|
71
|
-
|
72
|
-
# @return [Logger]
|
73
|
-
def self.logger
|
74
|
-
if ENV["PBM_ENV"] == 'test'
|
75
|
-
return Logger.new($stdout)
|
76
|
-
end
|
77
|
-
|
78
|
-
if defined?(@@logger) && @@logger.is_a?(Logger)
|
79
|
-
@@logger
|
80
|
-
else
|
81
|
-
Logger.new(nil)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def self.enable_critical_error_logging!
|
86
|
-
@@enable_critical_error_logging = true
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.error_logger
|
90
|
-
if defined?(@@enable_critical_error_logging)
|
91
|
-
@@error_logger ||= Logger.new("#{ProconBypassMan.root}/error.log", 5, 1024 * 1024 * 10)
|
92
|
-
else
|
93
|
-
Logger.new(nil)
|
94
|
-
end
|
70
|
+
def self.configure(&block)
|
71
|
+
@@configuration = ProconBypassMan::Configuration.new
|
72
|
+
@@configuration.instance_eval(&block)
|
73
|
+
@@configuration
|
95
74
|
end
|
96
75
|
|
97
|
-
def self.
|
98
|
-
@@
|
76
|
+
def self.config
|
77
|
+
@@configuration ||= ProconBypassMan::Configuration.new
|
99
78
|
end
|
100
79
|
|
101
80
|
def self.reset!
|
102
81
|
ProconBypassMan::Procon::MacroRegistry.reset!
|
103
82
|
ProconBypassMan::Procon::ModeRegistry.reset!
|
104
83
|
ProconBypassMan::Procon.reset!
|
105
|
-
ProconBypassMan::
|
84
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.reset!
|
106
85
|
ProconBypassMan::IOMonitor.reset!
|
107
86
|
end
|
108
|
-
|
109
|
-
def self.root
|
110
|
-
if defined?(@@root)
|
111
|
-
@@root
|
112
|
-
else
|
113
|
-
File.expand_path('..', __dir__).freeze
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def self.root=(path)
|
118
|
-
@@root = path
|
119
|
-
end
|
120
|
-
|
121
|
-
def self.api_server=(api_server)
|
122
|
-
@@api_server = api_server
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.api_server
|
126
|
-
if defined?(@@api_server)
|
127
|
-
@@api_server
|
128
|
-
else
|
129
|
-
nil
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def self.cache
|
134
|
-
@@cache_table ||= ProconBypassMan::OnMemoryCache.new
|
135
|
-
end
|
136
|
-
|
137
|
-
def self.digest_path
|
138
|
-
"#{root}/.setting_yaml_digest"
|
139
|
-
end
|
140
87
|
end
|
data/project_template/README.md
CHANGED
@@ -3,6 +3,7 @@ https://github.com/splaplapla/pbmenv で使っているファイルです
|
|
3
3
|
|
4
4
|
## systemd
|
5
5
|
* sudo ln -s /usr/share/pbm/current/systemd_units/pbm.service /etc/systemd/system/pbm.service
|
6
|
+
* sudo ln -s /usr/share/pbm/current/systemd_units/pbm_web.service /etc/systemd/system/pbm_web.service
|
6
7
|
* commands
|
7
8
|
* systemctl daemon-reload
|
8
9
|
* systemctl enable pbm.service
|
@@ -14,4 +15,3 @@ https://github.com/splaplapla/pbmenv で使っているファイルです
|
|
14
15
|
|
15
16
|
### ログ
|
16
17
|
* journalctl -xe -f
|
17
|
-
|
data/project_template/app.rb
CHANGED
@@ -9,12 +9,12 @@ gemfile do
|
|
9
9
|
gem 'procon_bypass_man-splatoon2', github: 'splaplapla/procon_bypass_man-splatoon2', tag: "0.1.1"
|
10
10
|
end
|
11
11
|
|
12
|
-
ProconBypassMan.
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
ProconBypassMan.configure do |config|
|
13
|
+
config.root = File.expand_path(__dir__)
|
14
|
+
config.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
|
15
|
+
config.logger.level = :debug
|
16
16
|
# pbm.api_server = 'https://...'
|
17
|
-
|
17
|
+
config.enable_critical_error_logging!
|
18
18
|
end
|
19
19
|
|
20
20
|
ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
|
@@ -0,0 +1,11 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=PBM WEB
|
3
|
+
|
4
|
+
[Service]
|
5
|
+
Type=simple
|
6
|
+
WorkingDirectory=/home/pi/src/procon_bypass_man_sample
|
7
|
+
ExecStart=/bin/bash -c "/home/pi/.rbenv/versions/3.0.1/bin/ruby /usr/share/pbm/current/web.rb"
|
8
|
+
Restart=always
|
9
|
+
|
10
|
+
[Install]
|
11
|
+
WantedBy=multi-user.target
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/inline'
|
4
|
+
|
5
|
+
gemfile do
|
6
|
+
source 'https://rubygems.org'
|
7
|
+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
8
|
+
gem 'procon_bypass_man-web', '0.1.2'
|
9
|
+
end
|
10
|
+
|
11
|
+
ProconBypassMan::Web.configure do |config|
|
12
|
+
config.root = File.expand_path(__dir__)
|
13
|
+
config.logger = Logger.new("#{ProconBypassMan::Web.root}/web.log", 1, 1024 * 1024 * 10)
|
14
|
+
end
|
15
|
+
|
16
|
+
ProconBypassMan::Web::Server.start
|
data/sig/main.rbs
CHANGED
@@ -63,7 +63,7 @@ class AnalogStickPosition
|
|
63
63
|
end
|
64
64
|
|
65
65
|
module ProconBypassMan
|
66
|
-
class
|
66
|
+
class ButtonsSettingConfiguration
|
67
67
|
attr_accessor layers: untyped
|
68
68
|
|
69
69
|
attr_accessor setting_path: untyped
|
@@ -101,7 +101,7 @@ module ProconBypassMan
|
|
101
101
|
end
|
102
102
|
|
103
103
|
module ProconBypassMan
|
104
|
-
class
|
104
|
+
class ButtonsSettingConfiguration
|
105
105
|
class Layer
|
106
106
|
attr_accessor mode: untyped
|
107
107
|
|
@@ -131,7 +131,7 @@ module ProconBypassMan
|
|
131
131
|
end
|
132
132
|
|
133
133
|
module ProconBypassMan
|
134
|
-
class
|
134
|
+
class ButtonsSettingConfiguration
|
135
135
|
module Loader
|
136
136
|
def self.load: (setting_path: untyped setting_path) -> untyped
|
137
137
|
|
@@ -141,7 +141,7 @@ module ProconBypassMan
|
|
141
141
|
end
|
142
142
|
|
143
143
|
module ProconBypassMan
|
144
|
-
class
|
144
|
+
class ButtonsSettingConfiguration
|
145
145
|
class Validator
|
146
146
|
def initialize: (untyped config) -> untyped
|
147
147
|
|
@@ -167,6 +167,46 @@ module ProconBypassMan
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
+
class ProconBypassMan::Configuration
|
171
|
+
module ClassAttributes
|
172
|
+
def root: () -> untyped
|
173
|
+
|
174
|
+
def logger: () -> untyped
|
175
|
+
|
176
|
+
def error_logger: () -> untyped
|
177
|
+
|
178
|
+
def pid_path: () -> untyped
|
179
|
+
|
180
|
+
def digest_path: () -> untyped
|
181
|
+
|
182
|
+
def cache: () -> untyped
|
183
|
+
|
184
|
+
def config: () -> untyped
|
185
|
+
end
|
186
|
+
|
187
|
+
attr_reader api_server: untyped
|
188
|
+
|
189
|
+
attr_accessor enable_critical_error_logging: untyped
|
190
|
+
|
191
|
+
def root=: (untyped path) -> untyped
|
192
|
+
|
193
|
+
def root: () -> untyped
|
194
|
+
|
195
|
+
def api_server=: (untyped api_server) -> untyped
|
196
|
+
|
197
|
+
def logger=: (untyped logger) -> untyped
|
198
|
+
|
199
|
+
def logger: () -> untyped
|
200
|
+
|
201
|
+
def error_logger: () -> untyped
|
202
|
+
|
203
|
+
def digest_path: () -> ::String
|
204
|
+
|
205
|
+
# @return [String] pbm-webの接続先
|
206
|
+
def internal_api_servers: () -> untyped
|
207
|
+
end
|
208
|
+
|
209
|
+
|
170
210
|
class ProconBypassMan::DeviceConnector
|
171
211
|
class BytesMismatchError < StandardError
|
172
212
|
end
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiikko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: extension for Nintendo Switch Pro Controller
|
14
14
|
email:
|
@@ -42,15 +42,21 @@ files:
|
|
42
42
|
- lib/procon_bypass_man.rb
|
43
43
|
- lib/procon_bypass_man/analog_stick_position.rb
|
44
44
|
- lib/procon_bypass_man/boot_message.rb
|
45
|
+
- lib/procon_bypass_man/buttons_setting_configuration.rb
|
45
46
|
- lib/procon_bypass_man/bypass.rb
|
47
|
+
- lib/procon_bypass_man/bypass/usb_hid_logger.rb
|
48
|
+
- lib/procon_bypass_man/callbacks.rb
|
46
49
|
- lib/procon_bypass_man/configuration.rb
|
47
50
|
- lib/procon_bypass_man/configuration/layer.rb
|
48
51
|
- lib/procon_bypass_man/configuration/loader.rb
|
49
52
|
- lib/procon_bypass_man/configuration/validator.rb
|
50
53
|
- lib/procon_bypass_man/device_connector.rb
|
51
|
-
- lib/procon_bypass_man/error_reporter.rb
|
52
54
|
- lib/procon_bypass_man/io_monitor.rb
|
53
55
|
- lib/procon_bypass_man/on_memory_cache.rb
|
56
|
+
- lib/procon_bypass_man/outbound/base.rb
|
57
|
+
- lib/procon_bypass_man/outbound/error_reporter.rb
|
58
|
+
- lib/procon_bypass_man/outbound/reporter.rb
|
59
|
+
- lib/procon_bypass_man/outbound/usb_hid_data_reporter.rb
|
54
60
|
- lib/procon_bypass_man/processor.rb
|
55
61
|
- lib/procon_bypass_man/procon.rb
|
56
62
|
- lib/procon_bypass_man/procon/analog_stick_cap.rb
|
@@ -64,7 +70,6 @@ files:
|
|
64
70
|
- lib/procon_bypass_man/procon/press_button_aware.rb
|
65
71
|
- lib/procon_bypass_man/procon/pressed_button_helper.rb
|
66
72
|
- lib/procon_bypass_man/procon/user_operation.rb
|
67
|
-
- lib/procon_bypass_man/reporter.rb
|
68
73
|
- lib/procon_bypass_man/runner.rb
|
69
74
|
- lib/procon_bypass_man/timer.rb
|
70
75
|
- lib/procon_bypass_man/uptime.rb
|
@@ -74,6 +79,8 @@ files:
|
|
74
79
|
- project_template/app.rb
|
75
80
|
- project_template/setting.yml
|
76
81
|
- project_template/systemd_units/pbm.service
|
82
|
+
- project_template/systemd_units/pbm_web.service
|
83
|
+
- project_template/web.rb
|
77
84
|
- sig/README.rb
|
78
85
|
- sig/main.rbs
|
79
86
|
homepage: https://github.com/splaplapla/procon_bypass_man
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require "net/http"
|
2
|
-
require "json"
|
3
|
-
|
4
|
-
class ProconBypassMan::ErrorReporter
|
5
|
-
PATH = "/api/error_reports" # POST
|
6
|
-
|
7
|
-
class Client
|
8
|
-
def initialize
|
9
|
-
@server = ProconBypassMan.api_server
|
10
|
-
@hostname = `hostname`.chomp
|
11
|
-
end
|
12
|
-
|
13
|
-
def post(body: )
|
14
|
-
# TODO ここでvalidationする
|
15
|
-
if @server.nil?
|
16
|
-
ProconBypassMan.logger.info('送信先が未設定なのでスキップしました')
|
17
|
-
return
|
18
|
-
end
|
19
|
-
|
20
|
-
uri = URI.parse("#{@server}#{PATH}")
|
21
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
22
|
-
http.use_ssl = uri.scheme === "https"
|
23
|
-
response = http.post(
|
24
|
-
uri.path,
|
25
|
-
{ report: body.full_message.to_json, hostname: @hostname }.to_json,
|
26
|
-
{ "Content-Type" => "application/json" },
|
27
|
-
)
|
28
|
-
unless response.code == /^20/
|
29
|
-
ProconBypassMan.logger.error(response.body)
|
30
|
-
end
|
31
|
-
rescue => e
|
32
|
-
puts e
|
33
|
-
ProconBypassMan.logger.error(e)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.report(body: )
|
38
|
-
ProconBypassMan.logger.error(body)
|
39
|
-
Client.new.post(body: body)
|
40
|
-
rescue => e
|
41
|
-
ProconBypassMan.logger.error(e)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "net/http"
|
2
|
-
require "json"
|
3
|
-
|
4
|
-
class ProconBypassMan::Reporter
|
5
|
-
PATH = "/api/reports" # POST
|
6
|
-
|
7
|
-
class Client
|
8
|
-
def initialize
|
9
|
-
@server = ProconBypassMan.api_server
|
10
|
-
@hostname = `hostname`.chomp
|
11
|
-
end
|
12
|
-
|
13
|
-
def post(body: )
|
14
|
-
# TODO ここでvalidationする
|
15
|
-
if @server.nil?
|
16
|
-
ProconBypassMan.logger.info('送信先が未設定なのでスキップしました')
|
17
|
-
return
|
18
|
-
end
|
19
|
-
|
20
|
-
uri = URI.parse("#{@server}#{PATH}")
|
21
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
22
|
-
http.use_ssl = uri.scheme === "https"
|
23
|
-
response = http.post(
|
24
|
-
uri.path,
|
25
|
-
{ report: body.to_json, hostname: @hostname }.to_json,
|
26
|
-
{ "Content-Type" => "application/json" },
|
27
|
-
)
|
28
|
-
unless response.code == /^20/
|
29
|
-
ProconBypassMan.logger.error(response.body)
|
30
|
-
end
|
31
|
-
rescue => e
|
32
|
-
puts e
|
33
|
-
ProconBypassMan.logger.error(e)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.report(body: )
|
38
|
-
Client.new.post(body: body)
|
39
|
-
rescue => e
|
40
|
-
ProconBypassMan.logger.error(e)
|
41
|
-
end
|
42
|
-
end
|