Skip to main content

AS3: Swf Communicator

This class could be used for two-way communication in between parent swf and child swf; where the child swf is loaded inside the parent swf.

SOURCE CODE
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package
{
 import CEvent;
 
 import flash.events.Event;
 import flash.events.IEventDispatcher;
 
 import mx.events.FlexEvent;
 import mx.managers.SystemManager;
 
 import spark.components.Application;
 
 /**
  * @file CSwfCommunicator.as
  * @author Abhishek Kumar
  */
 public class CSwfCommunicator
 {
  public var prepare:Function;
  public var procedure:Function;
  public var proceed:Function;
  
  private var holder:SystemManager;
  
  private var childApp:Application;
  private var childFunc:Function;
  
  public function CSwfCommunicator()
  {
   trace("CSwfCommunicator -> constructor");
  }
  
  public function instantiate(data:*):void
  {
   trace("CSwfCommunicator -> instantiate");
   holder = data as SystemManager;    
   attachListeners(holder);
  }
  
  public function terminate():void
  {
   trace("CSwfCommunicator -> terminate");
   terminateChildApp();
   holder = null;
  }
  
  private function attachListeners(dispatcher:IEventDispatcher):void
  {
   trace("CSwfCommunicator -> attachListeners");
   dispatcher.addEventListener(FlexEvent.APPLICATION_COMPLETE, applicationCompleteHandler);
  }
  
  private function detachListeners(dispatcher:IEventDispatcher):void
  {
   trace("CSwfCommunicator -> detachListeners");
   dispatcher.removeEventListener(FlexEvent.APPLICATION_COMPLETE, applicationCompleteHandler);
  }
  
  private function applicationCompleteHandler(event:FlexEvent):void
  {
   trace("CSwfCommunicator -> applicationCompleteHandler:", event);
   detachListeners(holder);
   initializeChildApp(holder.application);
   if(prepare != null) 
    prepare(holder.application);
  }
  
  // Child App
  
  public function initializeChildApp(data:*):void
  {
   trace("CSwfCommunicator -> initializeChildApp");
   childApp = Application(data);
   attachListeners_childApp(childApp);
  }
  
  public function terminateChildApp():void
  {
   trace("CSwfCommunicator -> terminateChildApp");
   detachListeners_childApp(childApp);
   childApp = null;
  }
  
  private function attachListeners_childApp(dispatcher:IEventDispatcher):void
  {
   trace("CSwfCommunicator -> attachListeners_childApp");
   dispatcher.addEventListener(CEvent.CALL_PARENT_METHOD, callParentMethodHandler);
  }
  
  private function detachListeners_childApp(dispatcher:IEventDispatcher):void
  {
   trace("CSwfCommunicator -> detachListeners_childApp");
   dispatcher.removeEventListener(CEvent.CALL_PARENT_METHOD, callParentMethodHandler);
  }
  
  // Comunicators ... for parent
  
  private function callParentMethodHandler(e:CEvent):void
  {
   trace("CSwfCommunicator -> callParentMethodHandler:", e);
   var o:Object = e.data;
   //trace("CSwfCommunicator -> callParentMethodHandler:", o.method, o.args, o.revert);   
   if(o.revert != null)
   {
    if(procedure != null) 
     callChildMethod(o.revert, procedure(o.method, o.args));
   }
   else
   {
    if(proceed != null) 
     proceed(o.method, o.args);
   }
  }
  
  public function callChildMethod(method:String, args:Object):Object
  {  
   trace("CSwfCommunicator -> callChildMethod:", method, args);
   if (childApp.hasOwnProperty(method))
   {
    childFunc = childApp[method] as Function;
    return childFunc(args);
   }
   return null;
  }
  
  /*
  // Comunicators ... for child
  public function callParentMethod(method:String, param:Object, ack:String):void
  {
   trace("CSwfCommunicator -> callParentMethod:", method, param, ack);
   var o:Object = {
    method: method, 
    args: param, 
    revert: ack
   };
   dispatchEvent(new CEvent(CEvent.CALL_PARENT_METHOD, o));
  }
  */
 }
}

USAGE (Parent)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private function onLoad_ChildSwf():void
{
 var sc:CSwfCommunicator = new CSwfCommunicator();
 sc.procedure = commander1;
 sc.proceed = commander2;
 sc.instantiate(swfholder_sl.content);
}

private function commander1(method:String, o:Object):Object
{
 trace('commander1', method, o);
 var ack:Object = {};
 switch(method)
 {
  case 'foo': ack.text = JSON.encode(o);
   break;
 }
 return ack;
}

private function commander2(method:String, o:Object):void
{
 trace('commander2', method, o);
 switch(method)
 {
  case 'foo': display_lbl.text = JSON.encode(o);
   break;
 }
}

USAGE (Child)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import CEvent;
import CSwfCommunicator;

// Important Method
public function callParentMethod(method:String, param:Object, ack:String):void
{
 trace("callParentMethod:", method, param, ack);
 var o:Object = {
  method: method, 
  args: param, 
  revert: ack
 };
 dispatchEvent(new CEvent(CEvent.CALL_PARENT_METHOD, o));
}

protected function btn_clickHandler(event:MouseEvent):void
{
 callParentMethod('foo', {a:1, b:2}, 'acknowledge');
}

public function acknowledge(o:Object):void
{
 display_tb.text = o.text;
}

Comments

Popular posts from this blog

Unlock protected blocks in Siemens SIMATIC Step 7

Recently I'd been called by Hindalco's Fabrication Plant division to unlock the protected blocks in Siemens SIMATIC Step 7. They were in need to unlock those blocks since an year because of 1 million Rupees of loss per month. They want to re-program those blocks but it was locked by the man who'd done the setup. From the people working in that department, I came to know that they were trying to call that man (someone from Italy) right here but he's not coming. Actually, what he'd done was that he'd locked some of the blocks and deleted the source file. And Siemens didn't provide any feature to unlock. Department people also told me that even the people working in Siemens don't know how to do it. Being a software engineer I know that any thing can be reverse engineered. So I took up the challenge. How did I unlocked the blocks? The first thing I'd done was searched about this software at Google and read about what is this software all about. Aft...

Launching a Jupyter Notebook with TensorFlow using Docker

This article will walk you through setting up a Jupyter Notebook environment with TensorFlow pre-installed using Docker. Docker allows you to run isolated containerized applications, providing a consistent environment regardless of your underlying operating system. Prerequisites: Docker: Ensure you have Docker installed and running on your system. You can download and install it from the official Docker website ( https://www.docker.com/ ). Steps: Start Docker: Open your Docker application (Docker Desktop for Windows/macOS or the command line if using Linux). Run the Jupyter Notebook container: For macOS/Linux: Open your terminal application and run the following command: docker run -it --rm -p 8888:8888 -v "${PWD}":/home/jovyan/work jupyter/tensorflow-notebook For Windows: Open your Command Prompt application and run the following command: docker run -it --rm -p 8888:8888 -v "%CD%":/home/jovyan/work jupyter/tensorflow-notebook Explanation of the command flags: -...

JS: The complete code example of Crypto.js (DES)

For one of the project I was trying to use crypto.js but I found that the Quick-start Guide have some deficiency in terms of library usage. So I am writing it here as a useful note for memory recap. <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/tripledes.js"></script> <script> var encrypted = CryptoJS.DES.encrypt("The secret message", "secret_key"); var e_msg = encrypted.toString(); console.log(e_msg); var decrypted = CryptoJS.DES.decrypt(e_msg, "secret_key"); var d_msg = decrypted.toString(CryptoJS.enc.Utf8); console.log(d_msg); </script>