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