dango 0.3.2 → 0.3.3

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