LocalConnection在检测多个网页游戏客户端上的应用

来源:互联网 发布:男朋友跟我洗澡 知乎 编辑:程序博客网 时间:2024/06/07 03:51

    通过使用Flex中的LocalConnection 类实现网页游戏中同时打开多个客户端的限制的应用,只写了LocalConnection 引起冲突的一个应用,很简单,只写基本功能,其他的自己延伸;

文件 LocalConTest.mxml 代码如下:

<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"     creationComplete="initComplete()" fontSize="12">     <mx:Script>         <![CDATA[             import mx.events.CloseEvent;             import mx.controls.Alert;             private static var localCon:LocalConnection ;                         private function initComplete():void             {                 localCon = new LocalConnection();                 localCon.client = this;                 checkLocalCon();             }                       /**             * 检测是否有多个连接             */            private function checkLocalCon():void            {                try                {                    localCon.connect("myConnection");                }                catch(error:ArgumentError)                {                    trace("重复的客户端");                    Alert.show("禁止同时打开多个游戏客户端","", 1, this, kickoutClickHandler);                }            }                       private function kickoutClickHandler(event:CloseEvent):void            {                if (event.detail==Alert.YES)                {                    checkLocalCon();                }              }                    ]]>     </mx:Script>        <mx:Label x="235" y="258" text="请使用多个浏览器打开此文件,查看效果"/>   </mx:Application>

 上面是很早的代码了 这儿给出一个改进的类:

////////////////////////////////////////////////////////////////////////////////// WEBGAME Confidential // Copyright 2011. All rights reserved. // // CheckClient.as// Summary // TODO Auto-generated summary stub// Version 1.0// Author txiejun// Created Nov 5, 2011 3:47:36 PM////////////////////////////////////////////////////////////////////////////////package aurora.net{import flash.net.LocalConnection;import flash.utils.getQualifiedClassName;/** * 检测游戏客户端一共打开了几个 * @author txiejun * @contact txiejun@126.com * @created Nov 5, 2011 3:47:36 PM */public class CheckClient{private static var _instance:CheckClient;private var lc:LocalConnection;private var connectList:Array = null;public function CheckClient(){lc = new LocalConnection();lc.allowDomain("*");lc.client = this;}public static function get instance():CheckClient{if(_instance==null){_instance = new CheckClient();}return _instance;}private function connect(name:String):Boolean{try{lc.connect("_"+name);}catch(error:ArgumentError){trace(getQualifiedClassName(this)+".connect(): _"+name+","+error.message);return false;}return true;}/** *  检查是否有多个客户端  * @param conlist 格式如:conlist=["client1","client2"]; 表示支持最多打开两个客户端 conlist=null表示没有限制 可以打开无限个 * @return 返回true说明可以正常开启客户端 返回false说明不能开启更多客户端 *  */public function check(conlist:Array=null):Boolean{connectList = conlist;if(connectList==null||connectList.length==0)return true;for(var i:int = 0;i<connectList.length;i++){if(connect(connectList[i])){return true;}}return false;}}}

说明:之前的测试有人反映可能会出现bug 如果有bug大家可以留言