dango 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@
4
4
  = コネクション型クライアントフレームワーク
5
5
  =end
6
6
 
7
+ require 'dango/version'
7
8
  require "dango/framework_base"
8
9
 
9
10
  # フレームワーククラス
@@ -0,0 +1,28 @@
1
+ #!ruby -Ku
2
+
3
+ =begin
4
+ = Dangoサーバーのメンテナンス用モニタ
5
+ =end
6
+
7
+
8
+ # モニター用のdangoクライアントクラス
9
+ module DangoControllerPlugin
10
+ def self.dango_server_config(options = {})
11
+ if !options[:env]
12
+ options[:env] = ENV['RAILS_ENV']
13
+ end
14
+ config = YAML.load(open("#{RAILS_ROOT}/config/dango/#{options[:env]}.yml", "rb"){|fh| fh.read})
15
+ config
16
+ end
17
+
18
+ def self.dango_server_call(method_name, arg, options = {})
19
+ config = dango_server_config(options)
20
+ raise("backdoor_run_drb_server is false.") if !config['server']['backdoor_run_drb_server']
21
+ drb_uri = "druby://#{config['network']['host']}:#{config['server']['backdoor_run_drb_port']}"
22
+ drb_obj = DRbObject.new_with_uri(drb_uri)
23
+ drb_obj.__send__(method_name.to_s, arg)
24
+ end
25
+ end
26
+
27
+
28
+
@@ -5,7 +5,6 @@
5
5
  =end
6
6
 
7
7
 
8
- require 'resolv-replace' # 名前解決時のロックがかかってしまう件を解決できるはず
9
8
  require 'socket'
10
9
  require 'logger'
11
10
  require 'thread'
@@ -4,9 +4,6 @@
4
4
  = Dangoサーバーのメンテナンス用モニタ
5
5
  =end
6
6
 
7
- #$LOAD_PATH.push("../../../../svn/rubyforge/dango/lib")
8
-
9
- #gem "dango"
10
7
 
11
8
  require 'dango/client_framework' # コネクションサーバーフレームワークの呼び出し
12
9
 
@@ -52,7 +52,7 @@ class ServerMonitorAction
52
52
  # メンテナンスコマンド:エラーの場合
53
53
  def dango_check_monitor_error(sock, action_name)
54
54
  peerhost, peeraddr = sock.peeraddr[2, 2]
55
- backdoor_host = @config['server']['backdoor_host']
55
+ backdoor_host = @backdoor_host
56
56
  logger.debug "dango_check_monitor_error:peerhost=#{peerhost.inspect} peeraddr=#{peeraddr.inspect} backdoor_host=#{backdoor_host.inspect}"
57
57
 
58
58
  match = false
@@ -164,6 +164,8 @@ class DangoServerFramework
164
164
  begin
165
165
  set_server_variables() # 各種サーバー仕様の変数設定
166
166
 
167
+ require 'resolv-replace' if @safe_resolver # 名前解決時のロックがかかってしまう件を解決できるはず
168
+
167
169
  logger.warn("===== server initialize =====") # loggerの準備
168
170
  logger.warn("network_port=#{@network_port}")
169
171
  logger.warn("network_host=#{@network_host}")
@@ -189,11 +191,17 @@ class DangoServerFramework
189
191
 
190
192
  TCPSocket.do_not_reverse_lookup = true # 逆引きを行わない
191
193
  # TCPSocket.do_not_reverse_lookup = false # 逆引きを行う
192
-
194
+
195
+ if @backdoor_run_drb_server # backdoor用のdrbを起動
196
+ uri = "druby://#{@network_host}:#{@backdoor_run_drb_port}"
197
+ DRb.start_service(uri, self)
198
+ logger.warn("start drb server: uri=#{DRb.uri}")
199
+ end
200
+
193
201
  @gserver = DangoGServer.new(self, @network_port, @server_host, @server_max_connections)
194
202
  @gserver.audit = true # Turn logging on.
195
203
  @gserver.debug = true # debug
196
-
204
+
197
205
  gserver_log_fh = open(@gserver_log_file, "a")
198
206
  @gserver.stdlog = gserver_log_fh
199
207
 
@@ -519,9 +527,15 @@ EOF
519
527
 
520
528
  @policy_file_allow_domain = @config['server']['policy_file_allow_domain']
521
529
  @policy_file_allow_domain = [@network_host] if @policy_file_allow_domain.class != Array
522
-
530
+
531
+ @safe_resolver = @config['server']['safe_resolver'] || false # require 'resolv-replace'するかどうか
532
+
523
533
  @statistics_process_memory = @config['server']['statistics_process_memory'] || false # プロセスのメモリ使用量統計を取る
524
-
534
+
535
+ @backdoor_run_drb_server = @config['server']['backdoor_run_drb_server'] || false # バックドア用のdrbサーバーを起動するかどうか
536
+ @backdoor_run_drb_port = @config['server']['backdoor_run_drb_port'] || 12345 # バックドア用のdrbサーバーのポート番号
537
+ @backdoor_host = @config['server']['backdoor_host'] || '127.0.0.1' # バックドアのアクセス可能ホスト名
538
+
525
539
  # ログレベルの設定
526
540
  log_level_hash = {
527
541
  "FATAL" => Logger::FATAL,
@@ -714,7 +728,7 @@ EOF
714
728
 
715
729
  # クライアントから来たheart_beatなら
716
730
  def dango_receive__notice_heart_beat(ret_obj)
717
- logger.debug "dango_receive__notice_heart_beat:#{session[:sid]}:#{ret_obj['_hb_id']} "
731
+ # logger.debug "dango_receive__notice_heart_beat:#{session[:sid]}:#{ret_obj['_hb_id']} "
718
732
 
719
733
  shared.transaction(:_heart_beat_time_hash) do |heart_beat_time_hash|
720
734
  heart_beat_time_hash[session[:sid]] = Time.now
@@ -4,8 +4,9 @@
4
4
  = コネクション型サーバーフレームワーク
5
5
  =end
6
6
 
7
- require 'dango/client_framework' # コネクションクライアントフレームワークの呼び出し
8
7
  require 'thread'
8
+ require 'pp'
9
+ require 'dango/client_framework' # コネクションクライアントフレームワークの呼び出し
9
10
 
10
11
  # テスタークラス
11
12
  class DangoTesterClient
@@ -18,6 +19,8 @@ class DangoTesterClient
18
19
  def initialize(debug = false)
19
20
  @debug = debug
20
21
 
22
+ original_print("Dango Version=#{Dango::VERSION::STRING}\n") if debug
23
+
21
24
  @client_conns = {}
22
25
  Thread.abort_on_exception = true
23
26
 
@@ -25,6 +28,29 @@ class DangoTesterClient
25
28
  @gc_interval_sec = GCIntervalSec
26
29
  gc_thread_start() # GCスレッドの開始
27
30
 
31
+ def self.die(str)
32
+ original_print "============ die ============ #{Time.now_to_s}\n"
33
+ original_print caller().pretty_inspect + "\n"
34
+ original_print str.to_s + "\n"
35
+ exit 1
36
+ end
37
+
38
+ # def self.print(str)
39
+ # original_print("#{str}")
40
+ # end
41
+
42
+ def self.puts(str)
43
+ original_print("#{str}\n")
44
+ end
45
+
46
+ def self.p(obj)
47
+ original_print("#{obj.inspect}\n")
48
+ end
49
+
50
+ def self.pp(obj)
51
+ original_print("#{obj.pretty_inspect}\n")
52
+ end
53
+
28
54
  end
29
55
 
30
56
  # クライアントを1個接続
@@ -68,15 +94,21 @@ class DangoTesterClient
68
94
 
69
95
  attr_reader(:client_conns)
70
96
 
71
- def die(str)
72
- puts "============ die ============ #{Time.now_to_s}"
73
- pp caller()
74
- puts str
75
- exit 1
76
- end
77
-
78
- def self.die(str)
79
- die(str)
97
+ def original_print(str)
98
+ disp_str = ""
99
+ if ENV['LANG'] =~ /euc/i || ENV['LANG'] =~ /ujis/i
100
+ disp_str = str.to_s.toeuc
101
+ elsif ENV['LANG'] =~ /sjis/i
102
+ disp_str = str.to_s.tosjis
103
+ elsif ENV['LANG'] =~ /UTF\-8/i
104
+ disp_str = str.to_s.toutf8
105
+ elsif RUBY_PLATFORM == 'i386-mswin32' || RUBY_PLATFORM == 'i386-cygwin'
106
+ disp_str = str.to_s.tosjis
107
+ else
108
+ disp_str = str.to_s
109
+ end
110
+
111
+ print(disp_str)
80
112
  end
81
113
 
82
114
  # GCスレッドの開始
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 = 3
5
- TINY = 2
5
+ TINY = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dango
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keisuke Minami
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-26 00:00:00 +09:00
12
+ date: 2008-07-20 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.3.0
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: hoe
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.7.0
44
+ version:
35
45
  description: Realtime communications network framework for Ruby and Flash on Rails.
36
46
  email: keisuke@rccn.com
37
47
  executables: []
@@ -50,6 +60,7 @@ files:
50
60
  - lib/dango/mutex_socket_list.rb
51
61
  - lib/dango/socket_list.rb
52
62
  - lib/dango/session_manager.rb
63
+ - lib/dango/controller_plugin/dango_controller_plugin.rb
53
64
  - lib/dango/monitor/dango_monitor_client.rb
54
65
  - lib/dango/monitor/server_monitor_action.rb
55
66
  - lib/dango/script/dango_server.rb