dango 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dango/framework_base.rb +6 -6
- data/lib/dango/server_framework.rb +21 -7
- data/lib/dango/socket_list.rb +2 -1
- data/lib/dango/version.rb +1 -1
- metadata +2 -2
data/lib/dango/framework_base.rb
CHANGED
@@ -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
|
-
#
|
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} >=
|
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(
|
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
|
-
|
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)
|
data/lib/dango/socket_list.rb
CHANGED
@@ -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
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.
|
7
|
-
date: 2007-10-
|
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
|