• AS3和AS2牵线搭桥


    转自:http://flashteam.tencent.com/post/56/%e4%b8%baas3%e5%92%8cas2%e7%89%b5%e7%ba%bf%e6%90%ad%e6%a1%a5/

    Actionscript2实现:

    代码
    /*
    local connection bridge for as2
     
    用法:
     
    import com.tencent.net.Bridge2;
     
    var bridge:Bridge2 = new Bridge2("bridgeKey", this);
    bridge.invoke("sayHello", "Hello, I'm a American!");
     
    function sayHello()
    {
        trace(arguments[1]+" said: "+arguments[0]);
    };
    */
     
    class com.tencent.net.Bridge2
    {
        
    public function Bridge2(id:String, listener:Object)
        {
            _lc 
    = new LocalConnection();
            _listener 
    = listener;
            _queue 
    = [];
     
            _lc.o 
    = this;
            _lc.findPair 
    = findPair;
            _lc.onInvoke 
    = onInvoke;
     
            
    // host mode
            if (_lc.connect(BRIDGE_MODE_HOST+id))
            {
                _id 
    = BRIDGE_MODE_HOST+id;
                _pair 
    = BRIDGE_MODE_CLIENT+id;
                _mode 
    = BRIDGE_MODE_HOST;
            }
            
    else // client mode
            {
                _id 
    = BRIDGE_MODE_CLIENT+id;
                _pair 
    = BRIDGE_MODE_HOST+id;
                _mode 
    = BRIDGE_MODE_CLIENT;
                _lc.connect(_id);
                _lc.send(_pair, 
    "findPair", _id);
            }
        }
     
        
    // 查找主节点
        public function findPair(pair:String):Void
        {
            
    if (!_id)
            {
                
    // 此处this为LocationConnection
                this["o"].findPair.apply(this["o"], Array.prototype.slice.apply(arguments));
                
    return;
            }
     
            
    if (_mode==BRIDGE_MODE_HOST)
                _lc.send(_pair, 
    "findPair", _id);
            _connected 
    = true;
            
    // 执行并清除调用队列
            while(doInvoke(_queue.shift()));
        }
     
        
    // 调用远程方法
        public function invoke(/*...*/):Void
        {
            var args:Array 
    = Array.prototype.slice.apply(arguments, [0]);
            
    // 连接成功之前,将调用压入队列
            if (!_connected) _queue.push(args);
            
    else doInvoke(args);
        }
     
        
    // 接受远程调用
        public function onInvoke(method:String/*, ...*/):Void
        {
            
    if (!_id)
            {
                
    // 此处this为LocationConnection
                this["o"].onInvoke.apply(this["o"], Array.prototype.slice.apply(arguments));
                
    return;
            }
            var args:Array 
    = Array.prototype.slice.apply(arguments, [1]);
            
    if (_listener && _listener[method])
                _listener[method].apply(_listener, args);
        }
     
        
    // 执行调用操作
        private function doInvoke(args/*, ...*/):Boolean
        {
            
    if (args==undefined) return false;
            args.unshift(_pair, 
    "onInvoke");
            args.push(_id);
            _lc.send.apply(_lc, args);
            
    return true;
        }
     
        
    private var _id:String;
        
    private var _connected:Boolean = false;
        
    private var _pair:String;
        
    private var _mode:Number;
        
    private var _lc:LocalConnection;
        
    private var _queue:Array;
        
    private var _listener:Object;
     
        
    static var BRIDGE_MODE_HOST:Number = 0;
        
    static var BRIDGE_MODE_CLIENT:Number = 1;
    }
    //end Bridge2

    ActionScript 3实现

    代码
    /*
    local connection bridge for as3
     
    用法:
    import com.tencent.net.Bridge3;
     
    var bridge:Bridge3 = new Bridge3("bridgeKey", this);
    bridge.invoke("sayHello", "Hello, I'm a Indians!");
     
    function sayHello(... args)
    {
        trace(args[1]+" said: "+args[0]);
    };
    */
     
    package com.tencent.net
    {
        
    import flash.net.LocalConnection;
     
        
    public class Bridge3
        {
            
    public function Bridge3(id:String, listener:Object)
            {
                _lc 
    = new LocalConnection();
                _lc.client 
    = this;
                _listener 
    = listener;
     
                
    try
                {
                    
    // host mode
                    _lc.connect(BRIDGE_MODE_HOST+id);
                    _id 
    = BRIDGE_MODE_HOST+id;
                    _pair 
    = BRIDGE_MODE_CLIENT+id;
                    _mode 
    = BRIDGE_MODE_HOST;
                }
                
    catch(err:Error)
                {
                    
    // client mode
                    _mode = BRIDGE_MODE_CLIENT;
                    _id 
    = BRIDGE_MODE_CLIENT+id;
                    _pair 
    = BRIDGE_MODE_HOST+id;
     
                    _lc.connect(_id);
                    _lc.send(_pair, 
    "findPair", _id);
                }
            }
     
            
    // 查找主节点
            public function findPair(pair:String):void
            {
                
    if (_mode==BRIDGE_MODE_HOST)
                    _lc.send(_pair, 
    "findPair", _id);
                _connected 
    = true;
                
    // 执行并清除调用队列
                while(doInvoke(_queue.shift()));
            }
     
            
    // 调用远程方法
            public function invoke(method:String, ...args):void
            {
                args.unshift(method);
                
    // 连接成功之前,将调用压入队列
                if (!_connected) _queue.push(args);
                
    else doInvoke(args);
            }
     
            
    // 接受远程调用
            public function onInvoke(method:String, ...args):void
            {
                
    if (_listener && _listener[method])
                    _listener[method].apply(_listener, args);
            }
     
            
    // 执行调用操作
            private function doInvoke(args:Array):Boolean
            {
                
    if (args==nullreturn false;
                args.unshift(_pair, 
    "onInvoke");
                args.push(_id);
                _lc.send.apply(_lc, args);
                
    return true;
            }
     
            
    private var _id:String;
            
    private var _pair:String;
            
    private var _connected:Boolean = false;
            
    private var _mode:uint;
            
    private var _lc:LocalConnection;
            
    private var _queue:Array = [];
            
    private var _listener:Object;
     
            
    static var BRIDGE_MODE_HOST:uint = 0;
            
    static var BRIDGE_MODE_CLIENT:uint = 1;
        }
    }
  • 相关阅读:
    centos7的变化(转)
    配置邮件报警功能(脚本方式)
    临时和永久关闭Selinux
    centos7.2安装apache比较简单,直接上代码
    zabbix--------配置邮件报警功能---服务器上配置---------
    初来驾到学java修饰符的使用
    面向对象小小理解
    出来驾到学java3
    出来驾到学java2
    初来驾到学JAVA
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1723078.html
Copyright © 2020-2023  润新知