dango 0.0.3 → 0.0.4
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 +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
|