`
aksoft
  • 浏览: 45422 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

比ForcibleLoader 更好的avm2调用avm1的类

    博客分类:
  • AS3
阅读更多
/**
*
* 6dn Avm1Loader

*----------------------------------------------------------------
* @notice 6dn Avm1Loader类
* @author 6dn
* @as version3.0
* @date 2009-5-26
*
* AUTHOR ******************************************************************************
* 
* authorName : 黎新苑 - www.6dn.cn
* QQ :160379558(小星@6dn)
* MSN :xdngo@hotmail.com
* email :6dn@6dn.cn
* webpage : http://www.6dn.cn
* 
* LICENSE ******************************************************************************
* 
* ① 此类是基于Loader扩展!
* ② 支持以as2.0版本的flash,可使用加载进来的swf中任何位置的function(只支持调用function);
* ③ 注意:由于使用LocalConnection在同一时间内connetID会出现冲突,所以请不要并发使用。
* ④ 此类作为开源使用,但请重视作者劳动成果,请使用此类的朋友保留作者信息。
* Please, keep this header and the list of all authors
* 
*/

package com{
import flash.net.LocalConnection;
import flash.display.Loader;
import flash.events.Event;
import flash.events.StatusEvent;
import flash.utils.ByteArray;

public class Avm1Loader extends Loader {

   private var avmLC:LocalConnection = new LocalConnection();
   private var avm1LC:LocalConnection = new LocalConnection();
   private var avm2LC:LocalConnection = new LocalConnection();

   private const AVM_SER:String="6DN_Avm_server";
   private var AVM1_SER:String="6DN_Avm1_server";
   private var AVM2_SER:String="6DN_Avm2_server";
   private var AVM1_URL:String;
   private var SER_code:String;

   private const EVENT_LOADED:String="Avm1Loaded";
   private const EVENT_LOADPROGRESS:String="Avm1LoadProgress";
   private var Avm1Precent:Number;
   private var intervalId:uint;

   private const str:String="Q1dTCWoGAAB4nLVT3VLTQBQ+SVO6/AlUpChBRCoqIlguvKoKFiyMpdXgeJsJ7VJa02wnSSs8gV5xmRnHccZn8C18FJ+inrNbKB2Kd+Zik/N95+fbb7MnELcBJn4CjGmwPQX45PROp/MqtjkE8PWXloEj16m+5acgDutFp8EhjR8QOn6Vh+AKp1I6rPNyCLYvRAhB062FUBc1D8LjWkBFgKkBHLU8WKPVox4u96rhMTjNpnsKTrtRyEHZFQGHrY/7G/bBjgXPt4v2VruxYQfcb3PfBrsh2jUOZZ87Id9pNMPTfQJybq0JtivKn+R8EiRxEN6OF3L/jU/zUOvr05AHBaR55SL8IELHpfkZIt75ourzICBgAxUF3KtckFiF2i5L6yojOCPxgig7bk54HtpRE54qzYEnPsM2aoYg9Gnyrmj5Adj0uV/zWiiDPg94WXiVQKGuWwu6cXdY5sKHshqgdoq2NZTG7lyU+X1cgpo6qBdapAMDM5n8oUMcIg1iLyMDmMZ0k5hYMRslKTQSGh4+i6uXJskhi9aENd+XwganYNNhBM0sfY10249ge3wNmwSOdmvG8rSqhPFi3izJTBneKEZxkP13SfAcRKMwBN2H2mDOqJX6pkMFBlXtUdXKOTXcqy1GCZXR12ThPJOBntAvsUVaJ6zU2cK50eheHWLplu+CkcbDsMuiwuGP1idwUlZPWaloCFiS3TSM/Hw0A2y6l2LIOYbGblnSmmlpzUxcK6FcI6Y0Tss+KexjUOrsGaPaWB1O+uepvNsWbb+CwNgA9o41PvtFAz01kKNKvO8dadx7QN04D5Qa2ZLNsaRJ5sUoMGXZvBTG7nYZvZ+JS8l6Cf39DYOHXjqYvWSBRq/CIH24s0H1/0esKRvq1/QoURO8QfL3XmD35OEtbtGa3IrG8ex7Ou9vZglZuoKYV5B0D3mgkOUekpbDH8or9ijfZ4WiHlv5a7mVf3BPrHyWftFFtsqWTfxHaS/mxRVZkklP0R5dBrjjNbam7qkK19m6Cpdl+Iwt9CybPLcMNjH8CwprKeg=";
   private var bytearray:ByteArray;

   public function Avm1Loader():void {
    bytearray=new Base64(str);
   }
   public function Load($url:String):void {
    AVM1_URL=$url;
    SER_code=getRndCode(AVM1_URL);
    AVM2_SER=AVM2_SER+"_"+SER_code;
    try {
     avm2LC.connect(AVM2_SER);
    } catch (error:ArgumentError) {
     trace("error on avm2LC connection");
    }
    avm2LC.client=this;
    this.loadBytes(bytearray);
    this.contentLoaderInfo.addEventListener(Event.COMPLETE,eventHandler);
   }
   private function eventHandler(evt:Event):void {
    this.contentLoaderInfo.removeEventListener(Event.COMPLETE,eventHandler);
    try {
     avmLC.connect(AVM_SER);
    } catch (error:ArgumentError) {
     trace("error on avmLC connection");
    }
    avmLC.client=this;
   }
   private function onStatus(event:StatusEvent):void {
    switch (event.level) {
     case "status" :
      trace("LocalConnection.send() succeeded");
      break;
     case "error" :
      trace("LocalConnection.send() failed");
      break;
    }
   }
   public function avm1Connected($str:String):void {
    trace("connect");
    avmLC.close();
    AVM1_SER=AVM1_SER+"_"+$str;
    trace(AVM1_SER);
    avm1LC.send(AVM1_SER, "loadMC", AVM1_URL, SER_code);
    avm1LC.addEventListener(StatusEvent.STATUS, onStatus);
   }
   public function avm1LoadProgress($percent:Number):void {
    Avm1Precent=$percent;
    dispatchEvent(new Event(EVENT_LOADPROGRESS));
   }
   public function avm1Loaded():void {
    //trace("loaded");
    dispatchEvent(new Event(EVENT_LOADED));
   }
   public function avm1Execute($obj:Object):void {
    avm1LC.send(AVM1_SER, "cmd", $obj);
   }
   private function getRndCode($url:String):String {
    var len:Number=$url.length;
    var tmpstr:String=len<8?$url+"6dn_avm1_ser"+Math.random()*1000:$url;
    len=tmpstr.length;
    var mystr:String=tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len))+tmpstr.charAt(int(Math.random()*len));
    return mystr;
   }
   public function get Complete():String {
    return EVENT_LOADED;
   }
   public function get Progress():String {
    return EVENT_LOADPROGRESS;
   }
   public function get loadedprecent():Number {
    return Avm1Precent;
   }
}
}

import flash.utils.ByteArray;
internal class Base64 extends ByteArray {
private static const BASE64:Array = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,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,0,0,0,0,0];
public function Base64(str:String):void {
   var n:int, j:int;
   for (var i:int = 0; i < str.length && str.charAt(i) != "="; i++) {
    j = (j << 6) | BASE64[str.charCodeAt(i)];
    n += 6;
    while (n >= 8) {
     writeByte((j >> (n -= 8)) & 0xFF);
    }
   }
   position = 0;
}
}




引用

自己使用时的代码


var myloader:Avm1Loader=new Avm1Loader();
myloader.Load("测试.swf");
myloader.addEventListener(myloader.Progress,LoadProgressHand);
myloader.addEventListener(myloader.Complete,LoadedHand);
myloader.x=25;
myloader.y=40;

function LoadProgressHand(evt:Event):void {
    //txt.text="Loading:"+myloader.loadedprecent.toString()+"%";
}
function LoadedHand(evt:Event):void {
    //txt.text="Load Complete!";
   var obj=(evt.target);
    stage.addChild(obj); 
myloader.avm1Execute({target:"_root",funname:"gotoAndStop", args:["10"]});//停留在第十帧


}


分享到:
评论

相关推荐

    Action Script 虚拟机-AVM2 源码

    随着技术的发展,AVM经历了从AVM1到AVM2的重大升级,以支持更强大的功能和性能提升。AVM2的开源使得开发者和研究人员有机会深入理解其内部工作原理,对ActionScript的优化和自定义实现提供了无限可能。 AVM2的设计...

    flash avm2 虚拟机说明

    它不仅提供了比前代AVM更高效的性能,还引入了对现代编程语言特性的支持,如垃圾回收、类型安全和多线程。 #### 重要概念 AVM2的设计基于几个核心概念,包括常量值、虚拟机结构、命名机制、方法调用以及指令集。 ...

    Avm2虚拟机浅析与as3性能优化

    相比于前一代的AVM1(主要针对AS1和AS2),AVM2在设计上有了显著改进,尤其是在性能方面。它采用了JIT(Just-In-Time)编译技术与解释器相结合的方式,这种混合执行模式极大地提高了代码执行效率。 #### JIT与解释...

    Actionscript Virtual Machine(AVM2)

    AVM2 的出现是为了克服早期版本的ActionScript(如AS1和AS2)在性能和功能上的限制。 #### 二、ActionScript Virtual Machine 结构 ##### 2.1 常量值 AVM2 使用一系列预定义的常量值来帮助解释和执行脚本。这些...

    flash虚拟机源码-AVM2

    flash的虚拟机源码-AVM2 avmplus Adobe System Incorporated

    swf文件结构及avm原理

    AVM有两种版本:AVM1和AVM2,其中AVM2是更为先进的一种,支持ActionScript 3.0。 1. **AVM2架构** - **ABCLoad**:加载ABC(ActionScript ByteCode)数据到内存,并进行解析,获取所有数据单元,如Script、Class、...

    AVM2电子书 - the ideal reference

    ### AVM2电子书核心知识点概述 #### 一、引言 **AVM2电子书**作为一本理想的参考书籍,不仅适用于专业人士也适用于学生群体,它提供了深入且实用的视角来探讨ActionScript虚拟机(AVM)的核心概念和技术细节。本书...

    高级验证方法学(AVM)中文版

    1. **AVM组件模型**:AVM定义了一组预定义的组件模板,如Agent、Driver、Sequencer、Monitor等,这些组件可以相互协作完成验证任务。书中会解释每个组件的作用和它们之间的交互机制。 2. **接口与连接**:AVM提供了...

    AVM2源码.zip

    1. **字节码解析**:AVM2使用字节码作为中间表示,这使得代码可以在不同的平台上运行。字节码解析器负责将二进制的字节码转换为可执行的指令。 2. **类加载机制**:AVM2管理着类的生命周期,包括加载、链接和初始化...

    AVM2虚拟机逃逸技术研究

    - **相关知识回顾**: 漏洞攻击四层模型(FlashSky)是一种评估和理解AVM2逃逸机制的理论框架,它帮助研究人员更好地识别和利用AVM2中的漏洞。AVM2的运行环境被称为“寄生”模式,即AVM2通常作为插件或组件运行在其他...

    Ansible-avm.zip

    Ansible Version Manager(AVM)是针对Ansible的扩展,旨在更好地管理和控制Ansible的版本,确保在不同环境中的一致性和可靠性。这个名为"Ansible-avm.zip"的压缩包可能包含了AVM的源代码或者安装脚本,便于用户集成...

    计数问题 AVM竞赛练习 C语言 基础算法

    从给定的文件信息来看,我们正在探讨的主题是“计数问题”,具体而言,这是一个与AVM(一种可能指的是Algorithm Visualization Media或者特定编程竞赛的缩写)竞赛练习相关的C语言基础算法实例。这个实例主要涉及在...

    AVM.rar_AVM_PIC

    在电子工程领域,对电流、电压和磁通密度的精确测量至关重要,这通常通过使用专业的测量设备——安培-伏特-米(AVM)来实现。本文将深入探讨如何利用微控制器,特别是PIC系列控制器,来构建一个自定义的AVM系统。 ...

    PIAB 真空泵P6010AVM 选型册.pdf

    PIAB真空泵P6010AVM选型册介绍了PIAB公司推出的P6010AVM真空泵产品,该产品采用了专利的COAX®技术。COAX®技术是一种先进的真空产生技术,能够提供可靠的真空吸附力量和高效的气流控制,特别适合于需要大量大吸盘的...

    士研电机保护继电器AVM-NB说明书.pdf

    士研电机保护继电器AVM-NB说明书pdf,士研电机保护继电器AVM-NB说明书:相位顺序不对(逆相)及电压过高或电压不足时自动跳脱保护,设定值可以从额定电压的±5%到±29%,如果电压超过或是不足,内部继电器立即回到原始...

    全景影像系统(AVM)).pdf

    AVM系统的主要功能是提供驾驶员一个完整的汽车周围环境信息,帮助驾驶员更好地观察汽车周围的情况,从而避免意外事件的发生。同时,AVM系统也可以为基于图像的汽车电子技术提供基础平台,如车道偏离预警、行人防撞、...

    avm2-learn-doc:了解 AVM2(Actionscript 虚拟机)

    avm2-learn-doc 学习整理AVM2(Actionscript Virtual Machine)相关知识。主要参考,内容为该文档对应章节的翻译和转述。 主要内容为: 加载、连接、验证、执行 ABC字节码格式 AVM2指令

    AVM 内外参介绍,基本OCAM模型

    **AVM内外参介绍** 在计算机视觉和图像处理领域,AVM(Automotive Vision System,汽车视觉系统)是一种用于车辆导航、自动驾驶以及辅助驾驶的重要技术。它通过车载摄像头捕获环境信息,然后进行图像处理,以实现对...

    AVM

    AVM有两种版本:AVM1和AVM2。AVM1是早期Flash Player中的版本,支持ActionScript 2;而AVM2是随着Flash Player 9引入的,专为ActionScript 3设计,提供了更高效、更强大的性能和类型检查。 HTML,或超文本标记语言...

Global site tag (gtag.js) - Google Analytics