procon_bypass_man 0.1.20 → 0.1.20.1
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/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/lib/procon_bypass_man/bypass/bypass_mode.rb +21 -0
- data/lib/procon_bypass_man/bypass.rb +1 -0
- data/lib/procon_bypass_man/commands/bypass_command.rb +21 -2
- data/lib/procon_bypass_man/configuration.rb +15 -0
- data/lib/procon_bypass_man/scheduler.rb +1 -1
- data/lib/procon_bypass_man/version.rb +1 -1
- data/project_template/app.rb +3 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29c989ae104586849ff797f9086b997294925372a2997797da279c6b2178098a
|
4
|
+
data.tar.gz: d23be38b1c10f9f856407fa65db924e4f8528d453c5fe59f8bdc0832dc3e93f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53a8875027f7b2e172bbb1873d1b76ff7ec191531e36c43dd044cc26e9bb54c80c2e1c9b63e5c9c0ec9f42829fd502f3cdbd9ac2ba41862c7835b97c8d3b66ac
|
7
|
+
data.tar.gz: 5476c22c2648861968b08ace121eef62993c3c05685ecbd08829ab5bdae7a66045a96eb3b22c50af154393edf7f9b027e91a66d70e10f4d1db67bf8d8b240822
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
class ProconBypassMan::BypassMode
|
2
|
+
TYPE_NORMAL = :normal
|
3
|
+
TYPE_AGGRESSIVE = :aggressive
|
4
|
+
TYPES = [TYPE_NORMAL, TYPE_AGGRESSIVE]
|
5
|
+
|
6
|
+
DEFAULT_GADGET_TO_PROCON_INTERVAL = 0.5
|
7
|
+
|
8
|
+
attr_accessor :mode, :gadget_to_procon_interval
|
9
|
+
|
10
|
+
def self.default_value
|
11
|
+
new(
|
12
|
+
mode: TYPE_NORMAL,
|
13
|
+
gadget_to_procon_interval: DEFAULT_GADGET_TO_PROCON_INTERVAL,
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(mode: , gadget_to_procon_interval: )
|
18
|
+
@mode = mode.to_sym
|
19
|
+
@gadget_to_procon_interval = gadget_to_procon_interval
|
20
|
+
end
|
21
|
+
end
|
@@ -27,12 +27,31 @@ class ProconBypassMan::BypassCommand
|
|
27
27
|
monitor1 = ProconBypassMan::IOMonitor.new(label: "switch -> procon")
|
28
28
|
monitor2 = ProconBypassMan::IOMonitor.new(label: "procon -> switch")
|
29
29
|
ProconBypassMan.logger.info "Thread1を起動します"
|
30
|
+
|
31
|
+
@send_interval = 0.005
|
32
|
+
|
30
33
|
t1 = Thread.new do
|
31
|
-
|
34
|
+
timer = ProconBypassMan::SafeTimeout.new(timeout: Time.now + 10)
|
35
|
+
@did_first_step = false
|
32
36
|
loop do
|
37
|
+
bypass = ProconBypassMan::Bypass.new(gadget: @gadget, procon: @procon, monitor: monitor1)
|
33
38
|
break if $will_terminate_token
|
39
|
+
!@did_first_step && timer.throw_if_timeout!
|
34
40
|
bypass.send_gadget_to_procon!
|
35
|
-
sleep(
|
41
|
+
sleep(@send_interval)
|
42
|
+
rescue ProconBypassMan::SafeTimeout::Timeout
|
43
|
+
case ProconBypassMan.config.bypass_mode.mode
|
44
|
+
when ProconBypassMan::BypassMode::TYPE_AGGRESSIVE
|
45
|
+
ProconBypassMan.logger.info "10秒経過したのでThread1を終了します"
|
46
|
+
monitor1.shutdown
|
47
|
+
break
|
48
|
+
when ProconBypassMan::BypassMode::TYPE_NORMAL
|
49
|
+
ProconBypassMan.logger.info "10秒経過したのでsend_intervalを長くします"
|
50
|
+
@send_interval = ProconBypassMan.config.bypass_mode.gadget_to_procon_interval
|
51
|
+
else
|
52
|
+
raise "unknown type"
|
53
|
+
end
|
54
|
+
@did_first_step = true
|
36
55
|
rescue Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN => e
|
37
56
|
ProconBypassMan::SendErrorCommand.execute(error: "Switchとの切断されました.終了処理を開始します. #{e.full_message}")
|
38
57
|
Process.kill "TERM", Process.ppid
|
@@ -65,6 +65,17 @@ class ProconBypassMan::Configuration
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
def bypass_mode=(value)
|
69
|
+
@bypass_mode = ProconBypassMan::BypassMode.new(
|
70
|
+
mode: value[:mode],
|
71
|
+
gadget_to_procon_interval: value[:gadget_to_procon_interval],
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
def bypass_mode
|
76
|
+
@bypass_mode || ProconBypassMan::BypassMode.default_value
|
77
|
+
end
|
78
|
+
|
68
79
|
def api_servers=(api_servers)
|
69
80
|
@api_servers = api_servers
|
70
81
|
return self
|
@@ -156,6 +167,10 @@ class ProconBypassMan::Configuration
|
|
156
167
|
end
|
157
168
|
end
|
158
169
|
|
170
|
+
def has_api_server?
|
171
|
+
not api_servers.length.zero?
|
172
|
+
end
|
173
|
+
|
159
174
|
def verbose_bypass_log
|
160
175
|
@verbose_bypass_log || !!ENV["VERBOSE_BYPASS_LOG"]
|
161
176
|
end
|
data/project_template/app.rb
CHANGED
@@ -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.20'
|
8
|
+
gem 'procon_bypass_man', '0.1.20.1'
|
9
9
|
end
|
10
10
|
|
11
11
|
ProconBypassMan.configure do |config|
|
@@ -17,6 +17,8 @@ ProconBypassMan.configure do |config|
|
|
17
17
|
config.enable_critical_error_logging = true
|
18
18
|
# pbm-cloudで使う場合はnever_exitにtrueをセットしてください. trueがセットされている場合、不慮の事故が発生してもプロセスが終了しなくなります
|
19
19
|
config.never_exit_accidentally = true
|
20
|
+
# 操作が高頻度で固まるときは、 gadget_to_procon_interval の数値は大きくしてください
|
21
|
+
config.bypass_mode = { mode: :normal, gadget_to_procon_interval: 0.5 }
|
20
22
|
end
|
21
23
|
|
22
24
|
ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: procon_bypass_man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.20
|
4
|
+
version: 0.1.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiikko
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/procon_bypass_man/buttons_setting_configuration/loader.rb
|
110
110
|
- lib/procon_bypass_man/buttons_setting_configuration/validator.rb
|
111
111
|
- lib/procon_bypass_man/bypass.rb
|
112
|
+
- lib/procon_bypass_man/bypass/bypass_mode.rb
|
112
113
|
- lib/procon_bypass_man/bypass/usb_hid_logger.rb
|
113
114
|
- lib/procon_bypass_man/commands.rb
|
114
115
|
- lib/procon_bypass_man/commands/bypass_command.rb
|