backport 1.0.0 → 1.1.0
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 +4 -0
- data/lib/backport/adapter.rb +1 -0
- data/lib/backport/client.rb +12 -8
- data/lib/backport/machine.rb +14 -11
- data/lib/backport/server/base.rb +6 -0
- data/lib/backport/server/connectable.rb +6 -6
- data/lib/backport/server/interval.rb +19 -5
- data/lib/backport/server/stdio.rb +5 -0
- data/lib/backport/server/tcpip.rb +16 -1
- data/lib/backport/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37e4d45bec3b70c07d7bb7ec027399c01ce149f3567ab9f5ddb4661741c8f990
|
4
|
+
data.tar.gz: '0906731f50ef216c4bb239fdfffc63f40e086c4e6817849363736c93e1c9b9b7'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa2e6670f6ea2503bcd3ada456522a547c35b18cd4fb12fd38f0a3e00aece71cdae3aa72a168c83ab590d3ea306e8a04b3dc0daec8dd0cc459351cac488907f0
|
7
|
+
data.tar.gz: 5eeb2227c5b2f3474b3fbbe6792f0f005f28ce9342b3f395cc596f6cc764741abce8d4daa8cc90dff95d71d877a4fd3c336a5e72ae5980656a2ab971a473c538
|
data/CHANGELOG.md
CHANGED
data/lib/backport/adapter.rb
CHANGED
data/lib/backport/client.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'observer'
|
2
|
+
|
1
3
|
module Backport
|
2
4
|
# A client connected to a connectable Backport server.
|
3
5
|
#
|
4
6
|
class Client
|
7
|
+
include Observable
|
8
|
+
|
5
9
|
# @return [Adapter]
|
6
10
|
attr_reader :adapter
|
7
11
|
|
@@ -33,6 +37,8 @@ module Backport
|
|
33
37
|
return if stopped?
|
34
38
|
@adapter.closing
|
35
39
|
@stopped = true
|
40
|
+
changed
|
41
|
+
notify_observers self
|
36
42
|
end
|
37
43
|
|
38
44
|
# Start running the client. This method will start the thread that reads
|
@@ -53,12 +59,8 @@ module Backport
|
|
53
59
|
#
|
54
60
|
# @return [void]
|
55
61
|
def tick
|
56
|
-
|
57
|
-
|
58
|
-
else
|
59
|
-
input = read
|
60
|
-
@adapter.receiving input unless input.nil?
|
61
|
-
end
|
62
|
+
input = read
|
63
|
+
@adapter.receiving input unless input.nil?
|
62
64
|
end
|
63
65
|
|
64
66
|
private
|
@@ -105,16 +107,18 @@ module Backport
|
|
105
107
|
#
|
106
108
|
# @return [void]
|
107
109
|
def read_input
|
108
|
-
@in.flush
|
109
110
|
begin
|
111
|
+
@in.flush
|
110
112
|
chars = @in.sysread(255)
|
111
|
-
rescue EOFError, Errno::ECONNRESET
|
113
|
+
rescue EOFError, IOError, Errno::ECONNRESET
|
112
114
|
chars = nil
|
113
115
|
end
|
114
116
|
if chars.nil?
|
115
117
|
stop
|
116
118
|
else
|
117
119
|
mutex.synchronize { @buffer.concat chars }
|
120
|
+
changed
|
121
|
+
notify_observers self
|
118
122
|
end
|
119
123
|
end
|
120
124
|
end
|
data/lib/backport/machine.rb
CHANGED
@@ -41,6 +41,7 @@ module Backport
|
|
41
41
|
# @param server [Server::Base]
|
42
42
|
# @return [void]
|
43
43
|
def prepare server
|
44
|
+
server.add_observer self
|
44
45
|
servers.push server
|
45
46
|
server.start unless stopped?
|
46
47
|
end
|
@@ -50,26 +51,28 @@ module Backport
|
|
50
51
|
@servers ||= []
|
51
52
|
end
|
52
53
|
|
53
|
-
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
# @param server [Server::Base]
|
55
|
+
def update server
|
56
|
+
if server.stopped?
|
57
|
+
servers.delete server
|
58
|
+
stop if servers.empty?
|
59
|
+
else
|
60
|
+
mutex.synchronize { server.tick }
|
61
|
+
end
|
60
62
|
end
|
61
63
|
|
62
64
|
private
|
63
65
|
|
66
|
+
def mutex
|
67
|
+
@mutex ||= Mutex.new
|
68
|
+
end
|
69
|
+
|
64
70
|
# Start the thread that updates servers via the #tick method.
|
65
71
|
#
|
66
72
|
# @return [void]
|
67
73
|
def run_server_thread
|
68
74
|
servers.map(&:start)
|
69
|
-
until stopped?
|
70
|
-
tick
|
71
|
-
sleep 0.001
|
72
|
-
end
|
75
|
+
sleep 0.1 until stopped?
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
data/lib/backport/server/base.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
require 'observer'
|
2
|
+
|
1
3
|
module Backport
|
2
4
|
module Server
|
3
5
|
# An extendable server class that provides basic start/stop functionality
|
4
6
|
# and common callbacks.
|
5
7
|
#
|
6
8
|
class Base
|
9
|
+
include Observable
|
10
|
+
|
7
11
|
# Start the server.
|
8
12
|
#
|
9
13
|
def start
|
@@ -18,6 +22,8 @@ module Backport
|
|
18
22
|
return if stopped?
|
19
23
|
stopping
|
20
24
|
@started = false
|
25
|
+
changed
|
26
|
+
notify_observers self
|
21
27
|
end
|
22
28
|
|
23
29
|
def started?
|
@@ -5,12 +5,12 @@ module Backport
|
|
5
5
|
# Connectable servers check clients for incoming data on each tick.
|
6
6
|
#
|
7
7
|
module Connectable
|
8
|
-
def tick
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
8
|
+
# def tick
|
9
|
+
# mutex.synchronize do
|
10
|
+
# # clients.each(&:tick)
|
11
|
+
# clients.delete_if(&:stopped?)
|
12
|
+
# end
|
13
|
+
# end
|
14
14
|
|
15
15
|
def starting
|
16
16
|
clients.map(&:run)
|
@@ -9,18 +9,32 @@ module Backport
|
|
9
9
|
def initialize period, &block
|
10
10
|
@period = period
|
11
11
|
@block = block
|
12
|
-
@
|
12
|
+
@ready = false
|
13
13
|
end
|
14
14
|
|
15
15
|
def starting
|
16
|
-
@
|
16
|
+
@ready = false
|
17
|
+
run_ready_thread
|
17
18
|
end
|
18
19
|
|
19
20
|
def tick
|
20
|
-
|
21
|
-
return unless now - @last_time >= @period
|
21
|
+
return unless @ready
|
22
22
|
@block.call self
|
23
|
-
@
|
23
|
+
@ready = false
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def run_ready_thread
|
29
|
+
Thread.new do
|
30
|
+
until stopped?
|
31
|
+
sleep @period
|
32
|
+
break if stopped?
|
33
|
+
@ready = true
|
34
|
+
changed
|
35
|
+
notify_observers self
|
36
|
+
end
|
37
|
+
end
|
24
38
|
end
|
25
39
|
end
|
26
40
|
end
|
@@ -38,7 +38,7 @@ module Backport
|
|
38
38
|
result = nil
|
39
39
|
mutex.synchronize do
|
40
40
|
begin
|
41
|
-
conn = socket.
|
41
|
+
conn = socket.accept
|
42
42
|
addr = conn.addr(true)
|
43
43
|
data = {
|
44
44
|
family: addr[0],
|
@@ -47,6 +47,13 @@ module Backport
|
|
47
47
|
address: addr[3]
|
48
48
|
}
|
49
49
|
clients.push Client.new(conn, conn, @adapter, data)
|
50
|
+
this = self
|
51
|
+
clients.last.adapter._data[:on_close] = Proc.new {
|
52
|
+
conn.close
|
53
|
+
changed
|
54
|
+
notify_observers this
|
55
|
+
}
|
56
|
+
clients.last.add_observer self
|
50
57
|
clients.last.run
|
51
58
|
result = clients.last
|
52
59
|
rescue IO::WaitReadable, Errno::EAGAIN
|
@@ -62,6 +69,14 @@ module Backport
|
|
62
69
|
result
|
63
70
|
end
|
64
71
|
|
72
|
+
def update client
|
73
|
+
if client.stopped?
|
74
|
+
clients.delete client
|
75
|
+
else
|
76
|
+
client.tick
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
65
80
|
private
|
66
81
|
|
67
82
|
# @return [TCPSocket]
|
data/lib/backport/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -101,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
|
-
|
105
|
-
rubygems_version: 2.7.6
|
104
|
+
rubygems_version: 3.0.3
|
106
105
|
signing_key:
|
107
106
|
specification_version: 4
|
108
107
|
summary: A pure Ruby library for event-driven IO
|