tengine_core 0.5.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +40 -0
  4. data/Gemfile.lock +95 -0
  5. data/README.md +54 -0
  6. data/Rakefile +44 -0
  7. data/VERSION +1 -0
  8. data/bin/tengine_atd +8 -0
  9. data/bin/tengine_heartbeat_watchd +8 -0
  10. data/bin/tengined +182 -0
  11. data/examples/VERSION +1 -0
  12. data/examples/uc01_execute_processing_for_event.rb +11 -0
  13. data/examples/uc02_fire_another_event.rb +16 -0
  14. data/examples/uc03_2handlers_for_1event.rb +16 -0
  15. data/examples/uc08_if_both_a_and_b_occurs.rb +11 -0
  16. data/examples/uc10_if_the_event_occurs_at_the_server.rb +15 -0
  17. data/examples/uc50_commit_event_at_first.rb +17 -0
  18. data/examples/uc51_commit_event_at_first_submit.rb +29 -0
  19. data/examples/uc52_commit_event_after_all_handler_submit.rb +31 -0
  20. data/examples/uc52_never_commit_event_unless_all_handler_submit.rb +31 -0
  21. data/examples/uc60_event_in_handler.rb +18 -0
  22. data/examples/uc62_session_in_driver.rb +16 -0
  23. data/examples/uc64_safety_countup.rb +14 -0
  24. data/examples/uc70_driver_enabled_on_activation.rb +13 -0
  25. data/examples/uc71_driver_disabled_on_activation.rb +14 -0
  26. data/examples/uc72_setup_eventmachine.rb +17 -0
  27. data/examples/uc80_raise_io_error.rb +10 -0
  28. data/examples/uc81_raise_runtime_error.rb +10 -0
  29. data/examples2/driver01.rb +18 -0
  30. data/examples2/driver02.rb +19 -0
  31. data/examples2/uc08_if_both_a_and_b_occurs.rb +13 -0
  32. data/examples2/uc10_if_the_event_occurs_at_the_server.rb +18 -0
  33. data/examples2/uc51_commit_event_at_first_submit_1.rb +16 -0
  34. data/examples2/uc51_commit_event_at_first_submit_2.rb +17 -0
  35. data/examples2/uc51_commit_event_at_first_submit_3.rb +17 -0
  36. data/examples2/uc62_session_in_driver.rb +16 -0
  37. data/examples2/uc71_driver_disabled_on_activation.rb +16 -0
  38. data/failure_examples/VERSION +1 -0
  39. data/failure_examples/uc53_submit_outside_of_handler.rb +15 -0
  40. data/failure_examples/uc61_event_outside_of_handler.rb +12 -0
  41. data/failure_examples/uc63_session_outside_of_driver.rb +13 -0
  42. data/lib/tengine/core.rb +74 -0
  43. data/lib/tengine/core/bootstrap.rb +123 -0
  44. data/lib/tengine/core/collection_accessible.rb +34 -0
  45. data/lib/tengine/core/config.rb +10 -0
  46. data/lib/tengine/core/config/atd.rb +225 -0
  47. data/lib/tengine/core/config/core.rb +319 -0
  48. data/lib/tengine/core/config/heartbeat_watcher.rb +229 -0
  49. data/lib/tengine/core/connection_test/.gitignore +1 -0
  50. data/lib/tengine/core/connection_test/fire_bar_on_foo.rb +16 -0
  51. data/lib/tengine/core/driveable.rb +213 -0
  52. data/lib/tengine/core/driver.rb +69 -0
  53. data/lib/tengine/core/driver/finder.rb +42 -0
  54. data/lib/tengine/core/dsl_evaluator.rb +110 -0
  55. data/lib/tengine/core/dsl_filter_def.rb +11 -0
  56. data/lib/tengine/core/dsl_loader.rb +108 -0
  57. data/lib/tengine/core/event.rb +145 -0
  58. data/lib/tengine/core/event/finder.rb +82 -0
  59. data/lib/tengine/core/event_exception_reportable.rb +88 -0
  60. data/lib/tengine/core/event_wrapper.rb +21 -0
  61. data/lib/tengine/core/find_by_name.rb +31 -0
  62. data/lib/tengine/core/handler.rb +152 -0
  63. data/lib/tengine/core/handler_path.rb +33 -0
  64. data/lib/tengine/core/heartbeat_watcher.rb +161 -0
  65. data/lib/tengine/core/io_to_logger.rb +22 -0
  66. data/lib/tengine/core/kernel.rb +510 -0
  67. data/lib/tengine/core/kernel_runtime.rb +91 -0
  68. data/lib/tengine/core/method_traceable.rb +38 -0
  69. data/lib/tengine/core/mongoid_fix.rb +19 -0
  70. data/lib/tengine/core/mutex.rb +177 -0
  71. data/lib/tengine/core/optimistic_lock.rb +69 -0
  72. data/lib/tengine/core/plugins.rb +54 -0
  73. data/lib/tengine/core/schedule.rb +21 -0
  74. data/lib/tengine/core/scheduler.rb +156 -0
  75. data/lib/tengine/core/selectable_attr.rb +29 -0
  76. data/lib/tengine/core/session.rb +21 -0
  77. data/lib/tengine/core/session_wrapper.rb +68 -0
  78. data/lib/tengine/core/setting.rb +21 -0
  79. data/lib/tengine/core/validation.rb +36 -0
  80. data/lib/tengine/errors.rb +18 -0
  81. data/lib/tengine/rspec.rb +8 -0
  82. data/lib/tengine/rspec/context_wrapper.rb +51 -0
  83. data/lib/tengine/rspec/extension.rb +53 -0
  84. data/lib/tengine_core.rb +23 -0
  85. data/spec/factories/tengine_core_drivers.rb +10 -0
  86. data/spec/factories/tengine_core_events.rb +14 -0
  87. data/spec/factories/tengine_core_handler_paths.rb +9 -0
  88. data/spec/factories/tengine_core_handlers.rb +9 -0
  89. data/spec/factories/tengine_core_sessions.rb +9 -0
  90. data/spec/mongoid.yml +35 -0
  91. data/spec/spec_helper.rb +48 -0
  92. data/spec/support/mongo_index_key_log.rb +91 -0
  93. data/spec/tengine/core/bootstrap_spec.rb +278 -0
  94. data/spec/tengine/core/bugfix/bind_dsl_file_in_multi_byte_dir_spec.rb +21 -0
  95. data/spec/tengine/core/bugfix/enabled_on_activation_spec.rb +112 -0
  96. data/spec/tengine/core/bugfix/receive_event_spec.rb +133 -0
  97. data/spec/tengine/core/bugfix/use_dsl_version_method.rb +12 -0
  98. data/spec/tengine/core/bugfix/use_dsl_version_method_spec.rb +28 -0
  99. data/spec/tengine/core/bugfix/use_event_in_handler_dsl.rb +11 -0
  100. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/206/343/202/231/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215/source_location_encoding.rb +35 -0
  101. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/206/343/202/231/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215//351/235/236ASCII/343/201/256/343/203/225/343/202/241/343/202/244/343/203/253/345/220/215_dsl.rb +38 -0
  102. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/207/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215/source_location_encoding.rb +35 -0
  103. data/spec/tengine/core/bugfix//351/235/236ACSII/343/201/256/343/203/207/343/202/243/343/203/254/343/202/257/343/203/210/343/203/252/345/220/215//351/235/236ASCII/343/201/256/343/203/225/343/202/241/343/202/244/343/203/253/345/220/215_dsl.rb +38 -0
  104. data/spec/tengine/core/config/atd_spec.rb +62 -0
  105. data/spec/tengine/core/config/core_spec.rb +479 -0
  106. data/spec/tengine/core/config/heartbeat_watcher_spec.rb +62 -0
  107. data/spec/tengine/core/config/syntax_error_in_erb.yml.erb +13 -0
  108. data/spec/tengine/core/config/wrong_category_name.yml.erb +13 -0
  109. data/spec/tengine/core/config/wrong_field_name.yml.erb +12 -0
  110. data/spec/tengine/core/config/wrong_yaml.yml.erb +13 -0
  111. data/spec/tengine/core/config_spec/another_port.yml +54 -0
  112. data/spec/tengine/core/config_spec/config_with_dir_absolute_load_path.yml +16 -0
  113. data/spec/tengine/core/config_spec/config_with_dir_relative_load_path.yml +16 -0
  114. data/spec/tengine/core/config_spec/config_with_file_absolute_load_path.yml +16 -0
  115. data/spec/tengine/core/config_spec/config_with_file_relative_load_path.yml +16 -0
  116. data/spec/tengine/core/config_spec/log_config_spec.rb +235 -0
  117. data/spec/tengine/core/driveable_spec.rb +240 -0
  118. data/spec/tengine/core/driver_spec.rb +159 -0
  119. data/spec/tengine/core/dsl_loader_spec.rb +172 -0
  120. data/spec/tengine/core/dsls/uc08_if_both_a_and_b_occurs_spec.rb +35 -0
  121. data/spec/tengine/core/dsls/uc10_if_the_event_occurs_at_the_server_spec.rb +58 -0
  122. data/spec/tengine/core/dsls/uc50_commit_event_at_first_spec.rb +29 -0
  123. data/spec/tengine/core/dsls/uc52_commit_event_after_all_handler_submit_spec.rb +33 -0
  124. data/spec/tengine/core/dsls/uc52_never_commit_event_unless_all_handler_submit_spec.rb +37 -0
  125. data/spec/tengine/core/dsls/uc53_submit_outside_of_handler_spec.rb +37 -0
  126. data/spec/tengine/core/dsls/uc60_event_in_handler_spec.rb +31 -0
  127. data/spec/tengine/core/dsls/uc61_event_outside_of_handler_spec.rb +37 -0
  128. data/spec/tengine/core/dsls/uc62_session_in_driver_spec.rb +36 -0
  129. data/spec/tengine/core/dsls/uc63_session_outside_of_driver_spec.rb +35 -0
  130. data/spec/tengine/core/dsls/uc64_safety_countup_spec.rb +134 -0
  131. data/spec/tengine/core/dsls/uc70_driver_enabled_on_activation_spec.rb +39 -0
  132. data/spec/tengine/core/dsls/uc71_driver_disabled_on_activation_spec.rb +36 -0
  133. data/spec/tengine/core/dsls/uc72_setup_eventmachine_spec.rb +39 -0
  134. data/spec/tengine/core/dsls/uc80_raise_io_error_spec.rb +53 -0
  135. data/spec/tengine/core/dsls/uc81_raise_runtime_error_spec.rb +49 -0
  136. data/spec/tengine/core/event/finder_spec.rb +136 -0
  137. data/spec/tengine/core/event_exception_reportable_spec.rb +33 -0
  138. data/spec/tengine/core/event_spec.rb +161 -0
  139. data/spec/tengine/core/event_wrapper_spec.rb +35 -0
  140. data/spec/tengine/core/handler_path_spec.rb +87 -0
  141. data/spec/tengine/core/handler_spec.rb +190 -0
  142. data/spec/tengine/core/heartbeat_watcher_spec.rb +131 -0
  143. data/spec/tengine/core/io_to_logger_spec.rb +30 -0
  144. data/spec/tengine/core/kernel_spec.rb +885 -0
  145. data/spec/tengine/core/mutex_spec.rb +184 -0
  146. data/spec/tengine/core/optimistic_lock_spec.rb +55 -0
  147. data/spec/tengine/core/scheculer_spec.rb +121 -0
  148. data/spec/tengine/core/selectable_attr_spec.rb +30 -0
  149. data/spec/tengine/core/session_spec.rb +104 -0
  150. data/spec/tengine/core/setting_spec.rb +79 -0
  151. data/spec/tengine/core_spec.rb +13 -0
  152. data/spec/tengine_spec.rb +14 -0
  153. data/tengine_core.gemspec +248 -0
  154. data/tmp/log/.gitignore +1 -0
  155. data/tmp/tengined_status/.gitignore +1 -0
  156. metadata +421 -0
data/examples/VERSION ADDED
@@ -0,0 +1 @@
1
+ 20110902213500
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver01 do
5
+
6
+ # イベントに対応する処理の実行する
7
+ on:event01 do
8
+ puts "handler01"
9
+ end
10
+
11
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver02 do
5
+
6
+ # イベントが発生したら新たなイベントを発火する
7
+ on:event02_1 do
8
+ puts "handler02_1"
9
+ fire(:event02_2)
10
+ end
11
+
12
+ on:event02_2 do
13
+ puts "handler02_2"
14
+ end
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver03 do
5
+
6
+ # イベントに対して処理Aと処理Bを実行する
7
+
8
+ on:event03 do
9
+ puts "handler03_1"
10
+ end
11
+
12
+ on:event03 do
13
+ puts "handler03_2"
14
+ end
15
+
16
+ end
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver08 do
5
+
6
+ # イベントAとイベントBが発生したら処理を実行する
7
+ on :event08_a & :event_08_b do
8
+ puts "handler08"
9
+ end
10
+
11
+ end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver10 do
5
+
6
+ # 特定のサーバからのイベントが発生した場合のみ処理を実行する
7
+ on :event10.at("localhost") do
8
+ puts "handler10 for localhost"
9
+ end
10
+
11
+ on :event10.at("test_server1") do
12
+ puts "handler10 for test_server1"
13
+ end
14
+
15
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent50を受け取ったらDBに保存して、すぐにキューにACKを返す。
5
+ # 特に指定しない場合、カーネルはこの :at_first が指定されているように振る舞う。
6
+ ack_policy(:at_first, :event50)
7
+
8
+ # このドライバでは自動テストの簡略化のために明示的に標準出力に対してputsを呼び出しています
9
+
10
+ driver :driver50 do
11
+
12
+ on:event50 do
13
+ STDOUT.puts "handler50 " << (ack? ? "acknowledged" : "unacknowledged")
14
+ submit # submitしても無視されます
15
+ end
16
+
17
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent51を受け取ったらDBに保存。
5
+ # 対応するハンドラを実行して最初にsubmitされたときにACKを返す。
6
+ ack_policy(:at_first_submit, :event51)
7
+
8
+ driver :driver51_1 do
9
+ # 最初に実行されるハンドラではsubmitしないので、ACKされない
10
+ on:event51 do
11
+ puts "handler51_1"
12
+ end
13
+ end
14
+
15
+ driver :driver51_2 do
16
+ # このハンドラでsubmitするので、ACKする
17
+ on:event51 do
18
+ puts "handler51_2"
19
+ submit
20
+ end
21
+ end
22
+
23
+ driver :driver51_3 do
24
+ # このハンドラでsubmitするが、すでにACKしているのでACKしない
25
+ on:event51 do
26
+ puts "handler51_3"
27
+ submit
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent52を受け取ったらDBに保存。
5
+ # 対応するハンドラ群をすべて実行してすべてsubmitしたらACKを返す。
6
+ ack_policy(:after_all_handler_submit, :event52)
7
+
8
+ # このドライバでは自動テストの簡略化のために明示的に標準出力に対してputsを呼び出しています
9
+
10
+ driver :driver52_1 do
11
+ on:event52 do
12
+ STDOUT.puts "handler52_1 " << (ack? ? "acknowledged" : "unacknowledged")
13
+ submit
14
+ end
15
+ end
16
+
17
+ driver :driver52_2 do
18
+ on:event52 do
19
+ STDOUT.puts "handler52_2 " << (ack? ? "acknowledged" : "unacknowledged")
20
+ submit
21
+ end
22
+ end
23
+
24
+ driver :driver52_3 do
25
+ on:event52 do
26
+ STDOUT.puts "handler52_3 " << (ack? ? "acknowledged" : "unacknowledged")
27
+ submit
28
+ end
29
+ end
30
+
31
+ # 上記はすべてsubmitするので通常はすべてのハンドラ実行後にACKを返す。
@@ -0,0 +1,31 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent52_alt1を受け取ったらDBに保存。
5
+ # 対応するハンドラ群をすべて実行してすべてsubmitしたらACKを返す。
6
+ ack_policy(:after_all_handler_submit, :event52_alt1)
7
+
8
+ # このドライバでは自動テストの簡略化のために明示的に標準出力に対してputsを呼び出しています
9
+
10
+ driver :driver52_alt1_1 do
11
+ on:event52_alt1 do
12
+ STDOUT.puts "handler52_alt1_1 " << (ack? ? "acknowledged" : "unacknowledged")
13
+ submit
14
+ end
15
+ end
16
+
17
+ driver :driver52_alt1_2 do
18
+ on:event52_alt1 do
19
+ STDOUT.puts "handler52_alt1_2 " << (ack? ? "acknowledged" : "unacknowledged")
20
+ # submit # submitしないのでこのDSL
21
+ end
22
+ end
23
+
24
+ driver :driver52_alt1_3 do
25
+ on:event52_alt1 do
26
+ STDOUT.puts "handler52_alt1_3 " << (ack? ? "acknowledged" : "unacknowledged")
27
+ submit
28
+ end
29
+ end
30
+
31
+ # 上記はすべてsubmitするので通常はすべてのハンドラ実行後にACKを返す。
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # ハンドラ内では event メソッドを使って受け取ったイベントを取得する事が可能。
5
+ # イベントの属性については、Tengine::Core::Event を参照
6
+
7
+ driver :driver60 do
8
+ on:event60 do
9
+ Tengine.logger.debug("*" * 100)
10
+ Tengine.logger.debug( "event: #{event.inspect}" )
11
+ hash = {}
12
+ [:event_type_name, :key, :source_name, :occurred_at,
13
+ :level, :confirmed, :sender_name, :properties,].each do |attr_name|
14
+ hash[attr_name.to_s] = event.send(attr_name)
15
+ end
16
+ puts "handler60: " << hash.to_a.sort.inspect
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # ドライバ内では sessionメソッドで取得できるセッションに対して
5
+ # updateメソッドを使ってドライバのセッションに情報を格納できる。
6
+ # 格納された情報は[]を使用して取得することができる
7
+
8
+ driver :driver62 do
9
+ session.update(:foo => 100) # ドライバ登録時にそのセッションに キー:foo に対して 値100 を設定する。
10
+
11
+ on:event62 do
12
+ value = session[:foo]
13
+ value +=1
14
+ session.update(:foo => value)
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # これは driver62と違って、複数のプロセスが同時に数を数えても正しく+1していきます
5
+ driver :driver64 do
6
+ session.update(:foo => 100) # ドライバ登録時にそのセッションに キー:foo に対して 値100 を設定する。
7
+
8
+ on:event64 do
9
+ session.update(:retry => 2) do |hash|
10
+ hash[:foo] = hash[:foo] + 1
11
+ # hash[:foo] += 1 # と書いても良い
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # アクティベーション時にイベントドライバを有効な状態にするかどうかを
5
+ # :enabled_on_actibation オプションで指定できる。デフォルトはtrue。
6
+
7
+ driver :driver70, :enabled_on_activation => true do
8
+
9
+ on:event70 do
10
+ puts "handler70"
11
+ end
12
+
13
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # アクティベーション時にイベントドライバを有効な状態にするかどうかを
5
+ # :enabled_on_actibation オプションで指定できる。デフォルトはtrue。
6
+
7
+ driver :driver71, :enabled_on_activation => false do
8
+
9
+ # イベントに対応する処理の実行する
10
+ on:event71 do
11
+ puts "handler71"
12
+ end
13
+
14
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # アクティベーション時にEventMachineの初期化を行うことができる。
5
+
6
+ setup_eventmachine do
7
+ puts "setup_eventmachine"
8
+ EM.add_periodic_timer(3) do
9
+ fire(:event72)
10
+ end
11
+ end
12
+
13
+ driver :driver72 do
14
+ on:event72 do
15
+ puts "handler72"
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver80 do
5
+
6
+ on:event80 do
7
+ raise IOError, "by driver80"
8
+ end
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ driver :driver81 do
5
+
6
+ on:event81 do
7
+ raise RuntimeError, "by driver81"
8
+ end
9
+
10
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ puts "*" * 100
3
+ puts "#{__FILE__} is loaded"
4
+
5
+ require 'tengine/core'
6
+
7
+ class Driver01
8
+ include Tengine::Core::Driveable
9
+
10
+ on:event01
11
+ def event01
12
+ puts "#" * 100
13
+ puts "handler01"
14
+ puts "Driver01.object_id: #{Driver01.object_id.inspect}"
15
+ puts "ActiveSupport::Dependencies.loaded: #{ActiveSupport::Dependencies.loaded.inspect}"
16
+ end
17
+
18
+ end
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ class Driver02
5
+ include Tengine::Core::Driveable
6
+
7
+ # イベントが発生したら新たなイベントを発火する
8
+ on:event02_1
9
+ def foo
10
+ puts "handler02_1"
11
+ fire(:event02_2)
12
+ end
13
+
14
+ on:event02_2
15
+ def bar
16
+ puts "handler02_2"
17
+ end
18
+
19
+ end
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ class Uc08IfBothAAndBOccurs
5
+ include Tengine::Core::Driveable
6
+
7
+ # イベントAとイベントBが発生したら処理を実行する
8
+ on :event08_a & :event_08_b
9
+ def event08
10
+ puts "handler08"
11
+ end
12
+
13
+ end
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ class Uc10IfTheEventOccursAtTheServer
5
+ include Tengine::Core::Driveable
6
+
7
+ # 特定のサーバからのイベントが発生した場合のみ処理を実行する
8
+ on :event10.at("localhost")
9
+ def event10_at_localhost
10
+ puts "handler10 for localhost"
11
+ end
12
+
13
+ on :event10.at("test_server1")
14
+ def event10_at_test_server1
15
+ puts "handler10 for test_server1"
16
+ end
17
+
18
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent51を受け取ったらDBに保存。
5
+ # 対応するハンドラを実行して最初にsubmitされたときにACKを返す。
6
+ ack_policy(:at_first_submit, :event51)
7
+
8
+ class Uc51CommitEventAtFirstSubmit_1
9
+ include Tengine::Core::Driveable
10
+
11
+ # 最初に実行されるハンドラではsubmitしないので、ACKされない
12
+ on:event51
13
+ def event51
14
+ puts "handler51_1"
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent51を受け取ったらDBに保存。
5
+ # 対応するハンドラを実行して最初にsubmitされたときにACKを返す。
6
+ ack_policy(:at_first_submit, :event51)
7
+
8
+ class Uc51CommitEventAtFirstSubmit_2
9
+ include Tengine::Core::Driveable
10
+
11
+ # このハンドラでsubmitするので、ACKする
12
+ on:event51
13
+ def event51
14
+ puts "handler51_2"
15
+ submit
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'tengine/core'
3
+
4
+ # カーネルはイベントevent51を受け取ったらDBに保存。
5
+ # 対応するハンドラを実行して最初にsubmitされたときにACKを返す。
6
+ ack_policy(:at_first_submit, :event51)
7
+
8
+ class Uc51CommitEventAtFirstSubmit_3
9
+ include Tengine::Core::Driveable
10
+
11
+ # このハンドラでsubmitするが、すでにACKしているのでACKしない
12
+ on:event51
13
+ def event51
14
+ puts "handler51_3"
15
+ submit
16
+ end
17
+ end