rails_generators/rx_config/templates/mainapp.mxml in restfulx-1.2.1 vs rails_generators/rx_config/templates/mainapp.mxml in restfulx-1.2.2
- old
+ new
@@ -4,28 +4,126 @@
paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8"
layout="horizontal" styleName="plain" initialize="init()">
<mx:Script>
<![CDATA[
<% if use_air -%>
+<% if distributed -%>
+ import air.net.SocketMonitor;
+ import org.restfulx.events.PullEndEvent;
+ import org.restfulx.events.PullStartEvent;
+ import org.restfulx.events.PushEndEvent;
+ import org.restfulx.events.PushStartEvent;
+ import org.restfulx.controllers.ChangeController;
+ import org.restfulx.services.ISyncingServiceProvider;
+ import org.restfulx.services.http.XMLHTTPServiceProvider;
+<% end -%>
import org.restfulx.services.air.AIRServiceProvider;
<% end -%>
import org.restfulx.Rx;
import <%= base_package %>.controllers.<%= command_controller_name %>;
+<% if use_air -%>
+<% if distributed -%>
+ [Bindable]
+ private var socketMonitor:SocketMonitor;
+
+ [Bindable]
+ private var online:Boolean;
+
+ [Bindable]
+ private var syncStatus:String;
+<% end -%>
+<% end -%>
+
private function init():void {
<% if use_air -%>
- <%= command_controller_name %>.initialize([AIRServiceProvider], AIRServiceProvider.ID, "<%= base_package %>");
+<% if distributed -%>
+ Rx.httpRootUrl = "http://localhost:3000/";
+ Rx.enableSync = true;
+
+ socketMonitor = new SocketMonitor("localhost", 3000);
+ socketMonitor.pollInterval = 2000; /* miliseconds */
+ socketMonitor.addEventListener(StatusEvent.STATUS, onNetworkStatusChange);
+ socketMonitor.start();
+
+<% end -%>
+ <%= command_controller_name %>.initialize([AIRServiceProvider],
+ AIRServiceProvider.ID, "<%= base_package %>");
+<% if distributed -%>
+
+ Rx.changes.setSyncProviders(
+ ISyncingServiceProvider(Rx.services.getServiceProvider(AIRServiceProvider.ID)),
+ Rx.services.getServiceProvider(XMLHTTPServiceProvider.ID));
+
+ Rx.changes.addEventListener(PushStartEvent.ID, onPushStart);
+ Rx.changes.addEventListener(PushEndEvent.ID, onPushEnd);
+ Rx.changes.addEventListener(PullStartEvent.ID, onPullStart);
+ Rx.changes.addEventListener(PullEndEvent.ID, onPullEnd);
+<% end -%>
<% else -%>
<%= command_controller_name %>.initialize();
<% end -%>
}
+<% if use_air -%>
+<% if distributed -%>
+
+ private function onPushStart(event:Event):void {
+ syncStatus = "Pushing changes ...";
+ }
+
+ private function onPushEnd(event:Event):void {
+ syncStatus = "Push complete.";
+ }
+
+ private function onPullStart(event:Event):void {
+ syncStatus = "Pulling data...";
+ }
+
+ private function onPullEnd(event:Event):void {
+ syncStatus = "Pull complete.";
+ }
+
+ private function onNetworkStatusChange(event:StatusEvent):void {
+ online = (socketMonitor.available) ? true : false;
+
+ if (online) {
+ Rx.defaultServiceId = XMLHTTPServiceProvider.ID;
+ } else {
+ Rx.defaultServiceId = AIRServiceProvider.ID;
+ }
+ }
+
+ private function getCurrentProviderName(id:int):String {
+ switch (id) {
+ case XMLHTTPServiceProvider.ID:
+ return "Rails";
+ case AIRServiceProvider.ID:
+ return "AIR (SQLite)";
+ default :
+ return "No idea";
+ }
+ }
+<% end -%>
+<% end -%>
]]>
</mx:Script>
+<% if use_air -%>
+<% if distributed -%>
+ <mx:VBox height="100%">
+ <mx:Label text="Current Provider: {getCurrentProviderName(Rx.defaultServiceId)}"/>
+ <mx:Label text="Status: {online ? 'Online' : 'Offline' }"/>
+ <mx:HBox>
+ <mx:Button label="Push" click="{Rx.changes.push()}" enabled="{online}"/>
+ <mx:Button label="Pull" click="{Rx.changes.pull()}" enabled="{online}"/>
+ </mx:HBox>
+ <mx:Label text="{syncStatus}"/>
+ </mx:VBox>
+<% end -%>
+<% end -%>
<mx:LinkBar dataProvider="{mainViewStack}" direction="vertical" borderStyle="solid" backgroundColor="#EEEEEE"/>
<mx:ViewStack id="mainViewStack" width="100%" height="100%">
<!-- For a simple demo, put all the components here. -->
<% for component in component_names -%>
<generated:<%= component %>/>
<% end -%>
</mx:ViewStack>
</mx:<%= application_tag %>>
-