Sends trace actions to the Alcon output panel through a local connection : Trace Utilities « Development « Flash / Flex / ActionScript

Flash / Flex / ActionScript
1. Animation
2. Array
3. Class
4. Data Type
5. Development
6. Function
7. Graphics
8. Language
9. Network
10. Regular Expressions
11. Statement
12. String
13. TextField
14. XML
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Flash / Flex / ActionScript » Development » Trace Utilities 
Sends trace actions to the Alcon output panel through a local connection
 
/*
 * hexagon framework - Multi-Purpose ActionScript 3 Framework.
 * Copyright (C) 2007 Hexagon Star Softworks
 *       __    __
 *    __/  \__/  \__    __
 *   /  \__/HEXAGON \__/  \
 *   \__/  \__/ FRAMEWORK_/
 *            \__/  \__/
 *
 * ``The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 */
package com.hexagonstar.util.debug
{
  import flash.display.Stage;
  import flash.events.Event;
  import flash.events.NetStatusEvent;
  import flash.events.StatusEvent;
  import flash.net.LocalConnection;
  import flash.net.SharedObject;
  import flash.net.SharedObjectFlushStatus;
  import flash.system.Security;
  import flash.system.SecurityPanel;
  import flash.system.System;
  import flash.utils.ByteArray;
  
  /**
   * Alcon Debug class (AS 3.0 version)
   * Sends trace actions to the Alcon output panel through a local connection.
   
   @version 2.0.1 (2007.03.26)
   */
  public final class Debug
  {
    // Constants //////////////////////////////////////////////////////////////////
    
    public static const LEVEL_DEBUG:uint  = 0;
    public static const LEVEL_INFO:uint  = 1;
    public static const LEVEL_WARN:uint  = 2;
    public static const LEVEL_ERROR:uint  = 3;
    public static const LEVEL_FATAL:uint  = 4;
    
    // Properties /////////////////////////////////////////////////////////////////
    
    private static var _fpsPollInterval:uint  = 1000;
    private static var _filterLevel:uint    = 0;
    
    private static var _isConnected:Boolean  = false;
    private static var _isPollingFPS:Boolean  = false;
    private static var _isDisabled:Boolean  = false;
    private static var _isLargeData:Boolean  = false;
    
    private static var _connection:LocalConnection;
    private static var _stopWatch:StopWatch;
    private static var _fpsMeter:FPSMeter;
    private static var _stage:Stage;
    
    // Constructor ////////////////////////////////////////////////////////////////
    
    /**
     * Internal Constructor
     */
    function Debug()
    {
    }
    
    // Public Methods /////////////////////////////////////////////////////////////
    
    /**
     * The trace method accepts three arguments, the first contains the data which
     * is going to be traced, the second if of type Boolean is used to indicate
     * recursive object tracing mode, if of type int desribes the filtering level
     * for the output.
     
     @param arg0 The object to be traced (defaults to undefined).
     @param arg1 True if recursive object tracing, optional (defaults to null).
     @param arg2 Output level, optional, defaults to 1.
     */
    public static function trace(arg0:* = undefined, arg1:* = null, arg2:int = -1):void
    {
      var data:* = arg0;
      var recursive:Boolean = false;
      var level:int 1;
      
      // Check if argument 1 is a boolean or a number:
      if (typeof(arg1== "boolean")
      {
        recursive = arg1;
      }
      else if (typeof(arg1== "number")
      {
        level = arg1;
      }
      if (arg2 > -1)
      {
        level = arg2;
      }
      
      // Only show messages equal or higher than current filter level:
      if (level >= _filterLevel && level < 7)
      {
        // Send the data to the output console:
        send("onData", data, level, ((recursive0));
      }
    }
    
    /**
     * Can be used to inspect the specified object. This method sends the object
     * to the Alcon output panel where it is displayed in the Inspect tab.
     
     @param object The object to be inspected.
     @param depth The depth with that to inspect the object. If this argument
     * is -1 or omitted, the default from Alcon's config file will be used.
     */
    public static function inspect(object:Object = null, depth:int = -1):void
    {
      send("onInspect", object, 1, depth);
    }
    
    /**
     * Outputs a hexadecimal dump of the specified object.
     
     @param object The object of which to output a hex dump.
     */
    public static function hexDump(object:*):void
    {
      send("onHexDump", object, 00);
    }
    
    /**
     * Forces an immediate Garbage Collector mark/sweep. Use with caution!
     * This method is not officially supported by the Flash Player!
     */
    public static function forceGC():void
    {
      try
      {
        new LocalConnection().connect("forceGC");
        new LocalConnection().connect("forceGC");
      }
      catch (e:Error)
      {
      }
    }
    
    /**
     * Sends a clear buffer signal to the output console. The Trace tab will be
     * cleared after this signal is received.
     */
    public static function clear():void
    {
      Debug.trace("[%CLR%]"5);
    }
    
    /**
     * Sends a delimiter signal to the output console.
     */
    public static function delimiter():void
    {
      Debug.trace("[%DLT%]"5);
    }
    
    /**
     * Sends a pause signal to the output console.
     */
    public static function pause():void
    {
      Debug.trace("[%PSE%]"5);
    }
    
    /**
     * Sends a time/date signal to the output console.
     */
    public static function time():void
    {
      Debug.trace("[%TME%]"5);
    }
  
    /**
     * Sets the current logging filter level.
     
     @param level A value for the filter level to be set. If no argument
     *              is specified, 0 is used as default.
     */
    public static function setFilterLevel(level:uint = 0):void
    {
      if (level >= && level < 5_filterLevel = level;
    }
    
    /**
     * Returns the currently used logging filter level.
     
     @return The current filter level.
     */
    public static function getFilterLevel():int
    {
      return _filterLevel;
    }
    
    /**
     * Disables the output coming from the Debug class. This can be used
     * to quickly suppress all debug output without needing to remove
     * function calls to the Debug class and it's imports.
     */
    public static function disable():void
    {
      _isDisabled = true;
    }
    
    // FPS Polling Methods ////////////////////////////////////////////////////////
    
    /**
     * When called starts measuring the current host applications frames per
     * second and sends the FPS value and the current amount of memory used by
     * the host applications Flash Player to the Alcon output console.
     
     @param stage The Stage of the current host application.
     */
    public static function fpsStart(stage:Stage):void
    {
      if (!_isDisabled && _fpsMeter == null)
      {
        _isPollingFPS = true;
        _stage = stage;
        _fpsMeter = new FPSMeter(stage);
        _fpsMeter.addEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
        _fpsMeter.start();
      }
    }
    
    /**
     * Stops the FPS polling.
     */
    public static function fpsStop():void
    {
      if (_fpsMeter != null)
      {
        _isPollingFPS = false;
        _fpsMeter.stop();
        _fpsMeter.removeEventListener(FPSMeter.FPS_UPDATE, onFPSUpdate);
        _fpsMeter = null;
      }
    }
    
    // Timer Methods //////////////////////////////////////////////////////////////
    
    /**
     * Starts the Stowatch to measure a time amount.
     */
    public static function timerStart(title:String = ""):void
    {
      if (!_isDisabled)
      {
        if (_stopWatch == null_stopWatch = new StopWatch();
        _stopWatch.start(title);
      }
    }
    
    /**
     * Stops the Stowatch.
     */
    public static function timerStop():void
    {
      if (_stopWatch != null_stopWatch.stop();
    }
    
    /**
     * Resets the Stopwatch.
     */
    public static function timerReset():void
    {
      if (_stopWatch != null_stopWatch.reset();
    }
    
    /**
     * Sends the measured time in milliseconds to the output console.
     */
    public static function timerMilliSeconds():void
    {
      if (_stopWatch != nullDebug.trace(_stopWatch.getTimeInMilliSeconds() "ms");
    }
    
    /**
     * Sends the measured time in seconds to the output console.
     */
    public static function timerSeconds():void
    {
      if (_stopWatch != nullDebug.trace(_stopWatch.getTimeInSeconds() "s");
    }
    
    /**
     * Sends the measured time to the output console. This automatically
     * formats the values to seconds and milliseconds.
     */
    public static function timerToString():void
    {
      if (_stopWatch != nullDebug.trace(_stopWatch.toString());
    }
    
    /**
     * Stops the Stopwatch and immediately Sends the measured time to the
     * output console in the same manner like timerToString().
     
     @param reset If true resets the Timer after the result has been output.
     */
    public static function timerStopToString(reset:Boolean = false):void
    {
      if (_stopWatch != null)
      {
        _stopWatch.stop();
        Debug.trace(_stopWatch.toString());
        if (reset_stopWatch.reset();
      }
    }
    
    // Private Methods ////////////////////////////////////////////////////////////
    
    /**
     * Sends the specified data.
     
     * @private
     */
    private static function send(method:String, data:*, level:int 1, rec:uint = 0):void
    {
      // Only send if Debug is not disabled:
      if (!_isDisabled)
      {
        // Establish connection if not already done:
        if (!_isConnected)
        {
          _isConnected = true;
          _connection = new LocalConnection();
          _connection.addEventListener(StatusEvent.STATUS, onStatus);
        }
        
        // Get the size of the data:
        var size:uint = 0;
        if (typeof(data== "string")
        {
          size = String(data).length;
        }
        else if (typeof(data== "object")
        {
          var byteArray:ByteArray = new ByteArray();
          byteArray.writeObject(data);
          size = byteArray.length;
          byteArray = null;
        }
        
        // If the data size exceeds 39Kb, use a LSO instead:
        if (size > 39000)
        {
          storeDataLSO(method, data);
          method = "onLargeData";
          data = null;
        }
        
        _connection.send("_alcon_lc", method, data, level, rec, "");
      }
    }
    
    /**
     * Stores data larger than 40Kb to a Local Shared Object.
     
     * @private
     */
    private static function storeDataLSO(method:String, data:*):void
    {
      var sharedObject:SharedObject = SharedObject.getLocal("alcon""/");
      sharedObject.data.alconMethod = method;
      sharedObject.data.alconData = data;
      try
      {
        var flushResult:String = sharedObject.flush();
        if (flushResult == SharedObjectFlushStatus.FLUSHED)
        {
          return;
        }
      }
      catch (e:Error)
      {
        Security.showSettings(SecurityPanel.LOCAL_STORAGE);
      }
    }
    
    /**
     * Called on every fpsUpdate event.
     
     * @private
     */
    private static function onFPSUpdate(event:Event):void
    {
      send("onFPS"(_fpsMeter.getFPS() "/" + _stage.frameRate + "|" + System.totalMemory));
    }
    
    /**
     * onStatus method
     
     * @private
     */
    private static function onStatus(event:StatusEvent):void
    {
    }
  }
}

        
Related examples in the same category
1. Stopwatch
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.