dango 0.0.22 → 0.0.23

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.
@@ -138,8 +138,8 @@ module DangoFrameworkModule
138
138
  # size_str = sock.readpartial(CommMaxDigit + 1)
139
139
  # size_str = sock.sysread(CommMaxDigit + 1)
140
140
  size_str = sock.recv(CommMaxDigit + 1)
141
- rescue EOFError, Errno::ECONNRESET, Errno::ETIMEDOUT
142
- # EOFErrorはその接続終了時の切断と思われるのでDangoFrameworkConnectionErrorにしない
141
+ rescue EOFError, IOError, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::ECONNABORTED
142
+ # 接続終了時の切断と思われるものはDangoFrameworkConnectionErrorにしない
143
143
  #raise(DangoFrameworkError, "failed to read sock for EOF reached.\n#{error_message($!, 'u')}")
144
144
  raise(DangoFrameworkError, "failed to read sock for EOF reached (and so on). #{$!.class} toid=#{Thread.current.object_id}")
145
145
  rescue
@@ -240,7 +240,7 @@ module DangoFrameworkModule
240
240
 
241
241
  # if size >= 4294967296 # 本当はuint最大値なんだけれど、policyファイルの都合で変えてある
242
242
  if size >= 1886350440
243
- raise(DangoFrameworkError, "max size over. size:#{size} >= 4294967296")
243
+ raise(DangoFrameworkError, "max size over. size:#{size} >= 1886350440")
244
244
  end
245
245
 
246
246
  # size_str = sprintf("%0#{CommMaxDigit}d", size)
@@ -255,17 +255,17 @@ module DangoFrameworkModule
255
255
  sock.write send_buf
256
256
  sock.flush
257
257
 
258
- # sock.send(size_str + "\n", 0)
258
+ # sock.send(send_buf, 0)
259
259
  # sock.flush
260
260
 
261
- # sock.send(send_data, 0)
262
- # sock.flush
263
261
  rescue
264
262
  raise(DangoFrameworkConnectionError, "sock write failed.\n#{error_message($!, 'u')}")
265
263
  end
266
264
 
267
265
  @send_count += 1 if @send_count # 受信回数カウント
268
266
  # cs_logger.debug "finish send_data:#{send_data.inspect}"
267
+ # cs_logger.debug "finish send_data:#{Time.now_to_s}:toid=#{Thread.current.object_id} #{sock} #{sock.closed?}"
268
+
269
269
  sock
270
270
  end
271
271
  end
@@ -19,7 +19,8 @@ class DangoServerFramework
19
19
  SendReceiveSleepIntervalSec = 0.2 # データ送信後の順の際のタイムアウトチェック間隔秒
20
20
  SendReceiveTimeoutDefaultSec = 2.0 # データ送受信時のデフォルトタイムアウト秒数
21
21
  SendTimeoutSec = 10.0 # データ送受信時の送信のタイムアウト秒数
22
- HeratBeatIntervalSec = 60.0 # S=>Cのハートビートの送信タイミング
22
+ HeratBeatIntervalSec = 60.0 # S=>Cのheart beatの送信タイミング
23
+ HeratBeatResponseWaitlSec = 20.0 # S=>Cのheart beatの返信待ちタイミング
23
24
 
24
25
  class DangoGServer < GServer
25
26
  def initialize(parent, *args)
@@ -170,7 +171,8 @@ class DangoServerFramework
170
171
 
171
172
  # gserver接続開始処理
172
173
  def connecting(sock)
173
- cs_logger.debug "connecting:sock=#{sock}"
174
+ cs_logger.debug "connecting:sock=#{sock} peeraddr=#{sock.peeraddr.inspect} addr=#{sock.addr.inspect}"
175
+ # cs_logger.debug "getpeername=#{Socket.unpack_sockaddr_in(sock.getpeername).inspect} getsockname=#{Socket.unpack_sockaddr_in(sock.getsockname).inspect}"
174
176
  end
175
177
 
176
178
  # gserver接続開始処理
@@ -521,9 +523,10 @@ class DangoServerFramework
521
523
 
522
524
  # 全員へ空パケットを送信
523
525
  socket_list.keys.each do |sid|
524
- cs_logger.debug "heart_beat_thread_start:sid=#{sid}"
525
526
  sock = socket_list[sid]
526
- cs_send_data(sock, {})
527
+ cs_logger.debug "heart_beat_thread_start:sid=#{sid} #{sock} #{sock.closed?}"
528
+ # cs_send_data(sock, {})
529
+ cs_server_send_data(sid, "_heart_beat", {}, {:timeout=>HeratBeatResponseWaitlSec})
527
530
  end
528
531
  end
529
532
 
@@ -544,9 +547,14 @@ class DangoServerFramework
544
547
  timeout = options[:timeout] || SendReceiveTimeoutDefaultSec
545
548
  dtype = options[:type] || 0
546
549
 
550
+ sock = socket_list[sid]
551
+ if !sock # sockがないという事はすでに切断済み
552
+ cs_logger.info "cs_server_send_data:already closed socket. sid=#{sid.inspect} sock=#{sock.inspect} #{Time.now_to_s}"
553
+ return
554
+ end
555
+
547
556
  # sidの通知の場合はレスポンスを気にしない
548
557
  if notice_name.to_s == "_notice_sid"
549
- sock = socket_list[sid]
550
558
  raise(DangoFrameworkError, "not found sid=#{sid}") if !sock
551
559
  raise(DangoFrameworkConnectionError, "socket closed. sid=#{sid}") if sock.closed?
552
560
 
@@ -556,9 +564,8 @@ class DangoServerFramework
556
564
  cs_send_data(sock, send_obj_dup, :type=>dtype) # データ送信
557
565
  # cs_logger.debug "cs_server_send_data:finish send data notice_name=#{notice_name.inspect}\n"
558
566
  else
559
- Thread.start(sid, notice_name, send_obj, dtype, timeout) do
567
+ Thread.start(sid, notice_name, send_obj, dtype, timeout, sock) do
560
568
  begin
561
- sock = socket_list[sid]
562
569
  raise(DangoFrameworkError, "not found sid=#{sid}") if !sock
563
570
  raise(DangoFrameworkConnectionError, "socket closed. sid=#{sid}") if sock.closed?
564
571
 
@@ -596,6 +603,11 @@ class DangoServerFramework
596
603
  (timeout.to_f / SendReceiveSleepIntervalSec).to_i.times do
597
604
  if Time.now > end_reserved_time
598
605
  cs_logger.debug "cs_server_send_data:receive timeout:#{notice_name}"
606
+
607
+ if notice_name.to_s == "_heart_beat" # heart beatだったらsockを止める
608
+ cs_logger.info "!!!! cs_server_send_data:heart_beat timeout"
609
+ sock.close if !sock.closed?
610
+ end
599
611
  break
600
612
  end
601
613
 
@@ -603,6 +615,8 @@ class DangoServerFramework
603
615
  find_res = @arr_send_response.find{|r| r[:_id] == send_obj_dup["_id"]}
604
616
 
605
617
  if find_res
618
+ cs_logger.debug "cs_server_send_data:find_res _heart_beat #{sid}" if notice_name.to_s == "_heart_beat"
619
+
606
620
  @arr_send_response.delete(find_res)
607
621
  have_came_response = true
608
622
  throw(:send_timeout)
@@ -29,7 +29,8 @@ class SocketList
29
29
 
30
30
  def [](key)
31
31
  @sl_mutex.synchronize do
32
- raise("not exist key(#{key.inspect})") if ! @sl_hash.has_key?(key)
32
+ # raise("not exist key(#{key.inspect})") if ! @sl_hash.has_key?(key)
33
+ return(nil) if ! @sl_hash.has_key?(key)
33
34
  @sl_hash[key]
34
35
  end
35
36
  end
data/lib/dango/version.rb CHANGED
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 22
5
+ TINY = 23
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: dango
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.22
7
- date: 2007-10-29 00:00:00 +09:00
6
+ version: 0.0.23
7
+ date: 2007-10-30 00:00:00 +09:00
8
8
  summary: Realtime communications network framework for Ruby and Flash on Rails.
9
9
  require_paths:
10
10
  - lib