dango 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dango/framework_base.rb +1 -1
- data/lib/dango/server_framework.rb +67 -29
- data/lib/dango/version.rb +1 -1
- metadata +2 -2
data/lib/dango/framework_base.rb
CHANGED
@@ -75,7 +75,7 @@ module DangoUtilModule
|
|
75
75
|
# arrは順番を入れ替えたい配列
|
76
76
|
# numは入れ替え回数(省略時2、大きな数を入れると確実にランダムになるが時間が掛かる)
|
77
77
|
def array_random(arr, num = 2)
|
78
|
-
arr.sort_by{rand}
|
78
|
+
arr.sort_by{rand}.deep_dup
|
79
79
|
|
80
80
|
# ret_arr = arr.deep_dup
|
81
81
|
# (ret_arr.size * num).times do # メンバー数のnum倍の回数、入れ替え
|
@@ -71,22 +71,23 @@ class DangoServerFramework
|
|
71
71
|
self.new(config)
|
72
72
|
end
|
73
73
|
|
74
|
-
|
75
74
|
# サーバー開始処理
|
76
75
|
def server_start()
|
77
76
|
set_server_variables() # 各種サーバー仕様の変数設定
|
77
|
+
|
78
|
+
cs_logger.debug("===== server initialize =====") # loggerの準備
|
79
|
+
cs_logger.debug("port=#{@connection_server_port}")
|
80
|
+
cs_logger.debug("host=#{@connection_server_host}")
|
81
|
+
cs_logger.debug("max_connections=#{@connection_server_max_connections}")
|
82
|
+
|
78
83
|
shared_init() # 共有メモリを初期化
|
79
84
|
notice_shared_init() # 通知共有メモリを初期化
|
80
85
|
socket_list_init() # ソケット一覧を初期化
|
81
86
|
mutex_socket_list_init(cs_logger()) # ソケット毎用のmutexを初期化
|
82
87
|
send_receive_shared_init() # データ送受信用の共有メモリ初期化
|
88
|
+
@mutex_proc_thread = Mutex.new # スレッドが同時起動しないようにするためのMutex
|
83
89
|
cs_server_init() # 初期設定読み込み
|
84
90
|
|
85
|
-
cs_logger.debug("===== server initialize =====") # loggerの準備
|
86
|
-
cs_logger.debug("port=#{@connection_server_port}")
|
87
|
-
cs_logger.debug("host=#{@connection_server_host}")
|
88
|
-
cs_logger.debug("max_connections=#{@connection_server_max_connections}")
|
89
|
-
|
90
91
|
@gserver = DangoGServer.new(self, @connection_server_port,
|
91
92
|
@connection_server_host,
|
92
93
|
@connection_server_max_connections)
|
@@ -227,20 +228,24 @@ class DangoServerFramework
|
|
227
228
|
action_name = ret_obj["action"].to_s
|
228
229
|
cs_logger.debug "action_name=#{action_name}"
|
229
230
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
231
|
+
@mutex_proc_thread.synchronize do
|
232
|
+
|
233
|
+
if action_name == 'monitor_all_info' # メンテナンスアクション名なら
|
234
|
+
cs_check_monitor_error(sock, "return_monitor_all_info")
|
235
|
+
cs_server_monitor_all_info()
|
236
|
+
elsif action_name == 'monitor_server_reload' # メンテナンスアクション名なら
|
237
|
+
cs_check_monitor_error(sock, "return_monitor_server_reload")
|
238
|
+
cs_server_monitor_server_reload()
|
239
|
+
else # メンテナンスコマンド以外のユーザーアクション名なら
|
240
|
+
begin
|
241
|
+
__send__("cs_receive_#{action_name}", ret_obj)
|
242
|
+
rescue NoMethodError
|
243
|
+
@recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
|
244
|
+
cs_logger.error "not find action #{action_name}:#{error_message($!, 'u')}"
|
245
|
+
end
|
242
246
|
end
|
243
|
-
|
247
|
+
|
248
|
+
end # @mutex_proc_thread.synchronize
|
244
249
|
end
|
245
250
|
end
|
246
251
|
|
@@ -273,6 +278,10 @@ class DangoServerFramework
|
|
273
278
|
|
274
279
|
# 各種サーバー仕様の変数設定
|
275
280
|
def set_server_variables()
|
281
|
+
# debug
|
282
|
+
@server_debug = @config['server']['debug'] || false
|
283
|
+
Thread.abort_on_exception = true if @server_debug
|
284
|
+
|
276
285
|
# 変数の初期設定
|
277
286
|
@connection_server_port = @config['network']['port'] || 15000
|
278
287
|
@connection_server_host = @config['server']['host'] || "localhost"
|
@@ -557,10 +566,6 @@ class DangoServerFramework
|
|
557
566
|
expr = <<-EOF
|
558
567
|
def self.#{instance_method_name}(ret_obj)
|
559
568
|
begin
|
560
|
-
# cs_logger.debug "instance_eval ret_obj=" + ret_obj.inspect
|
561
|
-
# cs_logger.debug "instance_eval notice_name_sym=#{notice_name_sym}"
|
562
|
-
# cs_logger.debug "instance_eval send_one=" + send_receive_shared[#{notice_name_sym}].inspect
|
563
|
-
# cs_logger.debug "instance_eval send_all=" + send_receive_shared.keys
|
564
569
|
send_receive_shared[#{notice_name_sym}] = ret_obj
|
565
570
|
rescue Exception
|
566
571
|
cs_logger.debug "instance_eval Error=" + $!.class.to_s
|
@@ -576,13 +581,21 @@ class DangoServerFramework
|
|
576
581
|
|
577
582
|
# タイムアウトチェック
|
578
583
|
(timeout.to_f / SendReceiveSleepIntervalSec).to_i.times do
|
579
|
-
|
584
|
+
if Time.now > end_reserved_time
|
585
|
+
cs_logger.debug "timeout:#{notice_name}"
|
586
|
+
break
|
587
|
+
# raise(DangoFrameworkTimeoutError, "timeout:#{notice_name}")
|
588
|
+
end
|
580
589
|
|
581
590
|
# 送信スレッドが開始していなければ開始
|
582
591
|
if !receive_thread
|
583
592
|
receive_thread = Thread.start do
|
584
|
-
|
585
|
-
|
593
|
+
begin
|
594
|
+
cs_send_data(sock, send_obj_dup, :type=>dtype) # データ送信
|
595
|
+
# cs_logger.debug "cs_server_send_data:send data notice_name=#{notice_name.inspect}\n"
|
596
|
+
rescue DangoFrameworkError
|
597
|
+
cs_logger.debug "cs_server_send_data:notice_name=#{notice_name.inspect}\n"
|
598
|
+
end
|
586
599
|
end
|
587
600
|
end
|
588
601
|
|
@@ -592,12 +605,12 @@ class DangoServerFramework
|
|
592
605
|
break
|
593
606
|
end
|
594
607
|
|
595
|
-
# cs_logger.debug "sleep:#{SendReceiveSleepIntervalSec}"
|
596
608
|
sleep SendReceiveSleepIntervalSec # スリープ
|
597
|
-
end
|
609
|
+
end # タイムアウト処理終わり
|
598
610
|
|
599
611
|
if !send_receive_shared[notice_name] # 戻ってきたデータがあるかどうかチェック
|
600
|
-
raise(DangoFrameworkError, "received data is none")
|
612
|
+
# raise(DangoFrameworkError, "received data is none")
|
613
|
+
cs_logger.debug "received data is none. #{send_receive_shared[notice_name].inspect}"
|
601
614
|
end
|
602
615
|
|
603
616
|
remove_method(instance_method_name) # 定義したインスタンスメソッドを削除しておく
|
@@ -676,5 +689,30 @@ class DangoServerFramework
|
|
676
689
|
notice_shared.notice_change(key.to_sym, send_obj)
|
677
690
|
end
|
678
691
|
|
692
|
+
# メインループ用の定義をするためのメソッド
|
693
|
+
def flameloop_thread(loop_method, options={})
|
694
|
+
cs_logger.debug "flameloop_thread options:#{options.inspect}"
|
695
|
+
|
696
|
+
options = options.deep_dup
|
697
|
+
options[:rate] ||= 10
|
698
|
+
|
699
|
+
wait_msec = 1.0 / options[:rate]
|
700
|
+
cs_logger.debug "flameloop_thread wait_msec:#{wait_msec.inspect}"
|
701
|
+
|
702
|
+
Thread.new do
|
703
|
+
loop do
|
704
|
+
@mutex_proc_thread.synchronize do
|
705
|
+
begin
|
706
|
+
__send__(loop_method)
|
707
|
+
rescue
|
708
|
+
cs_logger.debug "flameloop_thread error:#{error_message($!, 'u')}"
|
709
|
+
end
|
710
|
+
end
|
711
|
+
sleep wait_msec
|
712
|
+
end
|
713
|
+
end
|
714
|
+
|
715
|
+
end
|
716
|
+
|
679
717
|
end
|
680
718
|
|
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-
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2007-10-04 00:00:00 +09:00
|
8
8
|
summary: Ruby - Flash conneciton network flamework
|
9
9
|
require_paths:
|
10
10
|
- lib
|