rsence-pre 2.1.0.1.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.
- data/.yardopts +10 -0
- data/INSTALL.rdoc +330 -0
- data/LICENSE.txt +622 -0
- data/README.rdoc +98 -0
- data/VERSION +1 -0
- data/bin/rsence +25 -0
- data/bin/rsence-pre +25 -0
- data/conf/default_conf.yaml +346 -0
- data/conf/default_strings.yaml +76 -0
- data/conf/rsence_command_strings.yaml +444 -0
- data/docs/ExampleGuiPlugin.rdoc +193 -0
- data/docs/JavascriptBundles.rdoc +0 -0
- data/docs/PluginBundleInfo.rdoc +173 -0
- data/docs/PluginBundles.rdoc +96 -0
- data/docs/Values.rdoc +163 -0
- data/js/comm/autosync/autosync.js +17 -0
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/comm.js +203 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +112 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/queue/queue.js +184 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/session/session.js +52 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/transporter/transporter.js +261 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/urlresponder/urlresponder.js +149 -0
- data/js/comm/values/js.inc +0 -0
- data/js/comm/values/values.js +433 -0
- data/js/controls/button/button.js +72 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +49 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +84 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +109 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +40 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +44 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +43 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +357 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +41 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +213 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +280 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +24 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +374 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +154 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +62 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +286 -0
- data/js/core/class/class.js +318 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1383 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +153 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/core/rsence_ns/rsence_ns.js +21 -0
- data/js/datetime/calendar/calendar.js +198 -0
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/datetime/datetimevalue/datetimevalue.js +247 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/datetime/timesheet/timesheet.js +183 -0
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/datetime/timesheet_item/timesheet_item.js +248 -0
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/foundation/application/application.js +208 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +339 -0
- data/js/foundation/control/controldefaults/controldefaults.js +56 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +750 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valuematrix/valuematrix.js +135 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +79 -0
- data/js/foundation/eventmanager/eventmanager.js +991 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +651 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +246 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +381 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +393 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/value/value.js +183 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +114 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +237 -0
- data/js/foundation/view/view.js +1812 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
- data/js/lists/checkboxlist/checkboxlist.js +171 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/listitems/listitems.js +88 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +326 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/reloadapp/reloadapp.js +152 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/util/sha/sha.js +426 -0
- data/js/views/centerview/centerview.js +75 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +15 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +40 -0
- data/lib/conf/argv.rb +850 -0
- data/lib/conf/default.rb +219 -0
- data/lib/daemon/daemon.rb +387 -0
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +150 -0
- data/lib/http/rackup.rb +91 -0
- data/lib/http/request.rb +66 -0
- data/lib/http/response.rb +65 -0
- data/lib/plugins/dependencies.rb +285 -0
- data/lib/plugins/gui_plugin.rb +160 -0
- data/lib/plugins/guiparser.rb +123 -0
- data/lib/plugins/plugin.rb +438 -0
- data/lib/plugins/plugin_base.rb +162 -0
- data/lib/plugins/plugin_plugins.rb +81 -0
- data/lib/plugins/plugin_sqlite_db.rb +98 -0
- data/lib/plugins/pluginmanager.rb +635 -0
- data/lib/plugins/plugins.rb +169 -0
- data/lib/plugins/servlet.rb +108 -0
- data/lib/rsence.rb +32 -0
- data/lib/session/msg.rb +327 -0
- data/lib/session/sessionmanager.rb +522 -0
- data/lib/session/sessionstorage.rb +340 -0
- data/lib/transporter/transporter.rb +263 -0
- data/lib/util/gzstring.rb +9 -0
- data/lib/util/ruby19_fixes.rb +18 -0
- data/lib/values/hvalue.rb +378 -0
- data/lib/values/valuemanager.rb +172 -0
- data/plugins/client_pkg/client_pkg.rb +157 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +120 -0
- data/plugins/index_html/info.yaml +18 -0
- data/plugins/index_html/tmpl/index.html +15 -0
- data/plugins/main/info.yaml +18 -0
- data/plugins/main/js/main.js +84 -0
- data/plugins/main/main.rb +255 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticket/info.yaml +21 -0
- data/plugins/ticket/lib/common.rb +392 -0
- data/plugins/ticket/lib/favicon.rb +39 -0
- data/plugins/ticket/lib/file.rb +58 -0
- data/plugins/ticket/lib/img.rb +50 -0
- data/plugins/ticket/lib/objblob.rb +66 -0
- data/plugins/ticket/lib/rsrc.rb +34 -0
- data/plugins/ticket/lib/upload.rb +236 -0
- data/plugins/ticket/ticket.rb +333 -0
- data/setup/welcome/gui/welcome.yaml +92 -0
- data/setup/welcome/info.yaml +13 -0
- data/setup/welcome/text/welcome.html +9 -0
- data/setup/welcome/values.yaml +9 -0
- data/setup/welcome/welcome.rb +54 -0
- metadata +407 -0
@@ -0,0 +1,378 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2006 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
module RSence
|
12
|
+
|
13
|
+
|
14
|
+
# HValue is the model for client-server synchronized values.
|
15
|
+
# A value contains its payload {#data} and enough meta-data to define its behavior.
|
16
|
+
class HValue
|
17
|
+
|
18
|
+
# The validity of the data. Defaults to false, when the data comes from the client.
|
19
|
+
# @return [Boolean] True, when set by the server. False when initially set by the client. Also false, unless all responders return true.
|
20
|
+
attr_reader :is_valid
|
21
|
+
|
22
|
+
# @private Is true when changed by the server. Causes the ValueManager to send its client-side representation.
|
23
|
+
attr_reader :sync
|
24
|
+
|
25
|
+
# @private The unique ID of the value.
|
26
|
+
attr_reader :value_id
|
27
|
+
alias val_id value_id
|
28
|
+
|
29
|
+
# The payload data. Use {#set} to change.
|
30
|
+
attr_reader :data
|
31
|
+
|
32
|
+
# @private List of responders
|
33
|
+
attr_reader :members
|
34
|
+
|
35
|
+
# @private
|
36
|
+
attr_writer :is_valid
|
37
|
+
|
38
|
+
# @private
|
39
|
+
def value_id=(new_id)
|
40
|
+
@value_id = new_id
|
41
|
+
end
|
42
|
+
# @private
|
43
|
+
alias val_id= value_id=
|
44
|
+
|
45
|
+
alias valid is_valid
|
46
|
+
alias valid? is_valid
|
47
|
+
|
48
|
+
# @private Method for binding the value to the session data.
|
49
|
+
def add( msg )
|
50
|
+
|
51
|
+
# get the value storage from the session data
|
52
|
+
session_values = msg.session[:values][:by_id]
|
53
|
+
|
54
|
+
## Store the object here
|
55
|
+
session_values[ @value_id ] = self
|
56
|
+
|
57
|
+
## Sends the client-side description
|
58
|
+
restore( msg )
|
59
|
+
|
60
|
+
## Set the valid flag, so we know that the value is initially in sync
|
61
|
+
@is_valid = true
|
62
|
+
end
|
63
|
+
|
64
|
+
# @private (Re-)Send the client-size representation
|
65
|
+
def restore( msg )
|
66
|
+
|
67
|
+
## Tags itself as a new value from the client's point of view
|
68
|
+
@is_new_to_client = true
|
69
|
+
|
70
|
+
add_to_sync( msg )
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
# Value meta-data. The third constructor parameter
|
75
|
+
attr_accessor :meta
|
76
|
+
|
77
|
+
# Creates a new client-server automatically synchronized data wrapper object.
|
78
|
+
# @param [Message] msg Just pass on the +msg+ from the scope you call from.
|
79
|
+
# @param [#to_json] data Any data that can be converted to JSON.
|
80
|
+
# @param [Hash] meta Has no effect yet.
|
81
|
+
def initialize( msg, data, meta = { :name => nil } )
|
82
|
+
|
83
|
+
## Get an unique integer id for the value
|
84
|
+
if RSence.args[:debug] and meta[:name] and not msg.valuemanager.id_exists?( msg, meta[:name] )
|
85
|
+
@value_id = meta[:name]
|
86
|
+
else
|
87
|
+
@value_id = msg.valuemanager.randgen.gen
|
88
|
+
end
|
89
|
+
|
90
|
+
@meta = meta
|
91
|
+
|
92
|
+
## set the data of the hvalue
|
93
|
+
set( msg, data, true )
|
94
|
+
|
95
|
+
## the @sync flag is raised, when the client data is older than the server data
|
96
|
+
@sync = false
|
97
|
+
|
98
|
+
## the @is_valid flag is lowered, when the client data is newer than the server data
|
99
|
+
@is_valid = true
|
100
|
+
|
101
|
+
## Bind the value to the value manager and report it to the client
|
102
|
+
add( msg )
|
103
|
+
|
104
|
+
## storage for validator bindings
|
105
|
+
@members = {}
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
# Binds the value to a responder. The responder is an instance of {Plugins::Plugin__ Plugin} or {Plugins::GUIPlugin__ GUIPlugin}.
|
110
|
+
# Responders are called once, when the client requests the data to be changed.
|
111
|
+
# Responders must return +true+, if they accept the change. Otherwise the data is treated as invalid.
|
112
|
+
# Responders must respond to exactly two parameters: ( (Message) +msg+, (HValue) +value+ )
|
113
|
+
#
|
114
|
+
# @param [Symbol] plugin_name The name of the registered plugin to call with the +method_name+
|
115
|
+
# @param [Symbol] method_name The name of the method of the registered plugin +plugin_name+ to call.
|
116
|
+
# @return [true]
|
117
|
+
def bind( plugin_name, method_name )
|
118
|
+
plugin_name = plugin_name.to_sym unless plugin_name.class == Symbol
|
119
|
+
method_name = method_name.to_sym unless method_name.class == Symbol
|
120
|
+
@members[plugin_name] = [] unless @members.has_key?( plugin_name )
|
121
|
+
@members[plugin_name].push( method_name ) unless @members[plugin_name].include?( method_name )
|
122
|
+
return true
|
123
|
+
end
|
124
|
+
|
125
|
+
# Releases the responder of the value, both params as in bind, but optional +method_name+ can be omitted, matching all methods bound to the +plugin_name+.
|
126
|
+
# @param [Symbol] plugin_name The name of the plugin acting as a responder to the value.
|
127
|
+
# @param [Symbol] method_name The name of the method of the plugin acting as a responder to the value.
|
128
|
+
# @return [Boolean] Returns true, if successful, false if not bound or other error.
|
129
|
+
def release( plugin_name=false, method_name=false )
|
130
|
+
plugin_name = plugin_name.to_sym if plugin_name.class == String
|
131
|
+
method_name = method_name.to_sym if method_name.class == String
|
132
|
+
return release_all if not plugin_name and not method_name
|
133
|
+
return false unless @members.has_key?( plugin_name )
|
134
|
+
if not method_name
|
135
|
+
@members.delete( plugin_name )
|
136
|
+
else
|
137
|
+
@members[plugin_name].slice!(@members[plugin_name].index( method_name )) if @members[plugin_name].include?(method_name)
|
138
|
+
end
|
139
|
+
return true
|
140
|
+
end
|
141
|
+
|
142
|
+
# Releases all responders.
|
143
|
+
# @return [true]
|
144
|
+
def release_all
|
145
|
+
@members = {}
|
146
|
+
return true
|
147
|
+
end
|
148
|
+
|
149
|
+
# @deprecated Use {#release} as the opposite to bind.
|
150
|
+
alias unbind release
|
151
|
+
|
152
|
+
# @private Tell all bound instances that the value is changed.
|
153
|
+
def tell( msg )
|
154
|
+
invalid_count = 0
|
155
|
+
@members.each_key do |plugin_name|
|
156
|
+
@members[plugin_name].each do |method_name|
|
157
|
+
invalid_count += 1 unless msg.plugins.run_plugin( plugin_name, method_name, msg, self )
|
158
|
+
end
|
159
|
+
end
|
160
|
+
if invalid_count == 0
|
161
|
+
@is_valid = true
|
162
|
+
msg.session[:values][:check].delete( @value_id )
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# @private Handle updates from the client.
|
167
|
+
def from_client( msg, data )
|
168
|
+
|
169
|
+
# only process changes, if different from the one already stored.
|
170
|
+
if @data != data
|
171
|
+
|
172
|
+
## set takes care of the setting..
|
173
|
+
@data = data
|
174
|
+
|
175
|
+
## change the valid state, because the value was set by the client!
|
176
|
+
@is_valid = false
|
177
|
+
|
178
|
+
## add the id to the values to be checked
|
179
|
+
check_ids = msg.session[:values][:check]
|
180
|
+
unless check_ids.include?( @value_id )
|
181
|
+
check_ids.push( @value_id )
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
# @private Adds the value to the sync array.
|
188
|
+
def add_to_sync( msg )
|
189
|
+
## add the id to the values to be synchronized (to client)
|
190
|
+
sync_ids = msg.session[:values][:sync]
|
191
|
+
unless sync_ids.include?( @value_id )
|
192
|
+
sync_ids.push( @value_id )
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# Sets the data of the value, the change will be synced with the client.
|
197
|
+
# @param [Message] msg The {Message} instance.
|
198
|
+
# @param [#to_json] data Any data that can be mapped to JSON and handled by the client.
|
199
|
+
# @param [Boolean] dont_tell_client Doesn't notify the client about the change, if true.
|
200
|
+
def set( msg, data, dont_tell_client=false )
|
201
|
+
|
202
|
+
@data = data
|
203
|
+
|
204
|
+
# won't tell the client about the change, usually not needed
|
205
|
+
unless dont_tell_client
|
206
|
+
## update the flags
|
207
|
+
@sync = false
|
208
|
+
@is_valid = true
|
209
|
+
|
210
|
+
add_to_sync( msg )
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
# @private Tell the client that the value changed.
|
215
|
+
def to_client( msg )
|
216
|
+
if @is_new_to_client
|
217
|
+
## Initialize a new client value
|
218
|
+
init_str = "COMM.Values.create(#{@value_id.to_json},#{@data.to_json});"
|
219
|
+
msg.reply_value( init_str )
|
220
|
+
@is_new_to_client = false
|
221
|
+
else
|
222
|
+
## Sets the client value
|
223
|
+
msg.reply_value "HVM.s(#{@value_id.to_json},#{@data.to_json});"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
# Destructor method. If msg is supplied, deletes the client representation too.
|
228
|
+
# @param [false, Message] A {Message} instance. When supplied, deletes the client representation.
|
229
|
+
def die!( msg=false )
|
230
|
+
|
231
|
+
release_all
|
232
|
+
|
233
|
+
# get the value storage from the session data
|
234
|
+
session_values = msg.session[:values][:by_id]
|
235
|
+
|
236
|
+
## Store the object here
|
237
|
+
session_values.delete( @value_id )
|
238
|
+
|
239
|
+
if msg and not @is_new_to_client
|
240
|
+
msg.reply_value("HVM.del(#{@value_id.to_json});")
|
241
|
+
end
|
242
|
+
end
|
243
|
+
alias die die!
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
=begin
|
249
|
+
class UploadValue < HValue
|
250
|
+
|
251
|
+
@state_responders = {
|
252
|
+
:ready => [], # id == 0
|
253
|
+
:started => [], # id == 1
|
254
|
+
:process => [], # id == 2 ; also uses bind
|
255
|
+
3 => [], # id == 3
|
256
|
+
4 => [], # id == 4
|
257
|
+
:error => [] # id < 0
|
258
|
+
}
|
259
|
+
|
260
|
+
@upload_state = 0
|
261
|
+
@upload_key = ''
|
262
|
+
@uploads = []
|
263
|
+
|
264
|
+
# the data should contain both state and key in the value
|
265
|
+
def from_client( msg, data )
|
266
|
+
|
267
|
+
## change the valid state, because the value was set by the client!
|
268
|
+
@is_valid = data.include?(':::')
|
269
|
+
|
270
|
+
# the state and key are separated by the ':::' delimiter string
|
271
|
+
if @is_valid
|
272
|
+
|
273
|
+
# split state and key using the delimiter
|
274
|
+
(upload_state, upload_key) = data.split(':::')
|
275
|
+
|
276
|
+
# the state is a number
|
277
|
+
upload_state = upload_state.to_i
|
278
|
+
|
279
|
+
@upload_state = upload_state
|
280
|
+
@upload_key = upload_key
|
281
|
+
|
282
|
+
# negative states are errors
|
283
|
+
if upload_state < 0
|
284
|
+
# "upload error: #{upload_state}"
|
285
|
+
# (parse the error)
|
286
|
+
unless @state_responders[:error].empty?
|
287
|
+
@state_responders[:error].each do |plugin_name,method_name|
|
288
|
+
msg.run( plugin_name,method_name,msg,self,upload_state )
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
# the default state, 0 means the UI is ready to send an
|
293
|
+
# upload and ticketserve is ready to receive it
|
294
|
+
elsif upload_state == 0
|
295
|
+
# "upload state: ready to upload."
|
296
|
+
# (do nothing)
|
297
|
+
|
298
|
+
unless @state_responders[:ready].empty?
|
299
|
+
@state_responders[:ready].each do |plugin_name,method_name|
|
300
|
+
msg.run( plugin_name,method_name,msg,self,upload_state )
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
# this state means the upload's transfer is started and progressing
|
305
|
+
elsif upload_state == 1
|
306
|
+
# "upload state: upload started."
|
307
|
+
# (show progress bar)
|
308
|
+
|
309
|
+
unless @state_responders[:started].empty?
|
310
|
+
@state_responders[:started].each do |plugin_name,method_name|
|
311
|
+
msg.run( plugin_name,method_name,msg,self,upload_state )
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
# this state means the upload's transfer is complete,
|
316
|
+
# but the uploaded data hasn't been handled yet.
|
317
|
+
elsif upload_state == 2
|
318
|
+
# "upload state: waiting to process."
|
319
|
+
|
320
|
+
uploads = msg.plugins[:ticketservices].get_uploads(upload_key,true)
|
321
|
+
if uploads.size == 1
|
322
|
+
uploaded_data = uploads[0]
|
323
|
+
|
324
|
+
# only process changes, if different from the one already stored.
|
325
|
+
if uploaded_data != @data
|
326
|
+
|
327
|
+
@data = uploaded_data
|
328
|
+
|
329
|
+
## add the id to the values to be checked
|
330
|
+
check_ids = msg.session[:values][:check]
|
331
|
+
unless check_ids.include?( @value_id )
|
332
|
+
check_ids.push( @value_id )
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
msg.plugins[:ticketservices].del_uploads(upload_key,msg.ses_id)
|
337
|
+
else
|
338
|
+
# "upload, amount of uploads: #{uploads.size}"
|
339
|
+
end
|
340
|
+
|
341
|
+
#
|
342
|
+
hvalue.set(msg,"3:::#{upload_key}")
|
343
|
+
|
344
|
+
msg.console( "upload state: set to ack" )
|
345
|
+
|
346
|
+
elsif upload_state == 3
|
347
|
+
# "upload state: waiting for user ack."
|
348
|
+
# (do nothing)
|
349
|
+
|
350
|
+
msg.console( "upload state: waiting user ack" )
|
351
|
+
|
352
|
+
|
353
|
+
elsif upload_state == 4
|
354
|
+
# "upload state: user wants to upload again."
|
355
|
+
# (set a new upload key, )
|
356
|
+
|
357
|
+
msg.console( "upload state: ack, getting new key" )
|
358
|
+
|
359
|
+
|
360
|
+
setup_upload( msg, hvalue )
|
361
|
+
|
362
|
+
|
363
|
+
else
|
364
|
+
# "upload unknown state: #{upload_state.inspect}"
|
365
|
+
end
|
366
|
+
end
|
367
|
+
return true
|
368
|
+
end
|
369
|
+
def setup_upload(msg,hvalue,size_bytes=500*1024,accept_mime=/image\/(.*?)/,allow_multi=false)
|
370
|
+
upload_key = msg.plugins[:ticketservices].upload_key(msg,hvalue.val_id,size_bytes,accept_mime,allow_multi)
|
371
|
+
hvalue.set( msg, upload_key )
|
372
|
+
end
|
373
|
+
end
|
374
|
+
=end
|
375
|
+
|
376
|
+
end
|
377
|
+
|
378
|
+
|
@@ -0,0 +1,172 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2006 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
# Require needed value types (hvalue supports bool/float/int/string)
|
12
|
+
require 'values/hvalue'
|
13
|
+
|
14
|
+
# RandomGenerator produces unique, random values
|
15
|
+
require 'randgen'
|
16
|
+
|
17
|
+
module RSence
|
18
|
+
|
19
|
+
# @private ValueManager provides automatic, transparent synchronization of values
|
20
|
+
# between client and server by keeping track of session value ids that
|
21
|
+
# need to be synchronized to the client and to pass on the incoming data
|
22
|
+
# for validation.
|
23
|
+
class ValueManager
|
24
|
+
|
25
|
+
# @private Accessor for the {RandGen} instance used.
|
26
|
+
# @return [RandGen]
|
27
|
+
attr_accessor :randgen
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
# Initializes the member value handler objects.
|
31
|
+
@config = RSence.config[:session_conf]
|
32
|
+
|
33
|
+
## 'Unique' Random String generator for HValue keys (passed on to the client)
|
34
|
+
@randgen = RandGen.new( @config[:key_length] )
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
# @private Re-constructs all stored values and sends them to the client.
|
39
|
+
# Used for restoring and cloning session values.
|
40
|
+
def resend_session_values( msg )
|
41
|
+
|
42
|
+
# with disposable keys enabled,
|
43
|
+
# sessions restored from cookie_key replace
|
44
|
+
# all val_id:s with new ones
|
45
|
+
if @config[:disposable_keys]
|
46
|
+
|
47
|
+
# get the session values
|
48
|
+
ses_values = msg.session[:values]
|
49
|
+
|
50
|
+
# loop through the value id:s
|
51
|
+
old_ids = ses_values[:by_id].keys
|
52
|
+
old_ids.each do |old_id|
|
53
|
+
|
54
|
+
# get the hvalue
|
55
|
+
val_obj = ses_values[:by_id][old_id]
|
56
|
+
|
57
|
+
# make a new id
|
58
|
+
unless RSence.args[:debug] and val_obj.meta[:name]
|
59
|
+
new_id = @randgen.gen
|
60
|
+
new_id = @randgen.gen while id_exists?( msg, new_id )
|
61
|
+
|
62
|
+
# replace the old id in the hvalue itself
|
63
|
+
val_obj.val_id = new_id
|
64
|
+
|
65
|
+
# re-associate the value with the new id
|
66
|
+
ses_values[:by_id][new_id] = val_obj
|
67
|
+
ses_values[:by_id].delete(old_id)
|
68
|
+
|
69
|
+
# replace the id in the unvalidated values (:check) array
|
70
|
+
if ses_values[:check].include?(old_id)
|
71
|
+
old_idx = ses_values[:check].index(old_id)
|
72
|
+
ses_values[:check][old_idx] = new_id
|
73
|
+
end
|
74
|
+
|
75
|
+
# replace the id in the unsynchronized values (:sync) array
|
76
|
+
if ses_values[:sync].include?(old_id)
|
77
|
+
old_idx = ses_values[:sync].index(old_id)
|
78
|
+
ses_values[:sync][old_idx] = new_id
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
# tell the hvalue to send its client-side initialization
|
84
|
+
val_obj.restore( msg )
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
## keeping the id:s between page reloads is faster, but less tamper-proof
|
89
|
+
else
|
90
|
+
msg.session[:values][:by_id].each_key do |val_id|
|
91
|
+
msg.session[:values][:by_id][val_id].restore( msg )
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
# @private Verifies new_id is unique.
|
98
|
+
def id_exists?( msg, new_id )
|
99
|
+
return msg.session[:values][:by_id].has_key?(new_id)
|
100
|
+
end
|
101
|
+
|
102
|
+
# @private Parses the json from the client and passes it on to associated values
|
103
|
+
def xhr( msg, syncdata_str )
|
104
|
+
|
105
|
+
# parses the json data sent by the client
|
106
|
+
syncdata = JSON.parse( syncdata_str )
|
107
|
+
|
108
|
+
session_values = msg.session[:values][:by_id]
|
109
|
+
syncdata.each do |value_key, value_data|
|
110
|
+
if session_values.has_key?( value_key )
|
111
|
+
value_obj = session_values[ value_key ]
|
112
|
+
value_obj.from_client( msg, value_data )
|
113
|
+
else
|
114
|
+
raise "HValue; unassigned value id! (#{val_id.inspect})"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# @private Sets a value by id
|
120
|
+
def set( msg, val_id, val_data )
|
121
|
+
|
122
|
+
# get the session data of this session
|
123
|
+
session_values = msg.session[:values][:by_id]
|
124
|
+
|
125
|
+
# tell the value of that id that it has new data
|
126
|
+
val_obj = session_values[ val_id ]
|
127
|
+
val_obj.set( msg, val_data )
|
128
|
+
end
|
129
|
+
|
130
|
+
# @private Validates the new data of all client-side-modified session-bound values
|
131
|
+
def validate( msg )
|
132
|
+
|
133
|
+
# get the session data of this session
|
134
|
+
session_values = msg.session[:values]
|
135
|
+
|
136
|
+
# loop through un-validated values and validate them
|
137
|
+
check_ids = session_values[:check]
|
138
|
+
check_ids.clone.each do |check_id|
|
139
|
+
session_values[:by_id][check_id].tell( msg )
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
# @private Sends the new data of all server-side-modified session-bound values to the client
|
145
|
+
def sync_client( msg )
|
146
|
+
|
147
|
+
# get the session data of this session
|
148
|
+
session_values = msg.session[:values]
|
149
|
+
|
150
|
+
# go through the currently un-synced values
|
151
|
+
session_values[:sync].size.times do |count_num|
|
152
|
+
|
153
|
+
# the sync-array will return the value id
|
154
|
+
val_id = session_values[:sync].shift
|
155
|
+
|
156
|
+
unless session_values[:by_id].has_key? val_id
|
157
|
+
warn "ValueManager#sync_client -- Invalid value id: #{val_id.inspect}"
|
158
|
+
next
|
159
|
+
end
|
160
|
+
|
161
|
+
# tell the value of that id to report its state to the client
|
162
|
+
session_values[:by_id][val_id].to_client( msg )
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
end
|
172
|
+
|
@@ -0,0 +1,157 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2007 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
# the library path of this plugin
|
11
|
+
lib_path = File.join( bundle_path, 'lib' )
|
12
|
+
|
13
|
+
# The ClientPkgCache class:
|
14
|
+
require File.join( lib_path, 'client_pkg_cache' )
|
15
|
+
|
16
|
+
# The ClientPkgServe module:
|
17
|
+
require File.join( lib_path, 'client_pkg_serve' )
|
18
|
+
|
19
|
+
# The ClientPkgBuild class:
|
20
|
+
require File.join( lib_path, 'client_pkg_build' )
|
21
|
+
|
22
|
+
|
23
|
+
# @private The ClientPkgPlugin builds and serves the client packages. It's not intended to be a part of the public API at this time.
|
24
|
+
class ClientPkgPlugin < Servlet
|
25
|
+
|
26
|
+
include ClientPkgServe
|
27
|
+
|
28
|
+
class BuildLogger
|
29
|
+
def initialize( log_path )
|
30
|
+
@last_time = Time.now
|
31
|
+
@log_path = log_path
|
32
|
+
@log_file = nil
|
33
|
+
end
|
34
|
+
def log( str )
|
35
|
+
if RSence.args[:verbose]
|
36
|
+
puts str
|
37
|
+
return
|
38
|
+
else
|
39
|
+
if @last_time < Time.now - 30
|
40
|
+
@last_time = Time.now
|
41
|
+
@log_file.write( %{--- #{@last_time.strftime("%Y-%m-%d %H:%M:%S")} ---\n} )
|
42
|
+
end
|
43
|
+
@log_file.write( "#{str}\n" )
|
44
|
+
@log_file.flush
|
45
|
+
end
|
46
|
+
end
|
47
|
+
def open
|
48
|
+
return if @log_file
|
49
|
+
@log_file = File.open( @log_path, 'a' )
|
50
|
+
end
|
51
|
+
def close
|
52
|
+
@log_file.close
|
53
|
+
@log_file = nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def rebuild_client
|
58
|
+
until not @build_busy
|
59
|
+
puts "build busy, sleeping.."
|
60
|
+
sleep 0.5
|
61
|
+
end
|
62
|
+
@build_busy = true
|
63
|
+
@last_change = Time.now.to_i
|
64
|
+
@client_build.setup_dirs
|
65
|
+
@client_build.run
|
66
|
+
@client_cache.set_cache( @client_build.js, @client_build.gz, @client_build.themes )
|
67
|
+
@build_busy = false
|
68
|
+
end
|
69
|
+
|
70
|
+
def open
|
71
|
+
if not @thr and RSence.args[:autoupdate]
|
72
|
+
@thr = Thread.new do
|
73
|
+
Thread.pass
|
74
|
+
while true
|
75
|
+
begin
|
76
|
+
if @client_build.bundle_changes( @last_change )
|
77
|
+
rebuild_client
|
78
|
+
puts "Autobuilt."
|
79
|
+
if RSence.args[:say]
|
80
|
+
Thread.new do
|
81
|
+
Thread.pass
|
82
|
+
system('say "Autobuilt."')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
rescue => e
|
87
|
+
warn e.inspect
|
88
|
+
end
|
89
|
+
sleep 3
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
def add_src_dir( src_dir ); @client_build.add_src_dir( src_dir ); end
|
97
|
+
def add_src_dirs( src_dirs ); @client_build.add_src_dirs( src_dirs ); end
|
98
|
+
def del_src_dir( src_dir ); @client_build.del_src_dir( src_dir ); end
|
99
|
+
def del_src_dirs( src_dirs ); @client_build.del_src_dirs( src_dirs ); end
|
100
|
+
|
101
|
+
def add_theme( theme_name ); @client_build.add_theme( theme_name ); end
|
102
|
+
def add_themes( theme_names ); @client_build.add_themes( theme_names ); end
|
103
|
+
def del_theme( theme_name ); @client_build.del_theme( theme_name ); end
|
104
|
+
def del_themes( theme_names ); @client_build.del_themes( theme_names ); end
|
105
|
+
|
106
|
+
def add_package( pkg_name, pkg_items ); @client_build.add_package( pkg_name, pkg_items ); end
|
107
|
+
def add_packages( packages ); @client_build.add_packages( packages ); end
|
108
|
+
def del_package( pkg_name ); @client_build.del_package( pkg_name ); end
|
109
|
+
def del_packages( packages ); @client_build.del_packages( packages ); end
|
110
|
+
|
111
|
+
def add_reserved_name( reserved_name ); @client_build.add_reserved_name( reserved_name ); end
|
112
|
+
def add_reserved_names( reserved_names ); @client_build.add_reserved_names( reserved_names ); end
|
113
|
+
def del_reserved_name( reserved_name ); @client_build.del_reserved_name( reserved_name ); end
|
114
|
+
def del_reserved_names( reserved_names ); @client_build.del_reserved_names( reserved_names ); end
|
115
|
+
|
116
|
+
def add_gfx_format( gfx_format_name ); @client_build.add_gfx_format( gfx_format_name ); end
|
117
|
+
def add_gfx_formats( gfx_format_names ); @client_build.add_gfx_formats( gfx_format_names ); end
|
118
|
+
def del_gfx_format( gfx_format_name ); @client_build.del_gfx_format( gfx_format_name ); end
|
119
|
+
def del_gfx_formats( gfx_format_names ); @client_build.del_gfx_formats( gfx_format_names ); end
|
120
|
+
|
121
|
+
def client_build; @client_build; end
|
122
|
+
|
123
|
+
def client_cache; @client_cache; end
|
124
|
+
|
125
|
+
def close
|
126
|
+
if @thr
|
127
|
+
@thr.kill
|
128
|
+
@thr = false
|
129
|
+
end
|
130
|
+
@client_build.flush
|
131
|
+
@client_build = nil
|
132
|
+
@client_cache = nil
|
133
|
+
@build_logger.close
|
134
|
+
end
|
135
|
+
|
136
|
+
def squeeze( js )
|
137
|
+
return @client_build.squeeze( js )
|
138
|
+
end
|
139
|
+
|
140
|
+
def init
|
141
|
+
|
142
|
+
@thr = false
|
143
|
+
|
144
|
+
@build_logger = BuildLogger.new( File.join(RSence.args[:env_path],'log','build_log') )
|
145
|
+
@build_logger.open
|
146
|
+
|
147
|
+
@client_build = ClientPkgBuild.new( RSence.config[:client_pkg], @build_logger )
|
148
|
+
@client_cache = ClientPkgCache.new
|
149
|
+
|
150
|
+
@build_busy = false
|
151
|
+
rebuild_client
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
|