p2p2 0.6.1 → 0.6.2

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 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