dango 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- if action_name == 'monitor_all_info' # メンテナンスアクション名なら
231
- cs_check_monitor_error(sock, "return_monitor_all_info")
232
- cs_server_monitor_all_info()
233
- elsif action_name == 'monitor_server_reload' # メンテナンスアクション名なら
234
- cs_check_monitor_error(sock, "return_monitor_server_reload")
235
- cs_server_monitor_server_reload()
236
- else # メンテナンスコマンド以外のユーザーアクション名なら
237
- begin
238
- __send__("cs_receive_#{action_name}", ret_obj)
239
- rescue NoMethodError
240
- @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
241
- cs_logger.error "not find action #{action_name}:#{error_message($!, 'u')}"
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
- end
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
- raise(DangoFrameworkTimeoutError, "timeout:#{notice_name}") if Time.now > end_reserved_time
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
- cs_send_data(sock, send_obj_dup, :type=>dtype) # データ送信
585
- cs_logger.debug "cs_server_send_data:finish send data notice_name=#{notice_name.inspect}\n"
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
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
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.3
7
- date: 2007-09-28 00:00:00 +09:00
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