/ShareSlidesMobileAS/src/com/jxl/shareslidesmobile/rl/models/NetworkModel.as

https://github.com/JesterXL/SharedSlideshow · ActionScript · 224 lines · 184 code · 40 blank · 0 comment · 15 complexity · f9308587120a305eae6dc391f316effc MD5 · raw file

  1. package com.jxl.shareslidesmobile.rl.models
  2. {
  3. import com.jxl.shareslidesmobile.events.controller.SetCurrentSlideEvent;
  4. import com.jxl.shareslidesmobile.events.model.NetworkModelEvent;
  5. import com.jxl.shareslides.vo.SlideshowVO;
  6. import com.projectcocoon.p2p.LocalNetworkDiscovery;
  7. import com.projectcocoon.p2p.events.ClientEvent;
  8. import com.projectcocoon.p2p.events.GroupEvent;
  9. import com.projectcocoon.p2p.events.MessageEvent;
  10. import com.projectcocoon.p2p.events.ObjectEvent;
  11. import com.projectcocoon.p2p.vo.ObjectMetadataVO;
  12. import flash.debugger.enterDebugger;
  13. import flash.events.Event;
  14. import flash.net.NetGroup;
  15. import mx.collections.ArrayCollection;
  16. import org.robotlegs.mvcs.Actor;
  17. public class NetworkModel extends Actor
  18. {
  19. [Inject]
  20. public var localNetworkDiscovery:LocalNetworkDiscovery;
  21. private var _connected:Boolean = false;
  22. public function get connected():Boolean { return _connected; }
  23. public function set connected(value:Boolean):void
  24. {
  25. _connected = value;
  26. if(_connected)
  27. {
  28. dispatch(new NetworkModelEvent(NetworkModelEvent.GROUP_CONNECTED));
  29. }
  30. else
  31. {
  32. dispatch(new NetworkModelEvent(NetworkModelEvent.GROUP_DISCONNECTED));
  33. }
  34. }
  35. public function get clientsConnected():int { return localNetworkDiscovery.clientsConnected; }
  36. public function set clientsConnected(value:int):void
  37. {
  38. }
  39. public function get clients():ArrayCollection { return localNetworkDiscovery.clients; }
  40. public function set clients(value:ArrayCollection):void
  41. {
  42. }
  43. public function NetworkModel()
  44. {
  45. super();
  46. }
  47. [PostConstruct]
  48. public function init():void
  49. {
  50. Debug.log("NetworkModel::init");
  51. localNetworkDiscovery.loopback = false;
  52. localNetworkDiscovery.groupName = "com.jxl.shareslides";
  53. localNetworkDiscovery.addEventListener(GroupEvent.GROUP_CONNECTED, onGroupConnected);
  54. localNetworkDiscovery.addEventListener(GroupEvent.GROUP_CLOSED, onGroupClosed);
  55. localNetworkDiscovery.addEventListener(ObjectEvent.OBJECT_ANNOUNCED, onObjectAnnounced);
  56. localNetworkDiscovery.addEventListener("sharedObjectsChange", onSharedObjectsChanged);
  57. localNetworkDiscovery.addEventListener("receivedObjectsChange", onReceivedObjectsChanged);
  58. localNetworkDiscovery.addEventListener("clientsConnectedChange", onClientsConnectedChanged);
  59. localNetworkDiscovery.addEventListener("clientsChange", onClientsChanged);
  60. localNetworkDiscovery.addEventListener(ClientEvent.CLIENT_ADDED, onClientAdded);
  61. localNetworkDiscovery.addEventListener(ClientEvent.CLIENT_UPDATE, onClientUpdate);
  62. localNetworkDiscovery.addEventListener(MessageEvent.DATA_RECEIVED, onMessageEvent);
  63. localNetworkDiscovery.connect();
  64. }
  65. public function containsSlideshow(slideshowName:String):Boolean
  66. {
  67. if(localNetworkDiscovery.receivedObjects == null)
  68. return false;
  69. var len:int = localNetworkDiscovery.receivedObjects.length;
  70. while(len--)
  71. {
  72. var om:ObjectMetadataVO = localNetworkDiscovery.receivedObjects.getItemAt(len) as ObjectMetadataVO;
  73. if(om.info as String == slideshowName)
  74. {
  75. return true;
  76. }
  77. }
  78. return false;
  79. }
  80. public function getSlideshowByName(slideshowName:String):SlideshowVO
  81. {
  82. if(localNetworkDiscovery.receivedObjects == null)
  83. return null;
  84. var len:int = localNetworkDiscovery.receivedObjects.length;
  85. while(len--)
  86. {
  87. var om:ObjectMetadataVO = localNetworkDiscovery.receivedObjects.getItemAt(len) as ObjectMetadataVO;
  88. if(om.info as String == slideshowName)
  89. {
  90. return om.object as SlideshowVO;
  91. }
  92. }
  93. len = localNetworkDiscovery.sharedObjects.length;
  94. while(len--)
  95. {
  96. var om:ObjectMetadataVO = localNetworkDiscovery.sharedObjects.getItemAt(len) as ObjectMetadataVO;
  97. if(om.info as String == slideshowName)
  98. {
  99. return om.object as SlideshowVO;
  100. }
  101. }
  102. return null;
  103. }
  104. private function onGroupConnected(event:GroupEvent):void
  105. {
  106. Debug.info("NetworkModel::onGroupConnected");
  107. connected = true;
  108. }
  109. private function onGroupClosed(event:GroupEvent):void
  110. {
  111. Debug.error("NetworkModel::onGroupClosed");
  112. connected = false;
  113. }
  114. private function onObjectAnnounced(event:ObjectEvent):void
  115. {
  116. var evt:NetworkModelEvent = new NetworkModelEvent(NetworkModelEvent.OBJECT_ANNOUNCED);
  117. evt.metadata = event.metadata;
  118. dispatch(evt);
  119. }
  120. private function onClientAdded(event:ClientEvent):void
  121. {
  122. Debug.log("NetworkModel::onClientAdded, event.client.clientName: " + event.client.clientName);
  123. if(event.client.isLocal)
  124. return;
  125. var evt:NetworkModelEvent = new NetworkModelEvent(NetworkModelEvent.CLIENT_ADDED);
  126. evt.client = event.client;
  127. dispatch(evt);
  128. }
  129. private function onClientUpdate(event:ClientEvent):void
  130. {
  131. Debug.info("NetworkModel::onClientUpdate, clientName: " + event.client.clientName);
  132. var evt:NetworkModelEvent = new NetworkModelEvent(NetworkModelEvent.CLIENT_UPDATED);
  133. evt.client = event.client;
  134. dispatch(evt);
  135. }
  136. private function onSharedObjectsChanged(event:Event):void
  137. {
  138. Debug.log("NetworkModel::onSharedObjectsChanged, len: " + localNetworkDiscovery.sharedObjects.length);
  139. }
  140. private function onClientsConnectedChanged(event:Event):void
  141. {
  142. Debug.log("NetworkModel::onClientsConnectedChanged");
  143. dispatch(new NetworkModelEvent(NetworkModelEvent.CLIENTS_CONNECTED_CHANGED));
  144. }
  145. private function onClientsChanged(evnet:Event):void
  146. {
  147. Debug.log("NetworkModel::onClientsChanged");
  148. dispatch(new NetworkModelEvent(NetworkModelEvent.CLIENTS_CHANGED));
  149. }
  150. private function onReceivedObjectsChanged(evnet:Event):void
  151. {
  152. Debug.info("NetworkModel::onReceivedObjectsChanged, len: " + localNetworkDiscovery.receivedObjects.length);
  153. dispatch(new NetworkModelEvent(NetworkModelEvent.RECEIVED_OBJECTS_CHANGED));
  154. }
  155. private function onMessageEvent(event:MessageEvent):void
  156. {
  157. Debug.info("NetworkModel::onMessageEvent");
  158. if(event.message.data)
  159. Debug.info("\tmessage: " + event.message.data.message);
  160. var networkModelEvent:NetworkModelEvent;
  161. switch(event.message.data.message)
  162. {
  163. case "setCurrentSlide":
  164. var evt:SetCurrentSlideEvent = new SetCurrentSlideEvent(SetCurrentSlideEvent.HOST_UPDATED_CURRENT_SLIDE);
  165. evt.currentSlide = event.message.data.currentSlide;
  166. dispatch(evt);
  167. break;
  168. case "doYouNeedSlideshow":
  169. networkModelEvent = new NetworkModelEvent(NetworkModelEvent.RECEIVED_REQUEST_SLIDESHOW_MESSAGE);
  170. networkModelEvent.message = event.message;
  171. dispatch(networkModelEvent);
  172. break;
  173. case "doYouNeedSlideshowAck":
  174. if(event.message.data.request == true)
  175. {
  176. networkModelEvent = new NetworkModelEvent(NetworkModelEvent.CLIENT_NEEDS_SLIDESHOW);
  177. networkModelEvent.message = event.message;
  178. dispatch(networkModelEvent);
  179. }
  180. break;
  181. }
  182. }
  183. }
  184. }