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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eaf6056ab90a68ff5b5ce6fb268cb372c4a61b14db0db3a85535673baaf64c23
4
- data.tar.gz: 32b5cf384d5662ba67907abd45f83f4a3eae4f274b26091e5d8ef2f607ace663
3
+ metadata.gz: 2af1321c46206a876f75cd74f50aab8b5ed2951d92ae7e70c2dce68d1b29a9cc
4
+ data.tar.gz: 1a85a3f615031cc62d321d0aedb1400417c4a312e586081d95ca0784192ccf34
5
5
  SHA512:
6
- metadata.gz: 31237ac774d0eec40cf85501f399fc7bb63f113288d863d46745a48971b88d050e0fb2fe2ea2130ad86465a9e6e97424dc9fd82113de960b520f42048abe580a
7
- data.tar.gz: ae550abcea97666ea3c9361ca948be3d83341a101aa2806c836cf30771980cb41ced8c80f52d0fa287411ed30c934fc6c9fc895c5952825ddbe9a0f3fdfbef84
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
- close_sock( @room )
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
- close_sock( @room )
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
@@ -1,3 +1,3 @@
1
1
  module P2p2
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p2p2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - takafan