topical media & game development

talk show tell print

actionscript-book-IntrovertIM_HTML-com-example-programmingas3-introvertIM-IMManager.ax

actionscript-book-IntrovertIM_HTML-com-example-programmingas3-introvertIM-IMManager.ax [swf] flex


  package 
  {
          import flash.events.EventDispatcher;
          import flash.events.TimerEvent;
          import flash.external.ExternalInterface;
          import flash.utils.Timer;
          //import com.example.programmingas3.introvertIM.IMMessageEvent;
          //import com.example.programmingas3.introvertIM.IMStatus;
          
          public class @ax-actionscript-book-IntrovertIM_HTML-com-example-programmingas3-introvertIM-IMManager extends EventDispatcher
          {
                  // ------- Private vars -------
                  
Keeps track of the current "availability" status of the user.

  
                  private var _status:actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMStatus;
                  
                  
                  // ------- Constructor -------
                  public function @ax-actionscript-book-IntrovertIM_HTML-com-example-programmingas3-introvertIM-IMManager(initialStatus:actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMStatus)
                  {
                          _status = initialStatus;
                          
                          // check if the container is able to use the External API
                          if (ExternalInterface.available)
                          {
                                  try
                                  {
                                          // This calls the isContainerReady() method, which in turn calls
                                          // the container to see if Flash Player has loaded and the container
                                          // is ready to receive calls from the SWF.
                                          var containerReady:Boolean = isContainerReady();
                                          if (containerReady)
                                          {
                                                  // if the container is ready, register the SWF's functions
                                                  setupCallbacks();
                                          }
                                          else
                                          {
                                                  // If the container is not ready, set up a Timer to call the
                                                  // container at 100ms intervals. Once the container responds that
                                                  // it's ready, the timer will be stopped.
                                                  var readyTimer:Timer = new Timer(100);
                                                  readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
                                                  readyTimer.start();
                                          }
                                  }
                                  catch (error:SecurityError)
                                  {
                                      trace("A SecurityError occurred: " + error.message + "\n");
                                      throw error;
                                  }
                                  catch (error:Error)
                                  {
                                      trace("An Error occurred: " + error.message + "\n");
                                      throw error;
                                  }
                          }
                          else
                          {
                                  trace("External interface is not available for this container.");
                          }
                  }
                  
                  
                  // ------- Public Properties -------
                  
Gets or sets the user's current availability.

  
                  public function get status():actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMStatus
                  {
                          return _status;
                  }
                  public function set status(newStatus:actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMStatus):void
                  {
                          _status = newStatus;
                          // notify the container that the SWF user's status has changed
                          ExternalInterface.call("statusChange");
                  }
                  
                  
                  // -------- Public Methods -------
                  
Sends a new message to the container IM client
parameter: message The message to send

  
                  public function sendMessage(message:String):void
                  {
                          ExternalInterface.call("newMessage", message);
                  }
                  
                  
                  // ------- Externally-callable Methods -------
                  
Called by the container to send a new message to the SWF client.
parameter: message The message that was sent

  
                  private function newMessage(message:String):void
                  {
                          // notify listeners (i.e. the UI) that there's a new message;
                          // the UI will then update itself accordingly
                          var ev:actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMMessageEvent = new actionscript_book_IntrovertIM_HTML_com_example_programmingas3_introvertIM_IMMessageEvent(message);
                          dispatchEvent(ev);
                  }
                  
                  
                  
Called by the container to retrieve the current status
returns: The current status of the SWF IM client

  
                  private function getStatus():String
                  {
                          return status.toString();
                  }
                  
                  
                  // ------- Private Methods -------
                  
Calls the container's isReady() function, to check if the container is loaded and ready to communicate with the SWF file.
returns: Whether the container is ready to communicate with ActionScript.

  
                  private function isContainerReady():Boolean
                  {
                          var result:Boolean = ExternalInterface.call("isReady");
                          return result;
                  }
                  
                  
                  
Registers the appropriate ActionScript functions with the container, so that they can be called, and calls the "setSWFIsReady()" function in the container which tells the container that the SWF file is ready to receive function calls.

  
                  private function setupCallbacks():void
                  {
                          // register the SWF client functions with the container
                          ExternalInterface.addCallback("newMessage", newMessage);
                          ExternalInterface.addCallback("getStatus", getStatus);
                          // notify the container that the SWF is ready to be called.
                          ExternalInterface.call("setSWFIsReady");
                  }
                  
  
                  
Handles the timer event; this function is called by the timer each time the elapsed time has been reached. The net effect is that on regular intervals this function checks to see if the container is ready to receive communication.
parameter: event The event object for the Timer event.

  
                  private function timerHandler(event:TimerEvent):void
                  {
                          // check if the container is now ready
                          var isReady:Boolean = isContainerReady();
                          if (isReady)
                          {
                                  // If the container has become ready, we don't need to check anymore,
                                  // so stop the timer.
                                  Timer(event.target).stop();
                                  // Set up the ActionScript methods that will be available to be
                                  // called by the container.
                                  setupCallbacks();
                          }
                  }
          }
  }


(C) Æliens 27/08/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.