vtacfriendly 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/vtac-ui +104 -0
- data/lib/vtac_friendly/analytics_tab.rb +68 -0
- data/lib/vtac_friendly/config_tab.rb +55 -0
- data/lib/vtac_friendly/system_tab.rb +31 -0
- data/lib/vtac_friendly/vtac_client.rb +16 -0
- data/lib/vtac_friendly/vtac_packet.rb +37 -0
- data/lib/vtac_friendly.rb +19 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c46638a042bcc01490a05eb4b0b91d51b93e50a288bd35fe205fa723dff374be
|
4
|
+
data.tar.gz: 411b3df41a0db976bb19a39d4ccc0eb51257e2bae7e68b46718d3224e61eb0a7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c144c9f1bbfd8dd7c6be8ee7891ac7bf9744ea2c362d237049882ebe1f98237c56b1a7f932a0587b7d47173ff0c488d19a2babdb06e7c946634d488098ef2292
|
7
|
+
data.tar.gz: 6f0619deec5fc44ea5404c8d569f4acb0961617f9872b20917eaecd187963aeb5cec7a8dba01984b69e992ddf6f4b0f19146bcc47c942f31c79e53fdc15d86e2
|
data/bin/vtac-ui
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/vtac_friendly.rb"
|
4
|
+
require "argparse"
|
5
|
+
require "io/console"
|
6
|
+
|
7
|
+
switches = {
|
8
|
+
p: { has_argument: true },
|
9
|
+
}
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
args = ArgsParser::Args.new(switches: switches, options: options)
|
13
|
+
|
14
|
+
# Connect to client
|
15
|
+
|
16
|
+
srv = VtacFriendly::Client.connect(args.data[0], args.switches[:p] ? args.switches[:p].to_i : 5582)
|
17
|
+
server = srv[0]
|
18
|
+
server_name = srv[1]
|
19
|
+
sock_domain, remote_port, remote_hostname, remote_ip = server.peeraddr
|
20
|
+
|
21
|
+
bb = (R::C.color :blue) + (R::F.bold)
|
22
|
+
rb = R::F.reset(R::F.bold) + (R::C.color :reset)
|
23
|
+
|
24
|
+
ctab = :analytics
|
25
|
+
|
26
|
+
R::Cr.hide
|
27
|
+
|
28
|
+
loop do
|
29
|
+
R::S.clear
|
30
|
+
R::Cr.go_to_pos(0,0)
|
31
|
+
puts "Connected to #{server_name}@#{remote_ip}"
|
32
|
+
|
33
|
+
if ctab == :analytics
|
34
|
+
puts "_.f:bold.__.cb:black._Analytics_.f:reset.__.cb:gray._ConfigSystem".to_ftext
|
35
|
+
VtacFriendly::AnalyticsTab.show server
|
36
|
+
|
37
|
+
R::Cr.go_to_pos(0, R::S.height)
|
38
|
+
R::C.color :gray, type: :bg, mode: :set
|
39
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}R#{rb} Reset analytics"
|
40
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
41
|
+
elsif ctab == :config
|
42
|
+
puts "_.cb:gray._Analytics_.f:bold.__.cb:black._Config_.f:reset.__.cb:gray._System".to_ftext
|
43
|
+
VtacFriendly::ConfigTab.show server
|
44
|
+
|
45
|
+
R::Cr.go_to_pos(0, R::S.height)
|
46
|
+
R::C.color :gray, type: :bg, mode: :set
|
47
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}P#{rb} Change pxsize #{bb}R#{rb} Change room length #{bb}M#{rb} Toggle mirroring"
|
48
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
49
|
+
elsif ctab == :system
|
50
|
+
puts "_.cb:gray._AnalyticsConfig_.f:bold.__.cb:black._System".to_ftext
|
51
|
+
VtacFriendly::SystemTab.show remote_ip, server_name
|
52
|
+
|
53
|
+
R::Cr.go_to_pos(0, R::S.height)
|
54
|
+
R::C.color :gray, type: :bg, mode: :set
|
55
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}S#{rb} Shut down #{bb}R#{rb} Reboot #{bb}U#{rb} Update"
|
56
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
57
|
+
end
|
58
|
+
|
59
|
+
R::F.reset mode: :set
|
60
|
+
char = STDIN.getch
|
61
|
+
|
62
|
+
if char.upcase == "L" && ctab == :analytics
|
63
|
+
ctab = :config
|
64
|
+
elsif char.upcase == "H" && ctab == :config
|
65
|
+
ctab = :analytics
|
66
|
+
elsif char.upcase == "L" && ctab == :config
|
67
|
+
ctab = :system
|
68
|
+
elsif char.upcase == "H" && ctab == :system
|
69
|
+
ctab = :config
|
70
|
+
end
|
71
|
+
|
72
|
+
if char.upcase == "P" && ctab == :config
|
73
|
+
VtacFriendly::ConfigTab.change_pxsize(server)
|
74
|
+
end
|
75
|
+
if char.upcase == "R" && ctab == :config
|
76
|
+
VtacFriendly::ConfigTab.change_roomlength(server)
|
77
|
+
end
|
78
|
+
if char.upcase == "M" && ctab == :config
|
79
|
+
VtacFriendly::ConfigTab.toggle_mirroring(server)
|
80
|
+
end
|
81
|
+
|
82
|
+
if char.upcase == "R" && ctab == :analytics
|
83
|
+
VtacFriendly::AnalyticsTab.reset(server)
|
84
|
+
end
|
85
|
+
|
86
|
+
if char.upcase == "S" && ctab == :system
|
87
|
+
VtacFriendly::SystemTab.shutdown(server)
|
88
|
+
end
|
89
|
+
|
90
|
+
if char.upcase == "R" && ctab == :system
|
91
|
+
VtacFriendly::SystemTab.reboot(server)
|
92
|
+
end
|
93
|
+
|
94
|
+
if char.upcase == "U" && ctab == :system
|
95
|
+
VtacFriendly::SystemTab.update(server)
|
96
|
+
end
|
97
|
+
|
98
|
+
if char == "\x03"
|
99
|
+
R::Cr.show
|
100
|
+
R::S.clear
|
101
|
+
R::Cr.go_to_pos(0,0)
|
102
|
+
exit
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module AnalyticsTab
|
3
|
+
def show(server)
|
4
|
+
# Draw remotes
|
5
|
+
sh15 = "
|
6
|
+
#{R::C.color :green}╔═════════════╗
|
7
|
+
║ -A0 -A1 #{R::C.color :green}║
|
8
|
+
║ #{R::C.color :green}║
|
9
|
+
║ -A2 #{R::C.color :green}║
|
10
|
+
║ -A3 -A4 -A5 #{R::C.color :green}║
|
11
|
+
║ -A6 #{R::C.color :green}║
|
12
|
+
║ #{R::C.color :green}║
|
13
|
+
║ -A7 -A8 #{R::C.color :green}║
|
14
|
+
║ -A9 -AA #{R::C.color :green}║
|
15
|
+
║ -AB -AC #{R::C.color :green}║
|
16
|
+
║ -AD -AE #{R::C.color :green}║
|
17
|
+
╚═════════════╝
|
18
|
+
#{R::C.color :reset}"
|
19
|
+
|
20
|
+
# Get data
|
21
|
+
sh15_buttons = ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE"]
|
22
|
+
white_spectrum_colors = (234..245).to_a.reverse
|
23
|
+
sh15_keypresses_by_usage={}
|
24
|
+
sh15_buttons_color = {}
|
25
|
+
|
26
|
+
# Get heatmap colors
|
27
|
+
sh15_buttons.each do |b|
|
28
|
+
server.puts VtacPacket.new(:command, "analytics keypresses view #{b}")
|
29
|
+
sh15_keypresses_by_usage[b] = VtacPacket.new(from_packet: server.gets)[:contents].to_i
|
30
|
+
end
|
31
|
+
|
32
|
+
max_num = sh15_keypresses_by_usage.values.max
|
33
|
+
max_num = 1 if (max_num == 0)
|
34
|
+
|
35
|
+
sh15_keypresses_by_usage.keys.each do |k|
|
36
|
+
percentile = (sh15_keypresses_by_usage[k].to_f/max_num.to_f)*100
|
37
|
+
num = white_spectrum_colors[(percentile/(100.0/white_spectrum_colors.length)).to_i-1]
|
38
|
+
sh15_buttons_color[k] = num
|
39
|
+
end
|
40
|
+
|
41
|
+
sh15_buttons.each do |b|
|
42
|
+
server.puts VtacPacket.new(:command, "analytics keypresses view #{b}")
|
43
|
+
num = VtacPacket.new(from_packet: server.gets)[:contents]
|
44
|
+
if num == ""
|
45
|
+
num = "000"
|
46
|
+
elsif num.length > 3
|
47
|
+
num = "999"
|
48
|
+
elsif num.length < 3
|
49
|
+
num = "0"*(3-(num.length)) + num
|
50
|
+
end
|
51
|
+
|
52
|
+
num = "#{R::F.bold}#{R::C.color :yellow}#{R::C.num_color sh15_buttons_color[b], type: :bg}#{num}#{R::C.color :reset}#{R::C.color :reset, type: :bg}#{R::F.reset}"
|
53
|
+
|
54
|
+
sh15.gsub!(?-+b, num)
|
55
|
+
end
|
56
|
+
|
57
|
+
puts sh15
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def reset(server)
|
62
|
+
server.puts VtacPacket.new(:command, "analytics keypresses clear")
|
63
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
64
|
+
end
|
65
|
+
|
66
|
+
module_function :show, :reset
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module ConfigTab
|
3
|
+
def show(server)
|
4
|
+
server.puts VtacPacket.new(:command, "config pxsize")
|
5
|
+
pxsize = VtacPacket.new(from_packet: server.gets)[:contents]
|
6
|
+
|
7
|
+
server.puts VtacPacket.new(:command, "config roomlength")
|
8
|
+
roomlength = VtacPacket.new(from_packet: server.gets)[:contents]
|
9
|
+
|
10
|
+
server.puts VtacPacket.new(:command, "config mirrored")
|
11
|
+
mirrored = VtacPacket.new(from_packet: server.gets)[:contents] == "0" ? "Off" : "On"
|
12
|
+
|
13
|
+
puts "
|
14
|
+
#{R::C.color :blue}#{R::F.bold}Pxsize#{R::F.reset} #{pxsize}
|
15
|
+
#{R::C.color :blue}#{R::F.bold}Room length#{R::F.reset} #{roomlength}
|
16
|
+
#{R::C.color :blue}#{R::F.bold}Mirroring#{R::F.reset} #{mirrored}
|
17
|
+
"
|
18
|
+
end
|
19
|
+
|
20
|
+
def change_pxsize(server)
|
21
|
+
R::Cr.go_to_pos(0, R::S.height-1)
|
22
|
+
R::C.color :gray, type: :bg, mode: :set
|
23
|
+
print "Pxsize: "
|
24
|
+
|
25
|
+
R::Cr.show
|
26
|
+
server.puts VtacPacket.new(:command, "config pxsize #{STDIN.gets.chomp}")
|
27
|
+
R::Cr.hide
|
28
|
+
|
29
|
+
R::C.color :reset, type: :bg, mode: :set
|
30
|
+
|
31
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
32
|
+
end
|
33
|
+
|
34
|
+
def change_roomlength(server)
|
35
|
+
R::Cr.go_to_pos(0, R::S.height-1)
|
36
|
+
R::C.color :gray, type: :bg, mode: :set
|
37
|
+
print "Room length: "
|
38
|
+
|
39
|
+
R::Cr.show
|
40
|
+
server.puts VtacPacket.new(:command, "config roomlength #{STDIN.gets.chomp}")
|
41
|
+
R::Cr.hide
|
42
|
+
|
43
|
+
R::C.color :reset, type: :bg, mode: :set
|
44
|
+
|
45
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
46
|
+
end
|
47
|
+
|
48
|
+
def toggle_mirroring(server)
|
49
|
+
server.puts VtacPacket.new(:command, "config mirrored toggle")
|
50
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
51
|
+
end
|
52
|
+
|
53
|
+
module_function :show, :change_pxsize, :change_roomlength, :toggle_mirroring
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module SystemTab
|
3
|
+
def show(ip, name)
|
4
|
+
puts "
|
5
|
+
#{R::C.color :blue}#{R::F.bold}IP#{R::F.reset} #{ip}
|
6
|
+
#{R::C.color :blue}#{R::F.bold}Server name#{R::F.reset} #{name}
|
7
|
+
"
|
8
|
+
end
|
9
|
+
|
10
|
+
def shutdown(server)
|
11
|
+
server.puts VtacPacket.new(:command, "shutdown")
|
12
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
13
|
+
R::Cr.show
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def reboot(server)
|
18
|
+
server.puts VtacPacket.new(:command, "reboot")
|
19
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
20
|
+
R::Cr.show
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(server)
|
25
|
+
server.puts VtacPacket.new(:command, "update")
|
26
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
27
|
+
end
|
28
|
+
|
29
|
+
module_function :show, :shutdown, :reboot, :update
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module Client
|
3
|
+
def connect(host, port)
|
4
|
+
server = TCPSocket.open(host, port)
|
5
|
+
|
6
|
+
init_pack = VtacPacket.new(from_packet: server.gets)
|
7
|
+
server_name = init_pack[:contents]
|
8
|
+
|
9
|
+
server.puts VtacPacket.new(:id_client, "vtac_client")
|
10
|
+
|
11
|
+
return [server, server_name]
|
12
|
+
end
|
13
|
+
|
14
|
+
module_function :connect
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
class VtacPacket
|
3
|
+
@@allowed_types = [:command, :response, :id_server, :id_client, :error, :disconnect]
|
4
|
+
|
5
|
+
def initialize(type=:response, contents="", from_packet:nil)
|
6
|
+
if !from_packet
|
7
|
+
if @@allowed_types.include?(type)
|
8
|
+
@type = type
|
9
|
+
@contents = contents.to_s
|
10
|
+
end
|
11
|
+
else
|
12
|
+
packet = from_packet
|
13
|
+
packet = JSON.parse(packet)
|
14
|
+
@type = packet["type"]
|
15
|
+
@contents = packet["contents"]
|
16
|
+
end
|
17
|
+
|
18
|
+
return self
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_h
|
22
|
+
return {type: @type.to_s, contents: @contents}
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
return self.to_json.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_json
|
30
|
+
return self.to_h.to_json
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](k)
|
34
|
+
return self.to_h[k.to_sym]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "vtac_friendly/vtac_client.rb"
|
2
|
+
require_relative "vtac_friendly/vtac_packet.rb"
|
3
|
+
require_relative "vtac_friendly/analytics_tab.rb"
|
4
|
+
require_relative "vtac_friendly/config_tab.rb"
|
5
|
+
require_relative "vtac_friendly/system_tab.rb"
|
6
|
+
require "socket"
|
7
|
+
require "rbtext"
|
8
|
+
require "json"
|
9
|
+
|
10
|
+
module VtacFriendly
|
11
|
+
@ver_1 = 0
|
12
|
+
@ver_2 = 0
|
13
|
+
@ver_3 = 1
|
14
|
+
@ver_4 = ""
|
15
|
+
|
16
|
+
def self.version
|
17
|
+
"#{@ver_1}.#{@ver_2}.#{@ver_3}#{".#{@ver_4}" if @ver_4.length > 1}"
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vtacfriendly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthias Lee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-01-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: argparse
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rbtext
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: io-console
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.6
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.6
|
55
|
+
description: A friendly interface for VTAC
|
56
|
+
email: matthias@matthiasclee.com
|
57
|
+
executables:
|
58
|
+
- vtac-ui
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- bin/vtac-ui
|
63
|
+
- lib/vtac_friendly.rb
|
64
|
+
- lib/vtac_friendly/analytics_tab.rb
|
65
|
+
- lib/vtac_friendly/config_tab.rb
|
66
|
+
- lib/vtac_friendly/system_tab.rb
|
67
|
+
- lib/vtac_friendly/vtac_client.rb
|
68
|
+
- lib/vtac_friendly/vtac_packet.rb
|
69
|
+
homepage: https://github.com/Matthiasclee/VtacFriendly
|
70
|
+
licenses:
|
71
|
+
- AGPL-3.0
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.1.6
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Vtac UI
|
92
|
+
test_files: []
|