dango 0.0.32 → 0.0.34
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dango/client_framework.rb +10 -10
- data/lib/dango/framework_base.rb +18 -11
- data/lib/dango/server_framework.rb +31 -33
- data/lib/dango/tasks/dango_rake.rb +10 -8
- data/lib/dango/tester/dango_tester_client.rb +13 -13
- data/lib/dango/version.rb +1 -1
- metadata +2 -2
@@ -59,7 +59,7 @@ class DangoClientFramework
|
|
59
59
|
@log_level = @connection_client_log_level
|
60
60
|
|
61
61
|
# loggerの準備
|
62
|
-
logger.debug("-------client initialize")
|
62
|
+
logger.debug("-------client initialize host=#{@connection_client_host} port=#{@connection_client_port}")
|
63
63
|
|
64
64
|
# データ送受信用の共有メモリ初期化
|
65
65
|
send_return_shared_init()
|
@@ -75,7 +75,7 @@ class DangoClientFramework
|
|
75
75
|
# サーバーへ接続
|
76
76
|
begin
|
77
77
|
@sock = TCPSocket.new(@connection_client_host, @connection_client_port)
|
78
|
-
rescue Errno::EBADF
|
78
|
+
rescue Errno::EBADF, Exception
|
79
79
|
raise DangoFrameworkConnectionError
|
80
80
|
end
|
81
81
|
|
@@ -119,19 +119,19 @@ class DangoClientFramework
|
|
119
119
|
end
|
120
120
|
|
121
121
|
# メソッド呼び出し
|
122
|
-
logger.info "calling method=#{ret_obj["notice"].inspect} #{@sid}
|
122
|
+
logger.info "calling method=#{ret_obj["notice"].inspect} #{@sid} "
|
123
123
|
begin
|
124
124
|
__send__("dango_receive_#{ret_obj["notice"]}", ret_obj)
|
125
125
|
rescue
|
126
|
-
logger.error "error in dango_receive_#{ret_obj["notice"]} #{@sid}
|
126
|
+
logger.error "error in dango_receive_#{ret_obj["notice"]} #{@sid} \n#{error_message($!, 'u')}"
|
127
127
|
ensure
|
128
128
|
# データの受信の送信返し
|
129
129
|
response_notice_name = "_response"
|
130
130
|
send_obj = {"_id" => ret_obj["_id"]}
|
131
131
|
send_action(response_notice_name, send_obj)
|
132
|
-
logger.debug "response_notice_name=#{response_notice_name.inspect} #{@sid}
|
132
|
+
logger.debug "response_notice_name=#{response_notice_name.inspect} #{@sid} "
|
133
133
|
end
|
134
|
-
logger.debug "called method=#{ret_obj["notice"].inspect} #{@sid}
|
134
|
+
logger.debug "called method=#{ret_obj["notice"].inspect} #{@sid} "
|
135
135
|
|
136
136
|
else
|
137
137
|
sleep 0.01
|
@@ -155,13 +155,13 @@ class DangoClientFramework
|
|
155
155
|
sleep HeartBeatSendIntervalSec
|
156
156
|
|
157
157
|
if @sock && ! @sock.closed?
|
158
|
-
logger.debug "dango_heart_beat_thread_init:send _notice_heart_beat
|
158
|
+
logger.debug "dango_heart_beat_thread_init:send _notice_heart_beat:"
|
159
159
|
|
160
160
|
send_action("_notice_heart_beat", {})
|
161
161
|
end
|
162
162
|
|
163
163
|
rescue
|
164
|
-
logger.error "Exception dango_heart_beat_thread_init
|
164
|
+
logger.error "Exception dango_heart_beat_thread_init #{error_message($!, 'u')}"
|
165
165
|
end
|
166
166
|
end
|
167
167
|
end
|
@@ -203,7 +203,7 @@ class DangoClientFramework
|
|
203
203
|
@sock = nil
|
204
204
|
|
205
205
|
@is_session_closed = true
|
206
|
-
logger.info "calling dango_session_closed()
|
206
|
+
logger.info "calling dango_session_closed():"
|
207
207
|
dango_session_closed() # セッションが切れると呼ばれる処理
|
208
208
|
|
209
209
|
@is_close = true
|
@@ -229,7 +229,7 @@ class DangoClientFramework
|
|
229
229
|
|
230
230
|
# クライアントからサーバーへのデータ送信
|
231
231
|
def send_action(action_name, send_obj)
|
232
|
-
logger.debug "send_action(#{action_name.inspect}, #{send_obj['_id']})
|
232
|
+
logger.debug "send_action(#{action_name.inspect}, #{send_obj['_id']}) "
|
233
233
|
send_obj_dup = send_obj.dup
|
234
234
|
send_obj_dup["action"] = action_name.to_s
|
235
235
|
dango_send_data(@sock, send_obj_dup)
|
data/lib/dango/framework_base.rb
CHANGED
@@ -6,8 +6,9 @@
|
|
6
6
|
|
7
7
|
require "rubygems"
|
8
8
|
|
9
|
-
require '
|
9
|
+
require 'resolv-replace' # 名前解決時のロックがかかってしまう件を解決できるはず
|
10
10
|
require 'socket'
|
11
|
+
require 'logger'
|
11
12
|
require 'thread'
|
12
13
|
require 'timeout'
|
13
14
|
require 'yaml'
|
@@ -44,7 +45,7 @@ class Time
|
|
44
45
|
def self.now_to_s
|
45
46
|
# self.strftime("%Y-%m-%d %H:%M:%S")
|
46
47
|
now = self.now
|
47
|
-
now.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d
|
48
|
+
now.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d" % now.usec
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
@@ -113,21 +114,27 @@ module DangoFrameworkModule
|
|
113
114
|
|
114
115
|
# ロガーの定義
|
115
116
|
def logger
|
116
|
-
# if !@
|
117
|
-
if !self.instance_variables.find{|iv| iv == '@
|
117
|
+
# if !@dango_logger # これだと警告が出てうざいので
|
118
|
+
if !self.instance_variables.find{|iv| iv == '@dango_logger'} # @dango_loggerが未定義なら
|
118
119
|
if @log_file != ""
|
119
120
|
log_dir = File.dirname(@log_file)
|
120
121
|
Dir.mkdir(log_dir) if !File.exist?(log_dir)
|
121
|
-
@
|
122
|
-
@
|
123
|
-
@
|
124
|
-
#
|
125
|
-
|
122
|
+
@dango_logger = Logger.new(@log_file)
|
123
|
+
@dango_logger.level = @log_level
|
124
|
+
def @dango_logger.format_message(severity, timestamp, msg, progname)
|
125
|
+
# "#{Time.now_to_s}:#{sprintf('%1.1s', severity)}:#{progname}:#{msg}\n"
|
126
|
+
# "%s, [%s#%d] %5s -- %s: %s\n" % [severity[0..0], format_datetime(time), $$, severity, progname,msg2str(msg)]
|
127
|
+
now = Time.now
|
128
|
+
now_str = now.strftime("%Y-%m-%d %H:%M:%S.") << "%06d" % now.usec
|
129
|
+
"%1.1s, [%s] %d:%s %s\n" % [severity, now_str, Thread.current.object_id, progname, msg]
|
130
|
+
end
|
126
131
|
end
|
127
132
|
end
|
128
|
-
@
|
133
|
+
@dango_logger
|
129
134
|
end
|
130
135
|
|
136
|
+
attr(:dango_logger)
|
137
|
+
|
131
138
|
# データ受信処理
|
132
139
|
def dango_receive_data(sock)
|
133
140
|
ret_data = ""
|
@@ -264,7 +271,7 @@ module DangoFrameworkModule
|
|
264
271
|
|
265
272
|
@send_count += 1 if @send_count # 受信回数カウント
|
266
273
|
# logger.debug "finish dango_send_data:#{send_data.inspect}"
|
267
|
-
# logger.debug "finish dango_send_data
|
274
|
+
# logger.debug "finish dango_send_data:toid=#{Thread.current.object_id} #{sock} #{sock.closed?}"
|
268
275
|
|
269
276
|
sock
|
270
277
|
end
|
@@ -84,7 +84,6 @@ class DangoServerFramework
|
|
84
84
|
set_server_variables() # 各種サーバー仕様の変数設定
|
85
85
|
|
86
86
|
logger.debug("===== server initialize =====") # loggerの準備
|
87
|
-
logger.debug("#{Time.now_to_s}")
|
88
87
|
logger.debug("Process.pid=#{Process.pid}")
|
89
88
|
logger.debug("port=#{@connection_server_port}")
|
90
89
|
logger.debug("host=#{@connection_server_host}")
|
@@ -198,14 +197,13 @@ class DangoServerFramework
|
|
198
197
|
|
199
198
|
# gserver接続開始処理
|
200
199
|
def disconnecting(port)
|
201
|
-
logger.debug "disconnecting:port=#{port}
|
200
|
+
logger.debug "disconnecting:port=#{port}"
|
202
201
|
end
|
203
202
|
|
204
203
|
# gserverのserveメソッド:スレッド開始処理
|
205
204
|
def thread_main(sock)
|
206
|
-
logger.debug "thread_main:start"
|
207
205
|
# logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id} sock_id=#{sock.object_id}"
|
208
|
-
logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id}"
|
206
|
+
logger.debug "#{sock} is accepted. thread.current=#{Thread.current.object_id} "
|
209
207
|
|
210
208
|
begin
|
211
209
|
sock.binmode
|
@@ -222,7 +220,7 @@ class DangoServerFramework
|
|
222
220
|
# 接続直後のsid通知
|
223
221
|
send_obj = {"_sid"=>sid}
|
224
222
|
send_notice(sid, "_notice_sid", send_obj)
|
225
|
-
logger.debug "_notice_sid #{sid}
|
223
|
+
logger.debug "_notice_sid #{sid} "
|
226
224
|
|
227
225
|
# 誰かが接続したときに60秒以上経った@arr_send_responseを削除
|
228
226
|
@mutex_send_response.synchronize do
|
@@ -245,7 +243,7 @@ class DangoServerFramework
|
|
245
243
|
end
|
246
244
|
|
247
245
|
if is_flash_policy_file && @policy_file_request # Flashのポリシーファイルが来たら
|
248
|
-
logger.debug "is_flash_policy_file #{sid}
|
246
|
+
logger.debug "is_flash_policy_file #{sid} "
|
249
247
|
policy_data = '<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>' + "\0" + "\n"
|
250
248
|
logger.debug policy_data
|
251
249
|
sock.write policy_data
|
@@ -254,7 +252,7 @@ class DangoServerFramework
|
|
254
252
|
raise(DangoFrameworkFlashPolicyError, "policy file sent. disconnectiong...")
|
255
253
|
|
256
254
|
elsif ret_obj == {} # 受信データがなければ
|
257
|
-
# logger.debug "ret_obj is empty.
|
255
|
+
# logger.debug "ret_obj is empty. "
|
258
256
|
|
259
257
|
else # 受信データがあれば
|
260
258
|
if !(ret_obj && ret_obj["action"]) # actionが無い場合はエラー
|
@@ -268,14 +266,14 @@ class DangoServerFramework
|
|
268
266
|
@mutex_proc_thread.synchronize do
|
269
267
|
|
270
268
|
if action_name == '_response' # 送信パケットの返事なら
|
271
|
-
# logger.debug "action_name=#{action_name} #{ret_obj['_id']}
|
269
|
+
# logger.debug "action_name=#{action_name} #{ret_obj['_id']} "
|
272
270
|
action_name_is_response(ret_obj)
|
273
271
|
|
274
272
|
elsif action_name[0, 9] == '_monitor_' # メンテナンスアクション名なら
|
275
273
|
ServerMonitorAction.new(self, @config, sock, ret_obj)
|
276
274
|
|
277
275
|
else # メンテナンスコマンド以外のユーザーアクション名なら
|
278
|
-
logger.debug "receive_action:#{sid}:#{action_name}
|
276
|
+
logger.debug "receive_action:#{sid}:#{action_name}:"
|
279
277
|
begin
|
280
278
|
__send__("dango_receive_#{action_name}", ret_obj)
|
281
279
|
rescue NoMethodError
|
@@ -290,23 +288,23 @@ class DangoServerFramework
|
|
290
288
|
end # loop
|
291
289
|
|
292
290
|
rescue DangoFrameworkFlashPolicyError
|
293
|
-
logger.debug "Flash policy file send. #{sid}
|
291
|
+
logger.debug "Flash policy file send. #{sid} "
|
294
292
|
|
295
293
|
rescue DangoFrameworkMonitorSecurityError
|
296
|
-
logger.debug "Monitor Security Error #{sid}
|
294
|
+
logger.debug "Monitor Security Error #{sid} "
|
297
295
|
|
298
296
|
rescue DangoFrameworkReadNoDataError
|
299
|
-
logger.debug "read no data. maybe client closed. #{sid}
|
297
|
+
logger.debug "read no data. maybe client closed. #{sid} "
|
300
298
|
|
301
299
|
rescue DangoFrameworkConnectionError
|
302
300
|
@recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
|
303
|
-
logger.debug "connection error. #{sid}
|
301
|
+
logger.debug "connection error. #{sid} \n#{error_message($!, 'u')}"
|
304
302
|
|
305
303
|
rescue DangoFrameworkError
|
306
|
-
logger.debug "DangoFrameworkError. #{sid}
|
304
|
+
logger.debug "DangoFrameworkError. #{sid} \n#{error_message($!, 'u')}"
|
307
305
|
|
308
306
|
rescue Exception
|
309
|
-
logger.error "Exception #{sid} #{
|
307
|
+
logger.error "Exception #{sid} #{error_message($!, 'u')}"
|
310
308
|
|
311
309
|
ensure
|
312
310
|
logger.debug "#{sock.inspect} #{sid} is gone"
|
@@ -335,7 +333,7 @@ class DangoServerFramework
|
|
335
333
|
|
336
334
|
# action_nameが送信パケットの返事なら
|
337
335
|
def action_name_is_response(ret_obj)
|
338
|
-
logger.debug "action_name_is_response: #{ret_obj['_id']} #{session[:sid]}
|
336
|
+
logger.debug "action_name_is_response: #{ret_obj['_id']} #{session[:sid]} "
|
339
337
|
@mutex_send_response.synchronize do
|
340
338
|
@arr_send_response.push({:_id => ret_obj["_id"], :time => Time.now})
|
341
339
|
end
|
@@ -550,15 +548,15 @@ class DangoServerFramework
|
|
550
548
|
begin
|
551
549
|
sleep @gc_interval_sec
|
552
550
|
|
553
|
-
logger.debug "GC start
|
551
|
+
logger.debug "GC start "
|
554
552
|
gc_start_time = Time.now
|
555
553
|
GC.enable
|
556
554
|
GC.start
|
557
555
|
GC.disable
|
558
|
-
logger.debug "GC end #{Time.now - gc_start_time}sec
|
556
|
+
logger.debug "GC end #{Time.now - gc_start_time}sec "
|
559
557
|
|
560
558
|
rescue
|
561
|
-
logger.error "Exception gc_thread_start
|
559
|
+
logger.error "Exception gc_thread_start #{error_message($!, 'u')}"
|
562
560
|
end
|
563
561
|
end
|
564
562
|
end
|
@@ -575,7 +573,7 @@ class DangoServerFramework
|
|
575
573
|
sleep @herat_beat_interval_sec
|
576
574
|
|
577
575
|
if ! @gserver.stopped? # gserverが起動していれば
|
578
|
-
logger.debug "heart_beat_thread_start
|
576
|
+
logger.debug "heart_beat_thread_start "
|
579
577
|
|
580
578
|
# クライアントから来るハートビートのチェック
|
581
579
|
heart_beat_time_hash = shared[:heart_beat_time_hash]
|
@@ -588,14 +586,14 @@ class DangoServerFramework
|
|
588
586
|
|
589
587
|
# クライアントから来たハートビートの時間チェック
|
590
588
|
if heart_beat_time_hash[sid] && heart_beat_time_hash[sid] < Time.now - @heart_beat_receive_wait_sec
|
591
|
-
logger.debug "!!!! heart_beat_thread_start:heart beat old:#{sid}:#{heart_beat_time_hash[sid]}:#{
|
589
|
+
logger.debug "!!!! heart_beat_thread_start:heart beat old:#{sid}:#{heart_beat_time_hash[sid]}:#{sock}:#{sock.closed?}"
|
592
590
|
sock.close if !sock.closed?
|
593
591
|
end
|
594
592
|
end
|
595
593
|
end
|
596
594
|
|
597
595
|
rescue
|
598
|
-
logger.error "Exception heart_beat_thread_start
|
596
|
+
logger.error "Exception heart_beat_thread_start #{error_message($!, 'u')}"
|
599
597
|
end
|
600
598
|
end
|
601
599
|
end
|
@@ -604,7 +602,7 @@ class DangoServerFramework
|
|
604
602
|
|
605
603
|
# クライアントから来たheart_beatなら
|
606
604
|
def dango_receive__notice_heart_beat(ret_obj)
|
607
|
-
logger.debug "dango_receive__notice_heart_beat:#{session[:sid]}:#{ret_obj['_hb_id']}
|
605
|
+
logger.debug "dango_receive__notice_heart_beat:#{session[:sid]}:#{ret_obj['_hb_id']} "
|
608
606
|
|
609
607
|
shared.transaction(:heart_beat_time_hash) do |heart_beat_time_hash|
|
610
608
|
heart_beat_time_hash[session[:sid]] = Time.now
|
@@ -614,7 +612,7 @@ class DangoServerFramework
|
|
614
612
|
|
615
613
|
# サーバーからクライアントへのデータ送信
|
616
614
|
def send_notice(sid, notice_name, send_obj, options = {})
|
617
|
-
logger.debug "send_notice(#{sid.inspect}, #{notice_name.inspect})
|
615
|
+
logger.debug "send_notice(#{sid.inspect}, #{notice_name.inspect}) "
|
618
616
|
# logger.debug "send_notice(#{sid.inspect}, #{notice_name.inspect}, #{send_obj.inspect}, #{options.inspect})"
|
619
617
|
|
620
618
|
raise(DangoFrameworkError, "send_obj is not Hash.") if ! send_obj.is_a?(Hash)
|
@@ -624,7 +622,7 @@ class DangoServerFramework
|
|
624
622
|
|
625
623
|
sock = socket_list[sid]
|
626
624
|
if !sock || sock.closed? # sockがないという事はすでに切断済み
|
627
|
-
logger.info "send_notice:already closed socket. sid=#{sid.inspect} sock=#{sock.inspect} #{sock ? sock.closed? : nil}
|
625
|
+
logger.info "send_notice:already closed socket. sid=#{sid.inspect} sock=#{sock.inspect} #{sock ? sock.closed? : nil} "
|
628
626
|
return(self)
|
629
627
|
end
|
630
628
|
|
@@ -648,7 +646,7 @@ class DangoServerFramework
|
|
648
646
|
send_obj_dup["notice"] = notice_name.to_s
|
649
647
|
|
650
648
|
mutex_socket_list.synchronize(sid) do
|
651
|
-
# logger.debug "mutex_socket_list:synchronize:#{notice_name} #{sid}
|
649
|
+
# logger.debug "mutex_socket_list:synchronize:#{notice_name} #{sid} "
|
652
650
|
|
653
651
|
digest_key = sid.to_s + notice_name.to_s + Time.now.to_f.to_s + rand().to_s
|
654
652
|
send_obj_dup["_id"] = Digest::MD5.hexdigest(digest_key)
|
@@ -657,20 +655,20 @@ class DangoServerFramework
|
|
657
655
|
receive_thread = Thread.start(sock, send_obj_dup, dtype) do
|
658
656
|
begin
|
659
657
|
dango_send_data(sock, send_obj_dup, :type=>dtype) # データ送信
|
660
|
-
# logger.debug "send_notice:sent:notice_name=#{send_obj_dup['_id']} #{notice_name.inspect} #{sid}
|
658
|
+
# logger.debug "send_notice:sent:notice_name=#{send_obj_dup['_id']} #{notice_name.inspect} #{sid} "
|
661
659
|
rescue DangoFrameworkConnectionError
|
662
|
-
logger.debug "send_notice:DangoFrameworkConnectionError:notice_name=#{notice_name.inspect} #{sid}
|
660
|
+
logger.debug "send_notice:DangoFrameworkConnectionError:notice_name=#{notice_name.inspect} #{sid} "
|
663
661
|
rescue DangoFrameworkError
|
664
|
-
logger.debug "ERROR:send_notice:DangoFrameworkError:notice_name=#{notice_name.inspect} #{sid}
|
662
|
+
logger.debug "ERROR:send_notice:DangoFrameworkError:notice_name=#{notice_name.inspect} #{sid} \n #{error_message($!, 'u')}"
|
665
663
|
end
|
666
664
|
end
|
667
665
|
|
668
666
|
# データ送信スレッドの終了待ち
|
669
667
|
if !receive_thread.join(@send_timeout_sec)
|
670
668
|
# タイムアウトの場合は
|
671
|
-
logger.warn "send_notice:send timeout:#{notice_name} #{sid}
|
669
|
+
logger.warn "send_notice:send timeout:#{notice_name} #{sid} "
|
672
670
|
else
|
673
|
-
# logger.warn "send_notice:sent after join:#{notice_name} #{sid}
|
671
|
+
# logger.warn "send_notice:sent after join:#{notice_name} #{sid} "
|
674
672
|
end_reserved_time = Time.now + timeout
|
675
673
|
|
676
674
|
# タイムアウトチェック
|
@@ -691,7 +689,7 @@ class DangoServerFramework
|
|
691
689
|
end
|
692
690
|
|
693
691
|
if Time.now > end_reserved_time
|
694
|
-
logger.debug "send_notice:receive timeout:#{notice_name} #{sid}
|
692
|
+
logger.debug "send_notice:receive timeout:#{notice_name} #{sid} #{end_reserved_time}"
|
695
693
|
|
696
694
|
if notice_name.to_s == "_heart_beat" # heart beatだったらsockを止める
|
697
695
|
logger.info "!!!! send_notice:heart_beat timeout"
|
@@ -704,7 +702,7 @@ class DangoServerFramework
|
|
704
702
|
end # catch 終わり
|
705
703
|
|
706
704
|
if !have_came_response # 戻ってきたデータがあるかどうかチェック
|
707
|
-
logger.warn "!!! received data is none:#{notice_name} #{sid} #{send_obj_dup['_id']}
|
705
|
+
logger.warn "!!! received data is none:#{notice_name} #{sid} #{send_obj_dup['_id']} "
|
708
706
|
end
|
709
707
|
end
|
710
708
|
end # mutex
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# 環境変数設定
|
2
2
|
ENV['RAILS_ENV'] = ENV['RAILS_ENV'] || 'development'
|
3
3
|
|
4
|
+
require "pp"
|
5
|
+
|
4
6
|
namespace :dango do
|
5
7
|
desc "initialize dango"
|
6
8
|
task :initialize do
|
@@ -71,13 +73,13 @@ namespace :dango do
|
|
71
73
|
require 'dango/monitor/dango_monitor_client.rb'
|
72
74
|
begin
|
73
75
|
dm = DangoMonitorClient.new()
|
74
|
-
|
76
|
+
pp dm.server_reload()
|
75
77
|
dm.dango_client_close
|
76
78
|
puts "complete server_reload."
|
77
79
|
rescue
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
pp $!.class
|
81
|
+
pp $!.message
|
82
|
+
pp $!.backtrace
|
81
83
|
puts "failed server_reload."
|
82
84
|
end
|
83
85
|
end
|
@@ -99,13 +101,13 @@ namespace :dango do
|
|
99
101
|
|
100
102
|
begin
|
101
103
|
dm = DangoMonitorClient.new()
|
102
|
-
|
104
|
+
pp dm.send_system_message(message)
|
103
105
|
dm.dango_client_close
|
104
106
|
puts "complete send_system_message."
|
105
107
|
rescue
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
pp $!.class
|
109
|
+
pp $!.message
|
110
|
+
pp $!.backtrace
|
109
111
|
puts "failed send_system_message."
|
110
112
|
end
|
111
113
|
end
|
@@ -137,13 +137,13 @@ class TestClient < DangoClientFramework
|
|
137
137
|
|
138
138
|
# テストサーバー
|
139
139
|
def send(name, send_obj = {})
|
140
|
-
logger.debug("tester.send:send_obj=#{send_obj.inspect}
|
140
|
+
logger.debug("tester.send:send_obj=#{send_obj.inspect} ")
|
141
141
|
send_action(name, send_obj)
|
142
142
|
end
|
143
143
|
|
144
144
|
# trap_receive
|
145
145
|
def trap_receive(notice_name, options = {})
|
146
|
-
logger.debug "trap_receive_data:#{notice_name}
|
146
|
+
logger.debug "trap_receive_data:#{notice_name}:"
|
147
147
|
timeout = options[:timeout] || ReceiveTrapTimeoutSec
|
148
148
|
trap_proc = options[:proc] || nil
|
149
149
|
trap_loop = options[:loop] || nil # procがある場合のみ有効なフラグ
|
@@ -180,12 +180,12 @@ class TestClient < DangoClientFramework
|
|
180
180
|
# タイムアウトチェック
|
181
181
|
loop do
|
182
182
|
if end_reserved_time != Time.at(0) && end_reserved_time < Time.now
|
183
|
-
raise(DangoFrameworkTimeoutError, "timeout:timeout_sec=#{timeout}
|
183
|
+
raise(DangoFrameworkTimeoutError, "timeout:timeout_sec=#{timeout}: \n client_name=#{@client_name}(#{self.sid}): \n notice_name=#{notice_name}")
|
184
184
|
end
|
185
185
|
|
186
186
|
# 戻ってきたデータがあれば
|
187
187
|
if send_receive_shared[notice_name]
|
188
|
-
logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect}
|
188
|
+
logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect} "
|
189
189
|
break
|
190
190
|
end
|
191
191
|
|
@@ -199,7 +199,7 @@ class TestClient < DangoClientFramework
|
|
199
199
|
|
200
200
|
# :procが設定されている場合は、それを呼び出す
|
201
201
|
if trap_proc
|
202
|
-
logger.debug "trap_receive_data:trap_proc:#{trap_proc.inspect}
|
202
|
+
logger.debug "trap_receive_data:trap_proc:#{trap_proc.inspect} "
|
203
203
|
trap_proc.call(send_receive_shared[notice_name])
|
204
204
|
send_receive_shared[notice_name] = nil
|
205
205
|
break if ! trap_loop # loopする必要がなければスレッド終了
|
@@ -207,7 +207,7 @@ class TestClient < DangoClientFramework
|
|
207
207
|
# :procが設定されていなければ、wait用に@receive_arrに入れておく
|
208
208
|
else
|
209
209
|
@receive_mutex.synchronize do
|
210
|
-
logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect}
|
210
|
+
logger.debug "notice_name:#{notice_name}:#{send_receive_shared[notice_name].inspect} "
|
211
211
|
@receive_arr.push([notice_name.deep_dup, send_receive_shared[notice_name].deep_dup])
|
212
212
|
send_receive_shared[notice_name] = nil
|
213
213
|
end
|
@@ -228,22 +228,22 @@ class TestClient < DangoClientFramework
|
|
228
228
|
@trap_thread_hash[notice_name] = th
|
229
229
|
else
|
230
230
|
|
231
|
-
logger.debug "trap_receive_data:already register trap:notice_name:#{notice_name}
|
231
|
+
logger.debug "trap_receive_data:already register trap:notice_name:#{notice_name} "
|
232
232
|
end
|
233
233
|
|
234
234
|
end
|
235
235
|
|
236
236
|
# cancel trap_receive
|
237
237
|
def cancel_trap_receive(notice_name, options = {})
|
238
|
-
logger.debug "cancel_trap_receive:#{notice_name}
|
238
|
+
logger.debug "cancel_trap_receive:#{notice_name}:"
|
239
239
|
|
240
240
|
# trapスレッドの削除
|
241
241
|
if @trap_thread_hash[notice_name]
|
242
|
-
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }
|
242
|
+
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:"
|
243
243
|
@trap_thread_hash[notice_name].kill
|
244
|
-
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }
|
244
|
+
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:"
|
245
245
|
@trap_thread_hash[notice_name].join
|
246
|
-
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }
|
246
|
+
logger.debug "cancel_trap_receive:#{@trap_thread_hash[notice_name].status }:"
|
247
247
|
|
248
248
|
@trap_thread_hash.delete(notice_name)
|
249
249
|
end
|
@@ -258,7 +258,7 @@ class TestClient < DangoClientFramework
|
|
258
258
|
|
259
259
|
# wait_receive
|
260
260
|
def wait_receive(notice_name, options = {})
|
261
|
-
logger.debug "wait_receive_data:#{notice_name}
|
261
|
+
logger.debug "wait_receive_data:#{notice_name}:"
|
262
262
|
timeout = options[:timeout] || ReceiveWaitTimeoutSec
|
263
263
|
|
264
264
|
# データ受信待ち
|
@@ -279,7 +279,7 @@ class TestClient < DangoClientFramework
|
|
279
279
|
|
280
280
|
# タイムアウトなら
|
281
281
|
if receive_data == nil
|
282
|
-
raise(DangoFrameworkTimeoutError, "timeout:timeout_sec=#{timeout}
|
282
|
+
raise(DangoFrameworkTimeoutError, "timeout:timeout_sec=#{timeout}: \n client_name=#{@client_name}(#{self.sid}) \n :notice_name=#{notice_name} \n")
|
283
283
|
end
|
284
284
|
|
285
285
|
# 結果を削除しておく
|
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-11-
|
6
|
+
version: 0.0.34
|
7
|
+
date: 2007-11-13 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
|