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

    通过使用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大家可以留言

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值