p2p2 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/p2p2/p1.rb +35 -9
- data/lib/p2p2/p2.rb +35 -9
- data/lib/p2p2/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2af1321c46206a876f75cd74f50aab8b5ed2951d92ae7e70c2dce68d1b29a9cc
|
4
|
+
data.tar.gz: 1a85a3f615031cc62d321d0aedb1400417c4a312e586081d95ca0784192ccf34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af88e6936b1bc6ffc54fc50a42591a40d218a8ce46eb8df3396065575a3b8b5422fa5ecfe3427d45eff9efdf9408f1d99aba988a49995bc207b9f13fe4954561
|
7
|
+
data.tar.gz: affad3adbe2c1d027fe55309e1dc915e9687af5f256a962aef34c1c260943e2347bf1c4d54d924373cefbe3e6985e8601295eae690f9169efe0078b37060107f
|
data/lib/p2p2/p1.rb
CHANGED
@@ -57,6 +57,8 @@ module P2p2
|
|
57
57
|
|
58
58
|
ws.each do | sock |
|
59
59
|
case @roles[ sock ]
|
60
|
+
when :room
|
61
|
+
write_room( sock )
|
60
62
|
when :p1
|
61
63
|
write_p1( sock )
|
62
64
|
when :app
|
@@ -93,17 +95,14 @@ module P2p2
|
|
93
95
|
data = sock.read_nonblock( PACK_SIZE )
|
94
96
|
rescue IO::WaitReadable, Errno::EINTR, IO::WaitWritable => e
|
95
97
|
return
|
96
|
-
rescue EOFError, Errno::ECONNRESET => e
|
98
|
+
rescue Errno::ECONNREFUSED, EOFError, Errno::ECONNRESET => e
|
97
99
|
puts "read room #{ e.class } #{ Time.new }"
|
98
100
|
|
99
101
|
if @is_renew
|
100
102
|
raise e
|
101
103
|
end
|
102
104
|
|
103
|
-
|
104
|
-
sleep 5
|
105
|
-
new_room
|
106
|
-
@is_renew = true
|
105
|
+
add_closing( sock )
|
107
106
|
return
|
108
107
|
end
|
109
108
|
|
@@ -197,6 +196,29 @@ module P2p2
|
|
197
196
|
add_write( @p1, data, NEED_CHUNK )
|
198
197
|
end
|
199
198
|
|
199
|
+
def write_room( sock )
|
200
|
+
if @closings.include?( sock )
|
201
|
+
close_sock( sock )
|
202
|
+
sleep 5
|
203
|
+
new_room
|
204
|
+
@is_renew = true
|
205
|
+
@closings.delete( sock )
|
206
|
+
|
207
|
+
return
|
208
|
+
end
|
209
|
+
|
210
|
+
info = @infos[ sock ]
|
211
|
+
data = info[ :wbuff ]
|
212
|
+
|
213
|
+
if data.empty?
|
214
|
+
@writes.delete( sock )
|
215
|
+
return
|
216
|
+
end
|
217
|
+
|
218
|
+
sock.write( data )
|
219
|
+
info[ :wbuff ].clear
|
220
|
+
end
|
221
|
+
|
200
222
|
def write_p1( sock )
|
201
223
|
if @closings.include?( sock )
|
202
224
|
close_sock( sock )
|
@@ -343,9 +365,15 @@ module P2p2
|
|
343
365
|
room = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
344
366
|
room.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
|
345
367
|
room.setsockopt( Socket::SOL_TCP, Socket::TCP_NODELAY, 1 )
|
346
|
-
room.connect( @roomd_sockaddr )
|
347
368
|
|
369
|
+
begin
|
370
|
+
room.connect_nonblock( @roomd_sockaddr )
|
371
|
+
rescue IO::WaitWritable, Errno::EINTR
|
372
|
+
end
|
373
|
+
|
374
|
+
bytes = @title.unpack( "C*" ).map{ | c | c.chr }.join
|
348
375
|
room_info = {
|
376
|
+
wbuff: [ [ SET_TITLE, bytes.size ].pack( 'Cn' ), bytes ].join,
|
349
377
|
p2_sockaddr: nil,
|
350
378
|
rep2p: 0
|
351
379
|
}
|
@@ -354,9 +382,7 @@ module P2p2
|
|
354
382
|
@roles[ room ] = :room
|
355
383
|
@infos[ room ] = room_info
|
356
384
|
@reads << room
|
357
|
-
|
358
|
-
bytes = @title.unpack( "C*" ).map{ | c | c.chr }.join
|
359
|
-
@room.write( [ [ SET_TITLE, bytes.size ].pack( 'Cn' ), bytes ].join )
|
385
|
+
@writes << room
|
360
386
|
end
|
361
387
|
|
362
388
|
def new_p1
|
data/lib/p2p2/p2.rb
CHANGED
@@ -59,6 +59,8 @@ module P2p2
|
|
59
59
|
|
60
60
|
ws.each do | sock |
|
61
61
|
case @roles[ sock ]
|
62
|
+
when :room
|
63
|
+
write_room( sock )
|
62
64
|
when :p2
|
63
65
|
write_p2( sock )
|
64
66
|
when :app
|
@@ -154,17 +156,14 @@ module P2p2
|
|
154
156
|
data = sock.read_nonblock( PACK_SIZE )
|
155
157
|
rescue IO::WaitReadable, Errno::EINTR, IO::WaitWritable => e
|
156
158
|
return
|
157
|
-
rescue EOFError, Errno::ECONNRESET => e
|
159
|
+
rescue Errno::ECONNREFUSED, EOFError, Errno::ECONNRESET => e
|
158
160
|
puts "read room #{ e.class } #{ Time.new }"
|
159
161
|
|
160
162
|
if @is_renew
|
161
163
|
raise e
|
162
164
|
end
|
163
165
|
|
164
|
-
|
165
|
-
sleep 5
|
166
|
-
new_room
|
167
|
-
@is_renew = true
|
166
|
+
add_closing( sock )
|
168
167
|
return
|
169
168
|
end
|
170
169
|
|
@@ -209,6 +208,29 @@ module P2p2
|
|
209
208
|
add_write( @app, data, NEED_CHUNK )
|
210
209
|
end
|
211
210
|
|
211
|
+
def write_room( sock )
|
212
|
+
if @closings.include?( sock )
|
213
|
+
close_sock( sock )
|
214
|
+
sleep 5
|
215
|
+
new_room
|
216
|
+
@is_renew = true
|
217
|
+
@closings.delete( sock )
|
218
|
+
|
219
|
+
return
|
220
|
+
end
|
221
|
+
|
222
|
+
info = @infos[ sock ]
|
223
|
+
data = info[ :wbuff ]
|
224
|
+
|
225
|
+
if data.empty?
|
226
|
+
@writes.delete( sock )
|
227
|
+
return
|
228
|
+
end
|
229
|
+
|
230
|
+
sock.write( data )
|
231
|
+
info[ :wbuff ].clear
|
232
|
+
end
|
233
|
+
|
212
234
|
def write_p2( sock )
|
213
235
|
if @closings.include?( sock )
|
214
236
|
close_sock( sock )
|
@@ -367,9 +389,15 @@ module P2p2
|
|
367
389
|
room = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0 )
|
368
390
|
room.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )
|
369
391
|
room.setsockopt( Socket::SOL_TCP, Socket::TCP_NODELAY, 1 )
|
370
|
-
room.connect( @roomd_sockaddr )
|
371
392
|
|
393
|
+
begin
|
394
|
+
room.connect_nonblock( @roomd_sockaddr )
|
395
|
+
rescue IO::WaitWritable, Errno::EINTR
|
396
|
+
end
|
397
|
+
|
398
|
+
bytes = @title.unpack( "C*" ).map{ | c | c.chr }.join
|
372
399
|
room_info = {
|
400
|
+
wbuff: [ [ PAIRING, bytes.size ].pack( 'Cn' ), bytes ].join,
|
373
401
|
p1_sockaddr: nil,
|
374
402
|
rep2p: 0
|
375
403
|
}
|
@@ -378,9 +406,7 @@ module P2p2
|
|
378
406
|
@roles[ room ] = :room
|
379
407
|
@infos[ room ] = room_info
|
380
408
|
@reads << room
|
381
|
-
|
382
|
-
bytes = @title.unpack( "C*" ).map{ | c | c.chr }.join
|
383
|
-
@room.write( [ [ PAIRING, bytes.size ].pack( 'Cn' ), bytes ].join )
|
409
|
+
@writes << room
|
384
410
|
end
|
385
411
|
|
386
412
|
def new_p2
|
data/lib/p2p2/version.rb
CHANGED