dango 0.0.35 → 0.0.36

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.
@@ -57,6 +57,8 @@ class DangoClientFramework
57
57
 
58
58
  @log_file = @connection_client_log_file
59
59
  @log_level = @connection_client_log_level
60
+ @log_max_size = 1048576
61
+ @log_shift_age = 99
60
62
 
61
63
  # loggerの準備
62
64
  logger.debug("-------client initialize host=#{@connection_client_host} port=#{@connection_client_port}")
@@ -45,7 +45,7 @@ class Time
45
45
  def self.now_to_s
46
46
  # self.strftime("%Y-%m-%d %H:%M:%S")
47
47
  now = self.now
48
- now.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d" % now.usec
48
+ now.strftime("%Y-%m-%d %H:%M:%S.") << "%06d" % now.usec
49
49
  end
50
50
  end
51
51
 
@@ -53,6 +53,7 @@ end
53
53
  class DangoFrameworkError < StandardError; end
54
54
  class DangoFrameworkTimeoutError < DangoFrameworkError; end
55
55
  class DangoFrameworkConnectionError < DangoFrameworkError; end
56
+ class DangoFrameworkDisconnectError < DangoFrameworkError; end
56
57
  class DangoFrameworkReadNoDataError < DangoFrameworkError; end
57
58
  class DangoFrameworkFlashPolicyError < DangoFrameworkError; end
58
59
  class DangoFrameworkMonitorSecurityError < DangoFrameworkError; end
@@ -119,7 +120,7 @@ module DangoFrameworkModule
119
120
  if @log_file != ""
120
121
  log_dir = File.dirname(@log_file)
121
122
  Dir.mkdir(log_dir) if !File.exist?(log_dir)
122
- @dango_logger = Logger.new(@log_file)
123
+ @dango_logger = Logger.new(@log_file, @log_shift_age, @log_max_size)
123
124
  @dango_logger.level = @log_level
124
125
  def @dango_logger.format_message(severity, timestamp, msg, progname)
125
126
  # "#{Time.now_to_s}:#{sprintf('%1.1s', severity)}:#{progname}:#{msg}\n"
@@ -148,7 +149,7 @@ module DangoFrameworkModule
148
149
  rescue EOFError, IOError, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::ECONNABORTED
149
150
  # 接続終了時の切断と思われるものはDangoFrameworkConnectionErrorにしない
150
151
  #raise(DangoFrameworkError, "failed to read sock for EOF reached.\n#{error_message($!, 'u')}")
151
- raise(DangoFrameworkError, "failed to read sock for EOF reached (and so on). sock=#{sock.inspect} #{$!.class} toid=#{Thread.current.object_id}")
152
+ raise(DangoFrameworkDisconnectError, "failed to read sock for EOF reached (and so on). sock=#{sock.inspect} #{$!.class} toid=#{Thread.current.object_id}")
152
153
  rescue
153
154
  raise(DangoFrameworkConnectionError, "failed to read sock. sock=#{sock.inspect} toid=#{Thread.current.object_id}\n#{error_message($!, 'u')}")
154
155
  end
@@ -168,7 +169,7 @@ module DangoFrameworkModule
168
169
  ## サイズとデータタイプを取得
169
170
  dtype, size = size_str[0, 5].unpack("cN")
170
171
 
171
- ## データが小さすぎる場合
172
+ ## データがない場合
172
173
  if size == nil || size == 0
173
174
  raise(DangoFrameworkConnectionError, "toid=#{Thread.current.object_id}:size=#{size}:size_str=#{size_str.inspect}")
174
175
  end
@@ -82,6 +82,12 @@ class ServerMonitorAction
82
82
  'send_count' => @parent.send_count, # 送信回数
83
83
  'recv_fail_count' => @parent.recv_fail_count, # 受信失敗回数
84
84
  'send_fail_count' => @parent.send_fail_count, # 送信失敗回数
85
+
86
+ 'log_level' => @parent.log_level_str,
87
+ 'log_file' => @parent.log_file,
88
+ 'log_max_size' => @parent.log_max_size,
89
+ 'log_shift_age' => @parent.log_shift_age,
90
+
85
91
  # 'dummy' => "dummy "*1000, # ダミー情報
86
92
  }
87
93
 
@@ -21,6 +21,12 @@ class DangoServerFramework
21
21
  DefaultServerHost = 'localhost' # デフォルトのホスト名 # 接続制限ホスト "0.0.0.0"にすれば全接続オッケイ
22
22
  DefaultMaxConnections = 10 # デフォルトの最大接続人数
23
23
 
24
+ DefaultLogFile = "log/dango_development.log"
25
+ DefaultLogLevel = Logger::INFO
26
+ DefaultLogMaxSize = 1048576
27
+ DefaultLogShiftAge = 99
28
+ DefaultGServerLogFile = ""
29
+
24
30
  # ここから先は普通は変更しなくていいだろうというもの
25
31
  SendReceiveSleepIntervalSec = 0.2 # データ送信時のタイムアウトチェック間隔秒
26
32
  SendReceiveTimeoutDefaultSec = 5.0 # データ送受信時のデフォルトタイムアウト秒数
@@ -48,6 +54,14 @@ class DangoServerFramework
48
54
  def disconnecting(sock)
49
55
  @parent.disconnecting(sock)
50
56
  end
57
+
58
+ def starting()
59
+ @parent.starting()
60
+ end
61
+
62
+ def stopping()
63
+ @parent.stopping()
64
+ end
51
65
  end
52
66
 
53
67
  def initialize(config)
@@ -58,6 +72,16 @@ class DangoServerFramework
58
72
 
59
73
  # SIGINT の捕捉
60
74
  Signal.trap(:INT) do
75
+ # サーバーを停止
76
+ if @gserver && !@gserver.stopped?
77
+ @gserver.shutdown
78
+ @gserver.stop
79
+ while(!@gserver.stopped?) do
80
+ sleep 1
81
+ debug_print("waiting... #{@gserver.stopped?} #{@gserver.connections}")
82
+ end
83
+ end
84
+
61
85
  puts "shutdown"
62
86
  exit!
63
87
  end
@@ -85,9 +109,9 @@ class DangoServerFramework
85
109
 
86
110
  logger.info("===== server initialize =====") # loggerの準備
87
111
  logger.info("Process.pid=#{Process.pid}")
88
- logger.info("port=#{@connection_server_port}")
89
- logger.info("host=#{@connection_server_host}")
90
- logger.info("max_connections=#{@connection_server_max_connections}")
112
+ logger.info("port=#{@server_port}")
113
+ logger.info("host=#{@server_host}")
114
+ logger.info("max_connections=#{@server_max_connections}")
91
115
 
92
116
  open("tmp/pids/dango.pid", "wb"){|fh| fh.write Process.pid.to_s }
93
117
 
@@ -107,13 +131,15 @@ class DangoServerFramework
107
131
  TCPSocket.do_not_reverse_lookup = true # 逆引きを行わない
108
132
  # TCPSocket.do_not_reverse_lookup = false # 逆引きを行う
109
133
 
110
- @gserver = DangoGServer.new(self, @connection_server_port,
111
- @connection_server_host,
112
- @connection_server_max_connections)
134
+ @gserver = DangoGServer.new(self, @server_port, @server_host, @server_max_connections)
113
135
  @gserver.audit = true # Turn logging on.
136
+ @gserver.debug = true # debug
137
+
138
+ if @gserver_log_file && @gserver_log_file != ""
139
+ gserver_log_fh = open(@gserver_log_file, "a")
140
+ @gserver.stdlog = gserver_log_fh
141
+ end
114
142
 
115
- GC.enable
116
- GC.start
117
143
  GC.disable
118
144
 
119
145
  begin
@@ -201,6 +227,20 @@ class DangoServerFramework
201
227
  logger.info "disconnecting:port=#{port}"
202
228
  end
203
229
 
230
+ # gserver開始処理
231
+ def starting()
232
+ msg = "#{self.class.to_s} #{@server_host}:#{@server_port}/#{@server_max_connections} start"
233
+ logger.warn msg
234
+ puts "[#{Time.now_to_s}] #{msg}"
235
+ end
236
+
237
+ # gserver終了処理
238
+ def stopping()
239
+ msg = "#{self.class.to_s} #{@server_host}:#{@server_port} stop"
240
+ logger.warn msg
241
+ puts "[#{Time.now_to_s}] #{msg}"
242
+ end
243
+
204
244
  # gserverのserveメソッド:スレッド開始処理
205
245
  def thread_main(sock)
206
246
  logger.info "#{sock} is accepted. thread.current=#{Thread.current.object_id} "
@@ -294,12 +334,16 @@ class DangoServerFramework
294
334
  logger.debug "Monitor Security Error #{sid} "
295
335
 
296
336
  rescue DangoFrameworkReadNoDataError
337
+ @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
297
338
  logger.debug "read no data. maybe client closed. #{sid} "
298
339
 
299
340
  rescue DangoFrameworkConnectionError
300
341
  @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
301
342
  logger.debug "connection error. #{sid} \n#{error_message($!, 'u')}"
302
343
 
344
+ rescue DangoFrameworkDisconnectError
345
+ logger.debug "DangoFrameworkDisconnectError. #{sid} \n#{error_message($!, 'u')}"
346
+
303
347
  rescue DangoFrameworkError
304
348
  logger.debug "DangoFrameworkError. #{sid} \n#{error_message($!, 'u')}"
305
349
 
@@ -346,10 +390,14 @@ class DangoServerFramework
346
390
  Thread.abort_on_exception = true if @server_debug
347
391
 
348
392
  # 変数の初期設定
349
- @connection_server_port = @config['network']['port'] || DefaultNetworkPort
350
- @connection_server_host = @config['server']['host'] || DefaultServerHost
351
- @connection_server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
352
- @log_file = @config['server']['log_file'] || ""
393
+ @server_port = @config['network']['port'] || DefaultNetworkPort
394
+ @server_host = @config['server']['host'] || DefaultServerHost
395
+ @server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
396
+ @log_file = @config['server']['log_file'] || DefaultLogFile
397
+ @log_max_size = @config['server']['log_max_size'] || DefaultLogMaxSize
398
+ @log_shift_age = @config['server']['log_shift_age'] || DefaultLogShiftAge
399
+ @gserver_log_file = @config['server']['gserver_log_file'] || DefaultGServerLogFile
400
+
353
401
  @policy_file_request = @config['server']['policy_file_request'] || true
354
402
  @send_receive_sleep_interval_sec = @config['server']['send_receive_sleep_interval_sec'] || SendReceiveSleepIntervalSec
355
403
  @send_receive_timeout_default_sec = @config['server']['send_receive_timeout_default_sec'] || SendReceiveTimeoutDefaultSec
@@ -359,7 +407,7 @@ class DangoServerFramework
359
407
  @heart_beat_receive_wait_sec = @config['server']['heart_beat_receive_wait_sec'] || HeartBeatReceiveWaitSec
360
408
  @gc_interval_sec = @config['server']['gc_interval_sec'] || GCIntervalSec
361
409
 
362
-
410
+ # ログレベルの設定
363
411
  log_level_hash = {
364
412
  "FATAL" => Logger::FATAL,
365
413
  "ERROR" => Logger::ERROR,
@@ -367,10 +415,15 @@ class DangoServerFramework
367
415
  "INFO" => Logger::INFO,
368
416
  "DEBUG" => Logger::DEBUG,
369
417
  }
370
- @log_level = log_level_hash.find do |level|
371
- level == @config['server']['log_level']
418
+ log_level_hash.each do |str, const|
419
+ @log_level = const if str.downcase == @config['server']['log_level'].downcase
372
420
  end
373
- @log_level = @connection_server_log_level || Logger::DEBUG
421
+ @log_level = @log_level || DefaultLogLevel
422
+
423
+ log_level_hash.each do |str, const|
424
+ @log_level_str = str if const == @log_level
425
+ end
426
+
374
427
 
375
428
  @start_time = Time.now # サーバー起動時間
376
429
  @recv_count = 0 # 受信回数
@@ -380,6 +433,7 @@ class DangoServerFramework
380
433
  end
381
434
 
382
435
  attr_reader(:start_time, :recv_count, :send_count, :recv_fail_count, :send_fail_count)
436
+ attr_reader(:log_level_str, :log_file, :log_max_size, :log_shift_age)
383
437
 
384
438
  def dango_server_init # 初期設定
385
439
  end
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 = 35
5
+ TINY = 36
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.35
7
- date: 2007-11-13 00:00:00 +09:00
6
+ version: 0.0.36
7
+ date: 2007-11-20 00:00:00 +09:00
8
8
  summary: Realtime communications network framework for Ruby and Flash on Rails.
9
9
  require_paths:
10
10
  - lib