rsence 2.0.0.0.pre

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.
Files changed (311) hide show
  1. data/INSTALL.rdoc +295 -0
  2. data/LICENSE +622 -0
  3. data/README.rdoc +24 -0
  4. data/VERSION +1 -0
  5. data/bin/build_client.rb +254 -0
  6. data/bin/help +6 -0
  7. data/bin/launch.rb +120 -0
  8. data/bin/rdoc.sh +2 -0
  9. data/bin/restart +6 -0
  10. data/bin/rsence +120 -0
  11. data/bin/run +6 -0
  12. data/bin/run.rb +6 -0
  13. data/bin/save +6 -0
  14. data/bin/start +6 -0
  15. data/bin/status +6 -0
  16. data/bin/stop +6 -0
  17. data/conf/config.ru +5 -0
  18. data/conf/default_conf.yaml +337 -0
  19. data/conf/default_strings.yaml +77 -0
  20. data/conf/local_conf.yaml +14 -0
  21. data/conf/unicorn.conf +78 -0
  22. data/js/comm/comm/autosync/autosync.js +18 -0
  23. data/js/comm/comm/autosync/js.inc +0 -0
  24. data/js/comm/comm/comm.js +195 -0
  25. data/js/comm/comm/js.inc +0 -0
  26. data/js/comm/comm/queue/js.inc +0 -0
  27. data/js/comm/comm/queue/queue.js +183 -0
  28. data/js/comm/comm/session/js.inc +0 -0
  29. data/js/comm/comm/session/session.js +51 -0
  30. data/js/comm/comm/sessionwatcher/js.inc +0 -0
  31. data/js/comm/comm/sessionwatcher/sessionwatcher.js +43 -0
  32. data/js/comm/comm/transporter/js.inc +0 -0
  33. data/js/comm/comm/transporter/transporter.js +257 -0
  34. data/js/comm/comm/urlresponder/js.inc +0 -0
  35. data/js/comm/comm/urlresponder/urlresponder.js +148 -0
  36. data/js/comm/comm/values/js.inc +0 -0
  37. data/js/comm/comm/values/values.js +432 -0
  38. data/js/comm/jsloader/js.inc +0 -0
  39. data/js/comm/jsloader/jsloader.js +114 -0
  40. data/js/comm/reloadapp/js.inc +0 -0
  41. data/js/comm/reloadapp/reloadapp.js +150 -0
  42. data/js/comm/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
  43. data/js/comm/reloadapp/themes/default/reloadapp_warning.png +0 -0
  44. data/js/comm/sha/js.inc +0 -0
  45. data/js/comm/sha/sha.js +432 -0
  46. data/js/comm/values/value/js.inc +0 -0
  47. data/js/comm/values/value/value.js +182 -0
  48. data/js/comm/values/valuematrix/js.inc +0 -0
  49. data/js/comm/values/valuematrix/valuematrix.js +138 -0
  50. data/js/controls/button/button.js +57 -0
  51. data/js/controls/button/js.inc +0 -0
  52. data/js/controls/button/themes/bright/button.css +89 -0
  53. data/js/controls/button/themes/bright/button.html +7 -0
  54. data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
  55. data/js/controls/button/themes/bright/button_parts1.png +0 -0
  56. data/js/controls/button/themes/default/button.css +89 -0
  57. data/js/controls/button/themes/default/button.html +7 -0
  58. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  59. data/js/controls/button/themes/default/button_parts1.png +0 -0
  60. data/js/controls/checkbox/checkbox.js +47 -0
  61. data/js/controls/checkbox/js.inc +0 -0
  62. data/js/controls/checkbox/themes/default/checkbox.css +69 -0
  63. data/js/controls/checkbox/themes/default/checkbox.html +5 -0
  64. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  65. data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
  66. data/js/controls/datetime/calendar/calendar.js +197 -0
  67. data/js/controls/datetime/calendar/js.inc +0 -0
  68. data/js/controls/datetime/calendar/themes/default/calendar.css +108 -0
  69. data/js/controls/datetime/calendar/themes/default/calendar.html +9 -0
  70. data/js/controls/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
  71. data/js/controls/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  72. data/js/controls/datetime/datetimevalue/datetimevalue.js +246 -0
  73. data/js/controls/datetime/datetimevalue/js.inc +0 -0
  74. data/js/controls/datetime/timesheet/js.inc +0 -0
  75. data/js/controls/datetime/timesheet/themes/default/timesheet.css +30 -0
  76. data/js/controls/datetime/timesheet/themes/default/timesheet.html +2 -0
  77. data/js/controls/datetime/timesheet/timesheet.js +182 -0
  78. data/js/controls/datetime/timesheet_item/js.inc +0 -0
  79. data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
  80. data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
  81. data/js/controls/datetime/timesheet_item/timesheet_item.js +247 -0
  82. data/js/controls/datetime/timesheet_item_edit/js.inc +0 -0
  83. data/js/controls/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
  84. data/js/controls/dialogs/alert_sheet/alert_sheet.js +62 -0
  85. data/js/controls/dialogs/alert_sheet/js.inc +0 -0
  86. data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +36 -0
  87. data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
  88. data/js/controls/dialogs/sheet/js.inc +0 -0
  89. data/js/controls/dialogs/sheet/sheet.js +83 -0
  90. data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
  91. data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
  92. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  93. data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
  94. data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
  95. data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
  96. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  97. data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
  98. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  99. data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
  100. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  101. data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
  102. data/js/controls/imageview/imageview.js +108 -0
  103. data/js/controls/imageview/js.inc +0 -0
  104. data/js/controls/imageview/themes/default/blank.gif +0 -0
  105. data/js/controls/lists/checkboxlist/checkboxlist.js +170 -0
  106. data/js/controls/lists/checkboxlist/js.inc +0 -0
  107. data/js/controls/lists/listitems/js.inc +0 -0
  108. data/js/controls/lists/listitems/listitems.js +65 -0
  109. data/js/controls/lists/radiobuttonlist/js.inc +0 -0
  110. data/js/controls/lists/radiobuttonlist/radiobuttonlist.js +126 -0
  111. data/js/controls/passwordcontrol/js.inc +0 -0
  112. data/js/controls/passwordcontrol/passwordcontrol.js +22 -0
  113. data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
  114. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
  115. data/js/controls/progress/progressbar/js.inc +0 -0
  116. data/js/controls/progress/progressbar/progressbar.js +36 -0
  117. data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
  118. data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
  119. data/js/controls/progress/progressindicator/js.inc +0 -0
  120. data/js/controls/progress/progressindicator/progressindicator.js +43 -0
  121. data/js/controls/radiobutton/js.inc +0 -0
  122. data/js/controls/radiobutton/radiobutton.js +41 -0
  123. data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
  124. data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
  125. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  126. data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
  127. data/js/controls/sliders/slider/js.inc +0 -0
  128. data/js/controls/sliders/slider/slider.js +356 -0
  129. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  130. data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
  131. data/js/controls/sliders/slider/themes/default/slider.css +108 -0
  132. data/js/controls/sliders/slider/themes/default/slider.html +5 -0
  133. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  134. data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
  135. data/js/controls/sliders/vslider/js.inc +0 -0
  136. data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
  137. data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
  138. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  139. data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
  140. data/js/controls/sliders/vslider/vslider.js +40 -0
  141. data/js/controls/stepper/js.inc +0 -0
  142. data/js/controls/stepper/stepper.js +212 -0
  143. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  144. data/js/controls/stepper/themes/default/stepper.css +14 -0
  145. data/js/controls/stepper/themes/default/stepper.html +2 -0
  146. data/js/controls/stepper/themes/default/stepper.png +0 -0
  147. data/js/controls/stringview/js.inc +0 -0
  148. data/js/controls/stringview/stringview.js +49 -0
  149. data/js/controls/stringview/themes/default/stringview.css +8 -0
  150. data/js/controls/stringview/themes/default/stringview.html +1 -0
  151. data/js/controls/tab/js.inc +0 -0
  152. data/js/controls/tab/tab.js +276 -0
  153. data/js/controls/tab/themes/bright/tab.css +76 -0
  154. data/js/controls/tab/themes/bright/tab.html +6 -0
  155. data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
  156. data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
  157. data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
  158. data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
  159. data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
  160. data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
  161. data/js/controls/tab/themes/default/tab.css +77 -0
  162. data/js/controls/tab/themes/default/tab.html +6 -0
  163. data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
  164. data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
  165. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  166. data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
  167. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  168. data/js/controls/tab/themes/default/tab_parts1.png +0 -0
  169. data/js/controls/textarea/js.inc +0 -0
  170. data/js/controls/textarea/textarea.js +23 -0
  171. data/js/controls/textarea/themes/default/textarea.css +21 -0
  172. data/js/controls/textarea/themes/default/textarea.html +18 -0
  173. data/js/controls/textcontrol/js.inc +0 -0
  174. data/js/controls/textcontrol/textcontrol.js +372 -0
  175. data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
  176. data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
  177. data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
  178. data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
  179. data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
  180. data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
  181. data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
  182. data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
  183. data/js/controls/uploader/js.inc +0 -0
  184. data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
  185. data/js/controls/uploader/themes/default/uploader.css +108 -0
  186. data/js/controls/uploader/themes/default/uploader.html +27 -0
  187. data/js/controls/uploader/uploader.js +153 -0
  188. data/js/controls/validatorview/js.inc +0 -0
  189. data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
  190. data/js/controls/validatorview/themes/default/validator.png +0 -0
  191. data/js/controls/validatorview/themes/default/validatorview.css +0 -0
  192. data/js/controls/validatorview/themes/default/validatorview.html +0 -0
  193. data/js/controls/validatorview/validatorview.js +55 -0
  194. data/js/controls/window/js.inc +0 -0
  195. data/js/controls/window/themes/default/window.css +219 -0
  196. data/js/controls/window/themes/default/window.html +17 -0
  197. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  198. data/js/controls/window/themes/default/window_bg_active.png +0 -0
  199. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  200. data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
  201. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  202. data/js/controls/window/themes/default/window_buttons.png +0 -0
  203. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  204. data/js/controls/window/themes/default/window_parts1.png +0 -0
  205. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  206. data/js/controls/window/themes/default/window_parts2.png +0 -0
  207. data/js/controls/window/window.js +284 -0
  208. data/js/core/class/class.js +317 -0
  209. data/js/core/class/js.inc +0 -0
  210. data/js/core/elem/elem.js +1376 -0
  211. data/js/core/elem/js.inc +0 -0
  212. data/js/core/event/event.js +1021 -0
  213. data/js/core/event/js.inc +0 -0
  214. data/js/core/iefix/ie_css_element.htc +5 -0
  215. data/js/core/iefix/ie_css_style.htc +5 -0
  216. data/js/core/iefix/iefix.js +359 -0
  217. data/js/core/iefix/js.inc +0 -0
  218. data/js/debugg/debugg.js +43 -0
  219. data/js/debugg/js.inc +0 -0
  220. data/js/foundation/application/application.js +209 -0
  221. data/js/foundation/application/js.inc +0 -0
  222. data/js/foundation/control/control.js +342 -0
  223. data/js/foundation/control/controldefaults/controldefaults.js +59 -0
  224. data/js/foundation/control/controldefaults/js.inc +0 -0
  225. data/js/foundation/control/dummyvalue/dummyvalue.js +50 -0
  226. data/js/foundation/control/dummyvalue/js.inc +0 -0
  227. data/js/foundation/control/dyncontrol/dyncontrol.js +494 -0
  228. data/js/foundation/control/dyncontrol/js.inc +0 -0
  229. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
  230. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
  231. data/js/foundation/control/eventresponder/eventresponder.js +713 -0
  232. data/js/foundation/control/eventresponder/js.inc +0 -0
  233. data/js/foundation/control/js.inc +0 -0
  234. data/js/foundation/control/valueresponder/js.inc +0 -0
  235. data/js/foundation/control/valueresponder/valueresponder.js +77 -0
  236. data/js/foundation/geom/point/js.inc +0 -0
  237. data/js/foundation/geom/point/point.js +202 -0
  238. data/js/foundation/geom/rect/js.inc +0 -0
  239. data/js/foundation/geom/rect/rect.js +610 -0
  240. data/js/foundation/json_renderer/js.inc +0 -0
  241. data/js/foundation/json_renderer/json_renderer.js +231 -0
  242. data/js/foundation/system/js.inc +0 -0
  243. data/js/foundation/system/system.js +369 -0
  244. data/js/foundation/thememanager/js.inc +0 -0
  245. data/js/foundation/thememanager/thememanager.js +387 -0
  246. data/js/foundation/view/js.inc +0 -0
  247. data/js/foundation/view/markupview/js.inc +0 -0
  248. data/js/foundation/view/markupview/markupview.js +113 -0
  249. data/js/foundation/view/morphanimation/js.inc +0 -0
  250. data/js/foundation/view/morphanimation/morphanimation.js +236 -0
  251. data/js/foundation/view/view.js +1804 -0
  252. data/js/foundation/view/viewdefaults/js.inc +0 -0
  253. data/js/foundation/view/viewdefaults/viewdefaults.js +25 -0
  254. data/js/views/centerview/centerview.js +45 -0
  255. data/js/views/centerview/js.inc +0 -0
  256. data/js/views/inlineview/inlineview.js +14 -0
  257. data/js/views/inlineview/js.inc +0 -0
  258. data/js/views/scrollview/js.inc +0 -0
  259. data/js/views/scrollview/scrollview.js +39 -0
  260. data/lib/conf/default.rb +220 -0
  261. data/lib/conf/wizard.rb +303 -0
  262. data/lib/daemon/daemon.rb +293 -0
  263. data/lib/http/broker.rb +102 -0
  264. data/lib/http/rackup.rb +88 -0
  265. data/lib/http/request.rb +69 -0
  266. data/lib/http/response.rb +63 -0
  267. data/lib/plugins/gui_plugin.rb +129 -0
  268. data/lib/plugins/guiparser.rb +114 -0
  269. data/lib/plugins/plugin.rb +652 -0
  270. data/lib/plugins/plugin_plugins.rb +47 -0
  271. data/lib/plugins/plugin_sqlite_db.rb +72 -0
  272. data/lib/plugins/plugin_util.rb +96 -0
  273. data/lib/plugins/pluginmanager.rb +517 -0
  274. data/lib/plugins/servlet.rb +69 -0
  275. data/lib/session/msg.rb +291 -0
  276. data/lib/session/sessionmanager.rb +491 -0
  277. data/lib/session/sessionstorage.rb +314 -0
  278. data/lib/transporter/transporter.rb +254 -0
  279. data/lib/util/gzstring.rb +5 -0
  280. data/lib/values/hvalue.rb +323 -0
  281. data/lib/values/valuemanager.rb +152 -0
  282. data/plugins/client_pkg/client_pkg.rb +186 -0
  283. data/plugins/client_pkg/info.yaml +25 -0
  284. data/plugins/client_pkg/lib/client_pkg_build.rb +569 -0
  285. data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
  286. data/plugins/client_pkg/lib/client_pkg_serve.rb +210 -0
  287. data/plugins/client_pkg/log/build_log +0 -0
  288. data/plugins/index_html/img/loading.gif +0 -0
  289. data/plugins/index_html/img/riassence.gif +0 -0
  290. data/plugins/index_html/index_html.rb +150 -0
  291. data/plugins/index_html/tmpl/index.html +22 -0
  292. data/plugins/index_html/tmpl/startup_index.html +29 -0
  293. data/plugins/legacy/disabled +0 -0
  294. data/plugins/legacy/disabled- +0 -0
  295. data/plugins/legacy/info.yaml +22 -0
  296. data/plugins/legacy/legacy.rb +15 -0
  297. data/plugins/main/js/riassence_ns.js +87 -0
  298. data/plugins/main/main.rb +234 -0
  299. data/plugins/main/values.yaml +8 -0
  300. data/plugins/ticketservices/lib/common.rb +300 -0
  301. data/plugins/ticketservices/lib/favicon.rb +38 -0
  302. data/plugins/ticketservices/lib/file.rb +58 -0
  303. data/plugins/ticketservices/lib/img.rb +50 -0
  304. data/plugins/ticketservices/lib/objblob.rb +66 -0
  305. data/plugins/ticketservices/lib/rsrc.rb +34 -0
  306. data/plugins/ticketservices/lib/upload.rb +206 -0
  307. data/plugins/ticketservices/ticketservices.rb +268 -0
  308. data/var/db/.git_include +0 -0
  309. data/var/log/.git_include +0 -0
  310. data/var/run/.git_include +0 -0
  311. metadata +390 -0
@@ -0,0 +1,293 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+ # Use the default configuration:
12
+ require 'conf/default'
13
+
14
+ # Use rubygems to load rack
15
+ require 'rubygems'
16
+ require 'rack'
17
+
18
+ # Loads the selected web-server (default is 'thin')
19
+ require RSence.config[:http_server][:rack_require]
20
+
21
+ # Methods that return rack the selected handler
22
+ def rack_webrick_handler; Rack::Handler::WEBrick; end
23
+ def rack_ebb_handler; Rack::Handler::Ebb; end
24
+ def rack_thin_handler; Rack::Handler::Thin; end
25
+ def rack_mongrel_handler; Rack::Handler::Mongrel; end
26
+ def rack_unicorn_handler; Rack::Handler::Unicorn; end
27
+ def rack_rainbows_handler; Rack::Handler::Rainbows; end
28
+
29
+ # Selects the handler for Rack
30
+ RSence.config[:http_server][:rack_handler] = self.method({
31
+ 'fuzed' => :rack_fuzed_handler,
32
+ 'webrick' => :rack_webrick_handler,
33
+ 'ebb' => :rack_ebb_handler,
34
+ 'thin' => :rack_thin_handler,
35
+ 'mongrel' => :rack_mongrel_handler,
36
+ 'unicorn' => :rack_unicorn_handler,
37
+ 'rainbows' => :rack_rainbows_handler
38
+ }[RSence.config[:http_server][:rack_require]]).call
39
+
40
+ # Debug mode switch. The debug mode is intended for developers, not production.
41
+ $DEBUG_MODE = RSence.config[:debug_mode]
42
+
43
+ # Transporter is the top-level handler for calls coming from the javascript COMM.Transporter.
44
+ require 'transporter/transporter'
45
+
46
+ ## Broker routes requests to the correct handler
47
+ require 'http/broker'
48
+
49
+
50
+ module RSence
51
+
52
+ # adapted from:
53
+ # http://snippets.dzone.com/posts/show/2265
54
+
55
+ require 'fileutils'
56
+
57
+ module Daemon
58
+
59
+ class Base
60
+ def self.pid_fn
61
+ RSence.config[:daemon][:pid_fn]
62
+ end
63
+ def self.log_fn
64
+ RSence.config[:daemon][:log_fn]
65
+ end
66
+ def self.daemonize
67
+ Controller.daemonize(self)
68
+ end
69
+ end
70
+
71
+ module PidFile
72
+ def self.store(daemon, pid)
73
+ dir_path_pid = File.split( daemon.pid_fn )[0]
74
+ FileUtils.mkdir_p( dir_path_pid ) unless File.exists? dir_path_pid
75
+ File.open(daemon.pid_fn, 'w') {|f| f << pid}
76
+ end
77
+ def self.recall(daemon)
78
+ IO.read(daemon.pid_fn).to_i rescue nil
79
+ end
80
+ end
81
+
82
+ module Controller
83
+
84
+ def self.print_status(daemon)
85
+ is_running = self.status(daemon)
86
+ puts "Riassence Framework is #{'not ' unless is_running}running"
87
+ end
88
+
89
+ ## Status is not entirely reliable
90
+ def self.status(daemon)
91
+ if File.file?(daemon.pid_fn)
92
+ begin
93
+ pid = File.read(daemon.pid_fn).to_i
94
+ pid && Process.kill('USR2',pid)
95
+ return true
96
+ rescue Errno::ESRCH => e
97
+ return false
98
+ end
99
+ end
100
+ return false
101
+ end
102
+
103
+ def self.open_log( outpath, errpath )
104
+ dir_path_out = File.split( outpath )[0]
105
+ FileUtils.mkdir_p( dir_path_out ) unless File.exists? dir_path_out
106
+ dir_path_err = File.split( outpath )[0]
107
+ FileUtils.mkdir_p( dir_path_err ) unless File.exists? dir_path_err
108
+ if File.exist?( outpath )
109
+ STDOUT.reopen( outpath, "a" )
110
+ else
111
+ STDOUT.reopen( outpath, "w" )
112
+ end
113
+ if File.exist?( errpath )
114
+ STDERR.reopen( errpath, "a" )
115
+ else
116
+ STDERR.reopen( errpath, "w" )
117
+ end
118
+ STDOUT.sync = true
119
+ STDERR.sync = true
120
+ end
121
+
122
+ def self.log_io(daemon)
123
+ outpath = "#{daemon.log_fn}.stdout"
124
+ errpath = "#{daemon.log_fn}.stderr"
125
+ if $DEBUG_MODE
126
+ Thread.new do
127
+ puts "Waiting 2 seconds before switching output to log file #{outpath} and .../#{File.split(errpath)[1]}"
128
+ sleep 2
129
+ puts "Switching to stdin and stdout to log mode. Follow the log file to see further server output."
130
+ self.open_log( outpath, errpath )
131
+ end
132
+ else
133
+ self.open_log( outpath, errpath )
134
+ end
135
+ end
136
+
137
+ def self.daemonize(daemon)
138
+ cmd = ARGV[0]
139
+ if ['i386-mingw32','x86-mingw32'].include? RUBY_PLATFORM
140
+ if cmd == 'start'
141
+ warn "Running on Microsoft Windows: unable to background. Using the run command instead of start"
142
+ cmd = 'run'
143
+ elsif cmd != 'run'
144
+ puts "Invalid command: #{cmd.inspect}. Windows supports only run and help."
145
+ exit
146
+ end
147
+ elsif not cmd or not %w[status start stop restart save run].include?( cmd )
148
+ puts "Invalid command. Please specify one of the following: run, start, stop, restart, status, save or help."
149
+ exit
150
+ end
151
+ case cmd
152
+ when 'run'
153
+ puts "Starting as a foreground process."
154
+ puts "Enter CTRL-C to stop."
155
+ self.start_fg(daemon)
156
+ when 'status'
157
+ self.print_status(daemon)
158
+ when 'start'
159
+ self.start(daemon)
160
+ when 'stop'
161
+ self.stop(daemon)
162
+ when 'restart'
163
+ self.stop(daemon,true)
164
+ self.start(daemon)
165
+ when 'save'
166
+ self.save(daemon)
167
+ end
168
+ end
169
+ def self.start_fg(daemon)
170
+ ['INT', 'TERM', 'KILL'].each do |signal|
171
+ Signal.trap(signal) do
172
+ puts "Got signal #{signal.inspect}"
173
+ daemon.stop
174
+ exit
175
+ end
176
+ end
177
+ daemon.start
178
+ exit
179
+ end
180
+ def self.start(daemon)
181
+ is_running = self.status(daemon)
182
+ if is_running
183
+ puts "Riassence Framework is already running. Try restart."
184
+ exit
185
+ elsif not is_running and File.file?(daemon.pid_fn)
186
+ puts "Stale pid file, removing.."
187
+ FileUtils.rm(daemon.pid_fn)
188
+ end
189
+ fork do
190
+ Process.setsid
191
+ exit if fork
192
+ PidFile.store(daemon, Process.pid)
193
+ Signal.trap('USR1') do
194
+ if @transporter != nil
195
+ @transporter.plugins.shutdown if @transporter.plugins
196
+ @transporter.sessions.shutdown if @transporter.session
197
+ end
198
+ end
199
+ Signal.trap('USR2') do
200
+ puts "Alive."
201
+ end
202
+ ['INT', 'TERM', 'KILL'].each do |signal|
203
+ Signal.trap(signal) do
204
+ puts "Got signal #{signal.inspect}"
205
+ daemon.stop
206
+ exit
207
+ end
208
+ end
209
+ Signal.trap('HUP') {
210
+ daemon.restart
211
+ }
212
+ STDIN.reopen( "/dev/null" )
213
+ daemon.start
214
+ end
215
+
216
+ timeout = Time.now + 10
217
+ sleep 0.1 until self.status(daemon) or timeout < Time.now
218
+
219
+ if timeout < Time.now
220
+ puts "Riassence Framework did not start, please check the logfile."
221
+ else
222
+ puts "Riassence Framework is running now."
223
+ end
224
+
225
+ sleep 2.5 if $DEBUG_MODE
226
+
227
+ #Process.kill("USR2", File.read(daemon.pid_fn).to_i)
228
+ end
229
+ def self.save(daemon,is_restart=false)
230
+ if !File.file?(daemon.pid_fn)
231
+ puts "Pid file not found. Is Riassence Framework started?"
232
+ return if is_restart
233
+ exit
234
+ end
235
+ pid = File.read(daemon.pid_fn).to_i
236
+ begin
237
+ pid && Process.kill("USR1", pid)
238
+ puts "Session data saved."
239
+ rescue
240
+ puts "Error, no such pid (#{pid}) running"
241
+ end
242
+ end
243
+ def self.stop(daemon,is_restart=false)
244
+ self.save(daemon,is_restart)
245
+ if !File.file?(daemon.pid_fn)
246
+ puts "Pid file not found. Is Riassence Framework started?"
247
+ return if is_restart
248
+ exit
249
+ end
250
+ pid = PidFile.recall(daemon)
251
+ begin
252
+ pid && Process.kill("TERM", pid)
253
+ puts "Riassence Framework is stopped now."
254
+ rescue
255
+ puts "Error, no such pid (#{pid}) running"
256
+ end
257
+ FileUtils.rm(daemon.pid_fn)
258
+ end
259
+ end
260
+ end
261
+
262
+ class HTTPDaemon < Daemon::Base
263
+ def self.start
264
+ @transporter = Transporter.new
265
+
266
+ unless ARGV.include?('--log-fg')
267
+ Daemon::Controller.log_io(self)
268
+ end
269
+
270
+ # This is the main http handler instance:
271
+ @broker = Broker.start(
272
+ @transporter,
273
+ RSence.config[:http_server][:rack_handler],
274
+ RSence.config[:http_server][:bind_address],
275
+ RSence.config[:http_server][:port]
276
+ )
277
+
278
+ yield @broker if block_given?
279
+
280
+ end
281
+ def self.restart
282
+ self.stop
283
+ @broker = nil
284
+ self.start
285
+ end
286
+ def self.stop
287
+ @transporter.plugins.shutdown
288
+ @transporter.sessions.shutdown
289
+ end
290
+ end
291
+
292
+ end
293
+
@@ -0,0 +1,102 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+
13
+ module RSence
14
+
15
+ require 'rubygems'
16
+ require 'rack'
17
+
18
+ ## Minimally WEBrick -compatible response object
19
+ require 'http/response'
20
+
21
+ ## Minimally WEBrick -compatible request object
22
+ require 'http/request'
23
+
24
+ =begin
25
+
26
+ Broker routes requests to the proper request processing instance
27
+
28
+ =end
29
+
30
+ class Broker
31
+
32
+ def call(env)
33
+ request = Request.new(env)
34
+ response = Response.new
35
+ request_method = request.request_method.downcase
36
+ dispatcher = dispatcher_class.new( request, response )
37
+ dispatcher.send(request_method)
38
+ content_type = dispatcher.content_type
39
+ response.header['Content-Length'] = response.body.length.to_s unless response.header.has_key?('Content-Length')
40
+ return [response.status, response.header, response.body]
41
+ end
42
+
43
+ def dispatcher_class
44
+ @dispatcher ||= Class.new(self.class) do
45
+ attr_accessor :content_type
46
+ def initialize(request,response)
47
+ @request = request
48
+ @response = response
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.start( transporter, handler, host, port)
54
+ @@transporter = transporter
55
+ conf = ::RSence.config[:http_server][:latency]
56
+ if conf == 0
57
+ @@ping_sim = false
58
+ else
59
+ @@ping_sim = conf/1000.0
60
+ end
61
+ handler.run( Rack::Lint.new(self.new), :Host => host, :Port => port )
62
+ end
63
+
64
+ def self.included(receiver)
65
+ receiver.extend( SingletonMethods )
66
+ end
67
+
68
+ def not_found
69
+ puts "/404: #{@request.fullpath.inspect}" if $DEBUG_MODE
70
+ @response.status = 404
71
+ err404 = '<html><head><title>404 - Page Not Found</title></head><body>404 - Page Not Found</body></html>'
72
+ @response['content-type'] = 'text/html; charset=UTF-8'
73
+ @response['content-length'] = err404.length.to_s
74
+ @response.body = err404
75
+ end
76
+
77
+ ## Post requests are always xhr requests
78
+ def post
79
+
80
+ puts "post: #{@request.fullpath}" if $DEBUG_MODE
81
+
82
+ sleep @@ping_sim if @@ping_sim
83
+
84
+ not_found unless @@transporter.servlet( :post, @request, @response )
85
+
86
+ end
87
+
88
+ ## Get requests are different, depending on the uri requested
89
+ def get
90
+
91
+ puts "get: #{@request.fullpath}" if $DEBUG_MODE
92
+
93
+ sleep @@ping_sim if @@ping_sim
94
+
95
+ not_found unless @@transporter.servlet( :get, @request, @response )
96
+
97
+ end
98
+
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,88 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+ if ARGV.include?('--root-path')
12
+ SERVER_PATH = ARGV[ARGV.index('--root-path')+1]
13
+ else
14
+ path = ::File.dirname(__FILE__)
15
+ exp_path = ::File.expand_path( path )
16
+ lib_path = ::File.split( exp_path )[0]
17
+ SERVER_PATH = ::File.split( lib_path )[0]
18
+ end
19
+
20
+ $LOAD_PATH << SERVER_PATH
21
+ $LOAD_PATH << ::File.join( SERVER_PATH, 'lib' )
22
+
23
+ # Use the default configuration:
24
+ require 'conf/default'
25
+
26
+ # Debug mode switch. The debug mode is intended for developers, not production.
27
+ $DEBUG_MODE = RSence.config[:debug_mode]
28
+
29
+ ENV['RACK_ENV'] = 'production' unless $DEBUG_MODE
30
+
31
+ ## Minimally WEBrick -compatible response object
32
+ require 'http/response'
33
+
34
+ ## Minimally WEBrick -compatible request object
35
+ require 'http/request'
36
+
37
+ # Transporter is the top-level handler for calls coming from the javascript COMM.Transporter.
38
+ require 'transporter/transporter'
39
+
40
+ module RSence
41
+ module Broker
42
+
43
+ @@transporter = Transporter.new
44
+
45
+ def self.start
46
+ conf = ::RSence.config[:http_server][:latency]
47
+ if conf == 0
48
+ @@ping_sim = false
49
+ else
50
+ @@ping_sim = conf/1000.0
51
+ end
52
+ end
53
+
54
+ def self.stop
55
+ @@transporter.plugins.shutdown
56
+ @@transporter.sessions.shutdown
57
+ end
58
+
59
+ def self.call(env)
60
+ request = Request.new(env)
61
+ response = Response.new
62
+ request_method = request.request_method.downcase
63
+ if request_method == 'get'
64
+ puts "get: #{request.fullpath}" if $DEBUG_MODE
65
+ sleep @@ping_sim if @@ping_sim
66
+ not_found( request, response ) unless @@transporter.servlet( :get, request, response )
67
+ elsif request_method == 'post'
68
+ puts "post: #{request.fullpath}" if $DEBUG_MODE
69
+ sleep @@ping_sim if @@ping_sim
70
+ not_found( request, response ) unless @@transporter.servlet( :post, request, response )
71
+ else
72
+ puts "unsupported method: #{request_method.inspect}"
73
+ end
74
+ response.header['Content-Length'] = response.body.length.to_s unless response.header.has_key?('Content-Length')
75
+ return [response.status, response.header, response.body]
76
+ end
77
+
78
+ def not_found( request, response )
79
+ puts "/404: #{request.fullpath.inspect}" if $DEBUG_MODE
80
+ response.status = 404
81
+ err404 = '<html><head><title>404 - Page Not Found</title></head><body>404 - Page Not Found</body></html>'
82
+ response['content-type'] = 'text/html; charset=UTF-8'
83
+ response['content-length'] = err404.length.to_s
84
+ response.body = err404
85
+ end
86
+
87
+ end
88
+ end