Class: InternetHakai::BaseHandler
- Inherits:
-
Object
- Object
- InternetHakai::BaseHandler
- Defined in:
- lib/internethakai/core.rb
Overview
ハンドラー
スレッドごと / プロセスごとに存在するマネージャー
Direct Known Subclasses
Logger, Reporter, RequestPool, RequestPoolNonThread, ScenarioBuilder, ScenarioHandler, SimpleQueue, TaskQueue, TimeRegister
Constant Summary collapse
- UNIQUE_BY_THREAD =
trueだとスレッドごとにインスタンス作成
true
- @@instances =
nil
- @@config =
nil
- @@scenario_id =
nil
- @@thread_id =
nil
Class Method Summary collapse
- .clear ⇒ Object
- .clearall ⇒ Object
-
.get_class(classname) ⇒ Object
クラス名からクラスを取得.
- .get_config ⇒ Object
-
.get_handler(name) ⇒ Object
名前からクラス名を取得し、インスタンスを返します.
-
.get_instance ⇒ Object
スレッドローカルでないインスタンス.
-
.get_instance_thread ⇒ Object
スレッドで一意なインスタンスを返します.
- .get_thread_id ⇒ Object
- .set_config(config) ⇒ Object
-
.set_thread_id(tid) ⇒ Object
スレッドで一意なidを指定します.
-
.unique_by_thread? ⇒ Boolean
ゲッター.
Instance Method Summary collapse
-
#initialize(th_id) ⇒ BaseHandler
constructor
コンストラクタ uid作成などに必要な場合にそなえ、スレッドidを持っている.
-
#on_create ⇒ Object
作成時に何かしたい場合はこれをオーバーロード.
Constructor Details
#initialize(th_id) ⇒ BaseHandler
コンストラクタ uid作成などに必要な場合にそなえ、スレッドidを持っている
93 94 95 96 |
# File 'lib/internethakai/core.rb', line 93 def initialize(th_id) @thread_id = th_id on_create end |
Class Method Details
.clear ⇒ Object
76 77 78 |
# File 'lib/internethakai/core.rb', line 76 def self::clear @@instances = nil end |
.clearall ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/internethakai/core.rb', line 79 def self::clearall InternetHakai::constants.each do |c| cl = InternetHakai::const_get(c) if cl.is_a? Class and cl.respond_to? :clear cl.clear end end end |
.get_class(classname) ⇒ Object
クラス名からクラスを取得
33 34 35 36 37 38 39 40 41 |
# File 'lib/internethakai/core.rb', line 33 def self::get_class classname if InternetHakai.const_defined? classname return InternetHakai.const_get(classname) else c = classname.split(/::/).inject(Object) {|c,name| c.const_get(name) if c.const_defined? name } end end |
.get_config ⇒ Object
13 14 15 |
# File 'lib/internethakai/core.rb', line 13 def self::get_config @@config end |
.get_handler(name) ⇒ Object
名前からクラス名を取得し、インスタンスを返します
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/internethakai/core.rb', line 43 def self::get_handler name begin cl = self::get_class(name) rescue raise "invalid class name" end raise "invalid class" unless cl < BaseHandler if cl.unique_by_thread? o = cl::get_instance_thread else o = cl::get_instance end o end |
.get_instance ⇒ Object
スレッドローカルでないインスタンス
71 72 73 74 75 |
# File 'lib/internethakai/core.rb', line 71 def self::get_instance @@instances = Hash::new(nil) unless @@instances @@instances[self.to_s] = self::new(nil) unless @@instances[self.to_s] @@instances[self.to_s] end |
.get_instance_thread ⇒ Object
スレッドで一意なインスタンスを返します
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/internethakai/core.rb', line 59 def self::get_instance_thread cth = Thread::current tid = cth[:thread_id] sid = cth[:scenario_id] cth[:handlers] = Hash::new unless cth[:handlers] handlers = cth[:handlers] unless handlers[self.to_s] handlers[self.to_s] = self::new(tid) end handlers[self.to_s] end |
.get_thread_id ⇒ Object
29 30 31 |
# File 'lib/internethakai/core.rb', line 29 def self::get_thread_id Thread::current[:thread_id] end |
.set_config(config) ⇒ Object
17 18 19 |
# File 'lib/internethakai/core.rb', line 17 def self::set_config config @@config = config end |
.set_thread_id(tid) ⇒ Object
スレッドで一意なidを指定します
26 27 28 |
# File 'lib/internethakai/core.rb', line 26 def self::set_thread_id tid Thread::current[:thread_id] = tid end |
.unique_by_thread? ⇒ Boolean
ゲッター
22 23 24 |
# File 'lib/internethakai/core.rb', line 22 def self::unique_by_thread? self::UNIQUE_BY_THREAD end |
Instance Method Details
#on_create ⇒ Object
作成時に何かしたい場合はこれをオーバーロード
88 89 90 |
# File 'lib/internethakai/core.rb', line 88 def on_create end |