Guest User

Untitled

a guest
Jun 19th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. package org.robotlegs.utilities.remote {
  2. import flash.events.NetStatusEvent;
  3. import flash.events.SecurityErrorEvent;
  4. import flash.net.NetConnection;
  5. import flash.net.ObjectEncoding;
  6. import flash.net.Responder;
  7. import flash.utils.Dictionary;
  8.  
  9. public class NetConnectionServiceBase implements INetConnectionService {
  10.  
  11. protected var netConnections:Dictionary;
  12. protected var promises:Array;
  13.  
  14. public function NetConnectionServiceBase() {
  15. netConnections = new Dictionary();
  16. promises = []
  17. }
  18.  
  19. public function call(gatewayUrl:String, remoteMethod:String, ...rest):Promise {
  20. var nc:NetConnection = getNetConnection(gatewayUrl);
  21. var p:Promise = request(nc, remoteMethod, rest);
  22. nc.addEventListener(NetStatusEvent.NET_STATUS, createHandler(handleNetStatus,p), false, 0, true);
  23. nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, createHandler(handleSecurityError,p), false, 0, true);
  24. return p;
  25. }
  26.  
  27. private function getNetConnection(gatewayUrl:String):NetConnection {
  28. if(netConnections[gatewayUrl])
  29. return netConnections[gatewayUrl];
  30. else {
  31. var nc:NetConnection = new NetConnection();
  32. nc.objectEncoding = ObjectEncoding.AMF3;
  33. nc.connect(gatewayUrl);
  34. netConnections[gatewayUrl] = nc;
  35. return nc;
  36. }
  37. }
  38.  
  39. public function closeConnection(gatewayUrl:String) : void {
  40. if(netConnections[gatewayUrl]) {
  41. (netConnections[gatewayUrl] as NetConnection).close();
  42. delete netConnections[gatewayUrl];
  43. }
  44. }
  45.  
  46. protected function request(nc:NetConnection, rm:String, params:Array):Promise {
  47. var p:Promise = new Promise;
  48.  
  49. var res:Responder = new Responder(createHandler(handleComplete, p), createHandler(handleIoError, p));
  50. nc.call.apply(this, [rm, res].concat(params));
  51.  
  52. promises.push(p);
  53. return p;
  54. }
  55.  
  56. protected function releasePromise(promise:Promise):void {
  57. var index:int = promises.indexOf(promise);
  58. if (index != -1) {
  59. promises.splice(index, 1);
  60. }
  61. }
  62.  
  63.  
  64. /* ----------- HANDLERS ----------- */
  65.  
  66. private function handleNetStatus(e:Object, promise:Promise):void {
  67. switch (e.info.code) {
  68. case "NetConnection.Call.Failed":
  69. releasePromise(promise);
  70. promise.handleFault({ error: "NetConnection Error", message: 'NetConnection call failed' });
  71. break;
  72. case "NetConnection.Connect.Failed":
  73. releasePromise(promise);
  74. promise.handleFault({ error: "NetConnection Error", message: 'NetConnection connect failed' });
  75. break;
  76. }
  77. }
  78.  
  79. private function handleSecurityError(e:Object, promise:Promise):void {
  80. releasePromise(promise);
  81. promise.handleFault({ error: "Security Error", message: String(e.text) });
  82. }
  83.  
  84. protected function handleIoError(e:Object, promise:Promise):void {
  85. releasePromise(promise);
  86. promise.handleFault({ error: "IO Error", message: String(e.faultString + " ON " + e.faultDetail + " " + e.faultCode) });
  87. }
  88.  
  89. protected function handleComplete(r:Object, promise:Promise):void {
  90. releasePromise(promise);
  91. promise.handleResult( generateObject( r ) );
  92. }
  93. /* ----------- END HANDLERS ----------- */
  94.  
  95. protected function createHandler(listener:Function, promise:Promise):Function {
  96. return function(obj:Object):void {
  97. listener(obj, promise);
  98. }
  99. }
  100.  
  101. protected function generateObject(data:*):Object {
  102. return Object(data);
  103. }
  104. }
  105. }
Add Comment
Please, Sign In to add comment