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