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