plux 0.1.2 → 0.1.3
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/Gemfile.lock +1 -1
- data/lib/plux.rb +2 -0
- data/lib/plux/client.rb +6 -7
- data/lib/plux/parser.rb +67 -0
- data/lib/plux/server.rb +16 -5
- data/lib/plux/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 472f8a38bccdb6c63b10b4291c4cd109598e8819222c4061dd673f3491d58344
|
4
|
+
data.tar.gz: 489ce27db397a3df71058642b8f3dab80ac255cf1ace82f66c12d80980de4efc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 565721905d9e193557d56c78a323f35bd41e1650bb7592607534a6da3cf9f961d66801b2a169477f9b3b2019f06d45e1e08bcda6b146d855d5018b11ba5a6231
|
7
|
+
data.tar.gz: 32d1c59b0a5b169e9ed33302d576dc3d87e42ba376d9f927f61a34d1f5b8bcdf44582fe11a547de0d62c1827158248dfb6293df8fd06cdaa5716f23bcb313741
|
data/Gemfile.lock
CHANGED
data/lib/plux.rb
CHANGED
data/lib/plux/client.rb
CHANGED
@@ -4,18 +4,17 @@ module Plux
|
|
4
4
|
|
5
5
|
def initialize(server_name)
|
6
6
|
@server_name = server_name
|
7
|
-
UNIXSocket.open(Plux.server_file(server_name))
|
8
|
-
reader, @writer = IO.pipe
|
9
|
-
c.send_io(reader)
|
10
|
-
reader.close
|
11
|
-
end
|
7
|
+
@writer = UNIXSocket.open(Plux.server_file(server_name))
|
12
8
|
end
|
13
9
|
|
14
|
-
def puts(
|
15
|
-
|
10
|
+
def puts(msg)
|
11
|
+
Parser.encode(msg).each do |sub_msg|
|
12
|
+
@writer.write(sub_msg)
|
13
|
+
end
|
16
14
|
end
|
17
15
|
|
18
16
|
def close
|
17
|
+
puts(Parser::LAST_MSG)
|
19
18
|
@writer.close
|
20
19
|
end
|
21
20
|
end
|
data/lib/plux/parser.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Plux
|
2
|
+
class Parser
|
3
|
+
|
4
|
+
SYSTEM = 36
|
5
|
+
SEPERATOR = '.'.freeze
|
6
|
+
STREAM_MAX_LEN = 4096
|
7
|
+
LAST_MSG = ''.freeze
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@broken = ''
|
11
|
+
end
|
12
|
+
|
13
|
+
def decode(stream)
|
14
|
+
stream = @broken.concat(stream)
|
15
|
+
result = []
|
16
|
+
|
17
|
+
start = 0
|
18
|
+
pending = stream.length
|
19
|
+
|
20
|
+
until start >= pending
|
21
|
+
sep_idx = stream.index(SEPERATOR, start)
|
22
|
+
|
23
|
+
unless sep_idx
|
24
|
+
len_str = stream[start, pending]
|
25
|
+
@broken.clear
|
26
|
+
@broken.concat(len_str)
|
27
|
+
return result
|
28
|
+
end
|
29
|
+
|
30
|
+
len_str = stream[start, sep_idx - start]
|
31
|
+
est_len = len_str.to_i(SYSTEM)
|
32
|
+
start = sep_idx + 1
|
33
|
+
msg = stream[start, est_len]
|
34
|
+
act_len = msg.length
|
35
|
+
|
36
|
+
if act_len < est_len
|
37
|
+
@broken.clear
|
38
|
+
@broken.concat(len_str)
|
39
|
+
@broken.concat(SEPERATOR)
|
40
|
+
@broken.concat(msg)
|
41
|
+
return result
|
42
|
+
end
|
43
|
+
|
44
|
+
result << msg
|
45
|
+
start += act_len
|
46
|
+
end
|
47
|
+
|
48
|
+
@broken.clear
|
49
|
+
result
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.encode(msg)
|
53
|
+
len = msg.length.to_s(SYSTEM)
|
54
|
+
|
55
|
+
msg = "#{len}#{SEPERATOR}#{msg}"
|
56
|
+
len = msg.length
|
57
|
+
|
58
|
+
return [msg] if len < STREAM_MAX_LEN
|
59
|
+
|
60
|
+
div, mod = len.divmod(STREAM_MAX_LEN)
|
61
|
+
(mod > 0 ? (div + 1) : div).times.map do |start|
|
62
|
+
msg[start * STREAM_MAX_LEN, STREAM_MAX_LEN]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
data/lib/plux/server.rb
CHANGED
@@ -65,13 +65,24 @@ module Plux
|
|
65
65
|
|
66
66
|
class Worker
|
67
67
|
def initialize(socket, worker)
|
68
|
+
par = Parser.new
|
68
69
|
t = Thread.new do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
loop do
|
71
|
+
begin
|
72
|
+
stream = socket.read_nonblock(Parser::STREAM_MAX_LEN)
|
73
|
+
rescue IO::WaitReadable
|
74
|
+
IO.select([socket])
|
75
|
+
retry
|
76
|
+
end
|
77
|
+
|
78
|
+
msgs = par.decode(stream)
|
79
|
+
last_msg = msgs.pop
|
80
|
+
|
81
|
+
msgs.each{ |msg| worker.work(msg) }
|
82
|
+
break if last_msg == Parser::LAST_MSG
|
83
|
+
worker.work(last_msg)
|
73
84
|
end
|
74
|
-
|
85
|
+
socket.close
|
75
86
|
end
|
76
87
|
end
|
77
88
|
end
|
data/lib/plux/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ken
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- bin/setup
|
86
86
|
- lib/plux.rb
|
87
87
|
- lib/plux/client.rb
|
88
|
+
- lib/plux/parser.rb
|
88
89
|
- lib/plux/server.rb
|
89
90
|
- lib/plux/version.rb
|
90
91
|
- plux.gemspec
|