Class: InternetHakai::BaseHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/internethakai/core.rb

Overview

ハンドラー

スレッドごと / プロセスごとに存在するマネージャー

Constant Summary collapse

UNIQUE_BY_THREAD =

trueだとスレッドごとにインスタンス作成

true
@@instances =
nil
@@config =
nil
@@scenario_id =
nil
@@thread_id =
nil

Class Method Summary collapse

Instance Method Summary collapse

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

.clearObject



76
77
78
# File 'lib/internethakai/core.rb', line 76

def self::clear
    @@instances = nil
end

.clearallObject



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_configObject



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_instanceObject

スレッドローカルでないインスタンス



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_threadObject

スレッドで一意なインスタンスを返します



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_idObject



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

ゲッター

Returns:

  • (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_createObject

作成時に何かしたい場合はこれをオーバーロード



88
89
90
# File 'lib/internethakai/core.rb', line 88

def on_create

end