win32-pipe 0.3.6 → 0.3.7
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -2
- data/CHANGES +88 -83
- data/MANIFEST +19 -19
- data/README +58 -58
- data/Rakefile +70 -70
- data/certs/djberg96_pub.pem +21 -21
- data/examples/example_client.rb +29 -29
- data/examples/example_client_async.rb +82 -82
- data/examples/example_server.rb +32 -32
- data/examples/example_server_async.rb +100 -100
- data/lib/win32/pipe.rb +250 -251
- data/lib/win32/pipe/client.rb +65 -65
- data/lib/win32/pipe/server.rb +96 -96
- data/lib/win32/pipe/windows/constants.rb +46 -46
- data/lib/win32/pipe/windows/functions.rb +37 -37
- data/test/test_win32_pipe.rb +162 -162
- data/test/test_win32_pipe_client.rb +62 -62
- data/test/test_win32_pipe_server.rb +34 -34
- data/win32-pipe.gemspec +26 -26
- metadata +16 -9
- metadata.gz.sig +1 -1
data/certs/djberg96_pub.pem
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
|
3
|
-
cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
|
4
|
-
MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
|
5
|
-
ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
6
|
-
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
|
7
|
-
Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
|
8
|
-
S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
|
9
|
-
gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
|
10
|
-
FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
|
11
|
-
zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
|
12
|
-
DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
|
13
|
-
nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
|
14
|
-
bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
|
15
|
-
ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
|
16
|
-
tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
|
17
|
-
/sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
|
18
|
-
wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
|
19
|
-
EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
|
20
|
-
tGSHgAmcLlkdGgan182qsE/4kKM=
|
21
|
-
-----END CERTIFICATE-----
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
|
3
|
+
cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
|
4
|
+
MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
|
5
|
+
ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
6
|
+
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
|
7
|
+
Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
|
8
|
+
S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
|
9
|
+
gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
|
10
|
+
FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
|
11
|
+
zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
|
12
|
+
DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
|
13
|
+
nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
|
14
|
+
bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
|
15
|
+
ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
|
16
|
+
tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
|
17
|
+
/sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
|
18
|
+
wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
|
19
|
+
EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
|
20
|
+
tGSHgAmcLlkdGgan182qsE/4kKM=
|
21
|
+
-----END CERTIFICATE-----
|
data/examples/example_client.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
#########################################################################
|
2
|
-
# example_client.rb
|
3
|
-
#
|
4
|
-
# Simple client test. Be sure to start the server first in a separate
|
5
|
-
# terminal. You can run this example via the 'rake example_client' task.
|
6
|
-
#
|
7
|
-
# Modify this code as you see fit.
|
8
|
-
#########################################################################
|
9
|
-
require 'win32/pipe'
|
10
|
-
include Win32
|
11
|
-
|
12
|
-
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
13
|
-
|
14
|
-
puts "VERSION: " + Pipe::VERSION
|
15
|
-
|
16
|
-
# Block form
|
17
|
-
Pipe::Client.new('foo') do |pipe|
|
18
|
-
puts "Connected..."
|
19
|
-
pipe.write("Ruby rocks!")
|
20
|
-
data = pipe.read
|
21
|
-
puts "Got [#{data}] back from server"
|
22
|
-
end
|
23
|
-
|
24
|
-
# Non-block form
|
25
|
-
#pclient = Pipe::Client.new('foo')
|
26
|
-
#puts "Connected..."
|
27
|
-
#pclient.write("Ruby rocks!")
|
28
|
-
#data = pclient.read
|
29
|
-
#puts "Got [#{data}] back from server"
|
1
|
+
#########################################################################
|
2
|
+
# example_client.rb
|
3
|
+
#
|
4
|
+
# Simple client test. Be sure to start the server first in a separate
|
5
|
+
# terminal. You can run this example via the 'rake example_client' task.
|
6
|
+
#
|
7
|
+
# Modify this code as you see fit.
|
8
|
+
#########################################################################
|
9
|
+
require 'win32/pipe'
|
10
|
+
include Win32
|
11
|
+
|
12
|
+
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
13
|
+
|
14
|
+
puts "VERSION: " + Pipe::VERSION
|
15
|
+
|
16
|
+
# Block form
|
17
|
+
Pipe::Client.new('foo') do |pipe|
|
18
|
+
puts "Connected..."
|
19
|
+
pipe.write("Ruby rocks!")
|
20
|
+
data = pipe.read
|
21
|
+
puts "Got [#{data}] back from server"
|
22
|
+
end
|
23
|
+
|
24
|
+
# Non-block form
|
25
|
+
#pclient = Pipe::Client.new('foo')
|
26
|
+
#puts "Connected..."
|
27
|
+
#pclient.write("Ruby rocks!")
|
28
|
+
#data = pclient.read
|
29
|
+
#puts "Got [#{data}] back from server"
|
30
30
|
#pclient.close
|
@@ -1,82 +1,82 @@
|
|
1
|
-
#########################################################################
|
2
|
-
# example_client_async.rb
|
3
|
-
#
|
4
|
-
# Simple client test. Be sure to start the server first in a separate
|
5
|
-
# terminal. You can run this example via the 'rake example_async_client'
|
6
|
-
# task.
|
7
|
-
#########################################################################
|
8
|
-
require 'win32/pipe'
|
9
|
-
include Win32
|
10
|
-
|
11
|
-
puts "VERSION: " + Pipe::VERSION
|
12
|
-
|
13
|
-
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
14
|
-
|
15
|
-
CONNECTING_STATE = 0
|
16
|
-
READING_STATE = 1
|
17
|
-
WRITING_STATE = 2
|
18
|
-
|
19
|
-
class MyPipe < Pipe::Client
|
20
|
-
def read_complete
|
21
|
-
puts "read_complete"
|
22
|
-
puts "Got [#{buffer}] back from server"
|
23
|
-
@state = WRITING_STATE
|
24
|
-
end
|
25
|
-
|
26
|
-
def write_complete
|
27
|
-
puts "write_complete"
|
28
|
-
@state = READING_STATE
|
29
|
-
end
|
30
|
-
|
31
|
-
def mainloop
|
32
|
-
@state = WRITING_STATE
|
33
|
-
while true
|
34
|
-
if wait(1) # wait for 1 second
|
35
|
-
if pending? # IO is pending
|
36
|
-
case @state
|
37
|
-
when READING_STATE
|
38
|
-
if transferred == 0
|
39
|
-
reconnect
|
40
|
-
break
|
41
|
-
end
|
42
|
-
read_complete
|
43
|
-
break
|
44
|
-
when WRITING_STATE
|
45
|
-
if transferred != length
|
46
|
-
reconnect
|
47
|
-
break
|
48
|
-
end
|
49
|
-
write_complete
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
case @state
|
54
|
-
when READING_STATE
|
55
|
-
if read
|
56
|
-
if not pending?
|
57
|
-
read_complete
|
58
|
-
break
|
59
|
-
end
|
60
|
-
end
|
61
|
-
when WRITING_STATE
|
62
|
-
if write("Ruby rocks!")
|
63
|
-
if not pending?
|
64
|
-
write_complete
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
sleep(1)
|
71
|
-
puts "pipe client is running"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
flags = Pipe::DEFAULT_OPEN_MODE | Pipe::OVERLAPPED
|
77
|
-
|
78
|
-
MyPipe.new('foo', nil, flags) do |client|
|
79
|
-
puts "Connected..."
|
80
|
-
client.mainloop
|
81
|
-
end
|
82
|
-
|
1
|
+
#########################################################################
|
2
|
+
# example_client_async.rb
|
3
|
+
#
|
4
|
+
# Simple client test. Be sure to start the server first in a separate
|
5
|
+
# terminal. You can run this example via the 'rake example_async_client'
|
6
|
+
# task.
|
7
|
+
#########################################################################
|
8
|
+
require 'win32/pipe'
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
puts "VERSION: " + Pipe::VERSION
|
12
|
+
|
13
|
+
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
14
|
+
|
15
|
+
CONNECTING_STATE = 0
|
16
|
+
READING_STATE = 1
|
17
|
+
WRITING_STATE = 2
|
18
|
+
|
19
|
+
class MyPipe < Pipe::Client
|
20
|
+
def read_complete
|
21
|
+
puts "read_complete"
|
22
|
+
puts "Got [#{buffer}] back from server"
|
23
|
+
@state = WRITING_STATE
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_complete
|
27
|
+
puts "write_complete"
|
28
|
+
@state = READING_STATE
|
29
|
+
end
|
30
|
+
|
31
|
+
def mainloop
|
32
|
+
@state = WRITING_STATE
|
33
|
+
while true
|
34
|
+
if wait(1) # wait for 1 second
|
35
|
+
if pending? # IO is pending
|
36
|
+
case @state
|
37
|
+
when READING_STATE
|
38
|
+
if transferred == 0
|
39
|
+
reconnect
|
40
|
+
break
|
41
|
+
end
|
42
|
+
read_complete
|
43
|
+
break
|
44
|
+
when WRITING_STATE
|
45
|
+
if transferred != length
|
46
|
+
reconnect
|
47
|
+
break
|
48
|
+
end
|
49
|
+
write_complete
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
case @state
|
54
|
+
when READING_STATE
|
55
|
+
if read
|
56
|
+
if not pending?
|
57
|
+
read_complete
|
58
|
+
break
|
59
|
+
end
|
60
|
+
end
|
61
|
+
when WRITING_STATE
|
62
|
+
if write("Ruby rocks!")
|
63
|
+
if not pending?
|
64
|
+
write_complete
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
sleep(1)
|
71
|
+
puts "pipe client is running"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
flags = Pipe::DEFAULT_OPEN_MODE | Pipe::OVERLAPPED
|
77
|
+
|
78
|
+
MyPipe.new('foo', nil, flags) do |client|
|
79
|
+
puts "Connected..."
|
80
|
+
client.mainloop
|
81
|
+
end
|
82
|
+
|
data/examples/example_server.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
#########################################################################
|
2
|
-
# example_server.rb
|
3
|
-
#
|
4
|
-
# A simple named pipe server. Start this up in its own terminal window.
|
5
|
-
# You may have to use the task manager to kill it if you don't connect
|
6
|
-
# with the test client program.
|
7
|
-
#
|
8
|
-
# You can start this server with the 'rake example_server' task. Modify
|
9
|
-
# this code as you see fit.
|
10
|
-
#########################################################################
|
11
|
-
require 'win32/pipe'
|
12
|
-
include Win32
|
13
|
-
|
14
|
-
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
15
|
-
|
16
|
-
puts "VERSION: " + Pipe::VERSION
|
17
|
-
|
18
|
-
# Block form
|
19
|
-
Pipe::Server.new('foo') do |pipe|
|
20
|
-
pipe.connect
|
21
|
-
data = pipe.read
|
22
|
-
puts "Got [#{data}]"
|
23
|
-
pipe.write "Thanks for the data!"
|
24
|
-
end
|
25
|
-
|
26
|
-
# Non-block form
|
27
|
-
#pserver = Pipe::Server.new('foo')
|
28
|
-
#pserver.connect # put server in wait connect
|
29
|
-
#data = pserver.read
|
30
|
-
#puts "Got [#{data}]"
|
31
|
-
#pserver.write("Thanks for the data!")
|
32
|
-
#pserver.disconnect
|
1
|
+
#########################################################################
|
2
|
+
# example_server.rb
|
3
|
+
#
|
4
|
+
# A simple named pipe server. Start this up in its own terminal window.
|
5
|
+
# You may have to use the task manager to kill it if you don't connect
|
6
|
+
# with the test client program.
|
7
|
+
#
|
8
|
+
# You can start this server with the 'rake example_server' task. Modify
|
9
|
+
# this code as you see fit.
|
10
|
+
#########################################################################
|
11
|
+
require 'win32/pipe'
|
12
|
+
include Win32
|
13
|
+
|
14
|
+
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
15
|
+
|
16
|
+
puts "VERSION: " + Pipe::VERSION
|
17
|
+
|
18
|
+
# Block form
|
19
|
+
Pipe::Server.new('foo') do |pipe|
|
20
|
+
pipe.connect
|
21
|
+
data = pipe.read
|
22
|
+
puts "Got [#{data}]"
|
23
|
+
pipe.write "Thanks for the data!"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Non-block form
|
27
|
+
#pserver = Pipe::Server.new('foo')
|
28
|
+
#pserver.connect # put server in wait connect
|
29
|
+
#data = pserver.read
|
30
|
+
#puts "Got [#{data}]"
|
31
|
+
#pserver.write("Thanks for the data!")
|
32
|
+
#pserver.disconnect
|
33
33
|
#pserver.close
|
@@ -1,100 +1,100 @@
|
|
1
|
-
#######################################################################
|
2
|
-
# example_server_async.rb
|
3
|
-
#
|
4
|
-
# A simple, asynchronous named pipe server. Start this up in its own
|
5
|
-
# terminal window. You can run this program via the
|
6
|
-
# 'rake example_async_server' task.
|
7
|
-
#######################################################################
|
8
|
-
require 'win32/pipe'
|
9
|
-
include Win32
|
10
|
-
|
11
|
-
puts "VERSION: " + Pipe::VERSION
|
12
|
-
|
13
|
-
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
14
|
-
|
15
|
-
CONNECTING_STATE = 0
|
16
|
-
READING_STATE = 1
|
17
|
-
WRITING_STATE = 2
|
18
|
-
|
19
|
-
class MyPipe < Pipe::Server
|
20
|
-
def connected
|
21
|
-
puts "connected"
|
22
|
-
@state = READING_STATE
|
23
|
-
end
|
24
|
-
|
25
|
-
def read_complete
|
26
|
-
puts "read_complete"
|
27
|
-
puts "Got [#{buffer}]"
|
28
|
-
@state = WRITING_STATE
|
29
|
-
end
|
30
|
-
|
31
|
-
def write_complete
|
32
|
-
puts "write_complete"
|
33
|
-
disconnect
|
34
|
-
@state = CONNECTING_STATE
|
35
|
-
end
|
36
|
-
|
37
|
-
def reconnect
|
38
|
-
disconnect
|
39
|
-
mainloop
|
40
|
-
end
|
41
|
-
|
42
|
-
def mainloop
|
43
|
-
@state = CONNECTING_STATE
|
44
|
-
while true
|
45
|
-
if wait(1) # wait for 1 second
|
46
|
-
if pending? # IO is pending
|
47
|
-
case @state
|
48
|
-
when CONNECTING_STATE
|
49
|
-
connected
|
50
|
-
when READING_STATE
|
51
|
-
if transferred == 0
|
52
|
-
reconnect
|
53
|
-
break
|
54
|
-
end
|
55
|
-
read_complete
|
56
|
-
when WRITING_STATE
|
57
|
-
if transferred != length
|
58
|
-
reconnect
|
59
|
-
break
|
60
|
-
end
|
61
|
-
write_complete
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
case @state
|
66
|
-
when CONNECTING_STATE
|
67
|
-
if connect
|
68
|
-
connected
|
69
|
-
end
|
70
|
-
when READING_STATE
|
71
|
-
if read
|
72
|
-
if !pending?
|
73
|
-
read_complete
|
74
|
-
end
|
75
|
-
else
|
76
|
-
reconnect
|
77
|
-
end
|
78
|
-
when WRITING_STATE
|
79
|
-
if write("Thanks for the data!")
|
80
|
-
if not pending?
|
81
|
-
write_complete
|
82
|
-
end
|
83
|
-
else
|
84
|
-
reconnect
|
85
|
-
break
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
sleep(1)
|
91
|
-
puts "pipe server is running"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
flags = Pipe::ACCESS_DUPLEX | Pipe::OVERLAPPED
|
97
|
-
|
98
|
-
MyPipe.new('foo', 0, flags) do |pipe|
|
99
|
-
pipe.mainloop
|
100
|
-
end
|
1
|
+
#######################################################################
|
2
|
+
# example_server_async.rb
|
3
|
+
#
|
4
|
+
# A simple, asynchronous named pipe server. Start this up in its own
|
5
|
+
# terminal window. You can run this program via the
|
6
|
+
# 'rake example_async_server' task.
|
7
|
+
#######################################################################
|
8
|
+
require 'win32/pipe'
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
puts "VERSION: " + Pipe::VERSION
|
12
|
+
|
13
|
+
Thread.new { loop { sleep 0.01 } } # Allow Ctrl-C
|
14
|
+
|
15
|
+
CONNECTING_STATE = 0
|
16
|
+
READING_STATE = 1
|
17
|
+
WRITING_STATE = 2
|
18
|
+
|
19
|
+
class MyPipe < Pipe::Server
|
20
|
+
def connected
|
21
|
+
puts "connected"
|
22
|
+
@state = READING_STATE
|
23
|
+
end
|
24
|
+
|
25
|
+
def read_complete
|
26
|
+
puts "read_complete"
|
27
|
+
puts "Got [#{buffer}]"
|
28
|
+
@state = WRITING_STATE
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_complete
|
32
|
+
puts "write_complete"
|
33
|
+
disconnect
|
34
|
+
@state = CONNECTING_STATE
|
35
|
+
end
|
36
|
+
|
37
|
+
def reconnect
|
38
|
+
disconnect
|
39
|
+
mainloop
|
40
|
+
end
|
41
|
+
|
42
|
+
def mainloop
|
43
|
+
@state = CONNECTING_STATE
|
44
|
+
while true
|
45
|
+
if wait(1) # wait for 1 second
|
46
|
+
if pending? # IO is pending
|
47
|
+
case @state
|
48
|
+
when CONNECTING_STATE
|
49
|
+
connected
|
50
|
+
when READING_STATE
|
51
|
+
if transferred == 0
|
52
|
+
reconnect
|
53
|
+
break
|
54
|
+
end
|
55
|
+
read_complete
|
56
|
+
when WRITING_STATE
|
57
|
+
if transferred != length
|
58
|
+
reconnect
|
59
|
+
break
|
60
|
+
end
|
61
|
+
write_complete
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
case @state
|
66
|
+
when CONNECTING_STATE
|
67
|
+
if connect
|
68
|
+
connected
|
69
|
+
end
|
70
|
+
when READING_STATE
|
71
|
+
if read
|
72
|
+
if !pending?
|
73
|
+
read_complete
|
74
|
+
end
|
75
|
+
else
|
76
|
+
reconnect
|
77
|
+
end
|
78
|
+
when WRITING_STATE
|
79
|
+
if write("Thanks for the data!")
|
80
|
+
if not pending?
|
81
|
+
write_complete
|
82
|
+
end
|
83
|
+
else
|
84
|
+
reconnect
|
85
|
+
break
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
sleep(1)
|
91
|
+
puts "pipe server is running"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
flags = Pipe::ACCESS_DUPLEX | Pipe::OVERLAPPED
|
97
|
+
|
98
|
+
MyPipe.new('foo', 0, flags) do |pipe|
|
99
|
+
pipe.mainloop
|
100
|
+
end
|