/*
====================================================================
Socket 类
语言: ActionScript 2.0
版本: 1.0
作者: THOR QQ 488915
平台: XMLSocket Server 3.0
====================================================================
*/
class Socket extends XMLSocket
{
// 变量
var Applications:Array;
var Groups:Array;
var Members:Array;
var CurrentGroup:Object;
// 属性所需变量
var ServerAddress_str:String=undefined;
var ServerPort_num:Number=undefined;
var SocketStatus_str:String=undefined;
var CurrentGroupHandle_num:Number=undefined;
//构造函数
function Socket(sa,sp){
Applications=new Array();
Groups=new Array();
Members=new Array();
if(typeof(sa)!="string" || typeof(sp)!="number"){
//trace("");
}
else{
ServerAddress_str=sa;
ServerPort_num=sp;
}
}
// 方法 =============================================================
// - 创建应用
function createApplication(ApplicationName:String,CallBackFunction:Function){
if(FindApplication(ApplicationName)==undefined){
Applications.push({
name: ApplicationName,
resultFunction: CallBackFunction
});
}
}
// - 踢人
function kickUser(paramHandle){
sendData("KickUser","","",paramHandle);
}
// - 连接
function connection(){
onConnect=ConnectCallBack;
onClose=CloseCallBack;
onData=DataCallBack;
connect(ServerAddress_str,ServerPort_num);
}
// - 关闭
function closeconnection(){
sendData("CloseConnection","","","");
close();
CloseCallBack();
}
// - 发送
function sendData(type:String, application:String,targetList:String,data:String) {
var message:String=""+data+"";
send(message);
}
// - 创建组
function createGroup(title_str,connectionCount_num){
var data_str:String="";
sendData("creategroup","","",data_str);
}
// - 注册昵称
function RegDisplayName(Name_str,Password_str){
if(Password_str==undefined || Password_str==undefined)
{
sendData("regdisplayname","","",Name_str);
}
else
{
sendData("regdisplayname",Password_str,"",Name_str);
}
}
// - 加入组
function JoinGroup(GroupHandle){
sendData("joingroup","","",GroupHandle);
}
// - 离开组
function ExitGroup(){
sendData("exitgroup","","","");
}
// - 保存变量
function SaveParam(name_str,value_obj){
sendData("saveparam","",name_str,value_obj);
}
// - 装载变量
function LoadParam(name_str){
sendData("loadparam","","",name_str);
}
// - 发送变量
function SendParam(name_str,target_str){
sendData("sendparam","",target_str,name_str);
}
// - 清除变量
function ClearParam(name_str){
sendData("clearparam","","",name_str);
}
// 属性 =============================================================
function get StatusInfo():String{
return SocketStatus_str;
}
function get CurrentGroupHandle():Number{
return CurrentGroupHandle_num;
}
// 事件 =============================================================
// - 获得数据时
private function DataCallBack(Data){
Data=new String(Data);
if(Data!="" && Data!=undefined && Data.length>0){
Data=new XML(Data);
var AppName:String=Data.firstChild.attributes["application"];
var TypeName:String=Data.firstChild.attributes["type"];
var TargetName:String=Data.firstChild.attributes["targetlist"];
var MainData:XMLNode=Data.firstChild;
switch(TypeName){
/*
case "creategroupok": // 内部系统消息 - 已经成功的创建了组
var data_xmlnode:XMLNode=Data.firstChild.firstChild;
var tmpNewGroupTitle_str=data_xmlnode.attributes["title"];
var tmpNewGroupHandle_num=data_xmlnode.attributes["handle"];
var tmpNewGroupCount_num=data_xmlnode.attributes["count"];
var tmpNewGroupAdmin_num=data_xmlnode.attributes["admin"];
trace("title\t"+tmpNewGroupTitle_str);
trace("group\t"+tmpNewGroupHandle_num);
trace("count\t"+tmpNewGroupCount_num);
trace("admin\t"+tmpNewGroupAdmin_num);
//onCreateGroupSuccess();
break;
*/
case "sendparam": //当收到别人发来的变量时
onSendParam(TargetName,MainData.firstChild.nodeName,MainData.firstChild.firstChild);
break;
case "saveparam": //当保存变量时
onSaveParam(TargetName);
break;
case "clearparam": //当清除变量时
onClearParam(TargetName);
break;
case "loadparam": //当读取到变量时
onLoadParam(TargetName,MainData.firstChild);
break;
case "exitgroup": //退出分组成功
Members=new Array();
CurrentGroup=undefined;
onMemberListChange();
onExitGroup();
break;
case "exitgrouperror": //退出分组失败
onExitGroupError();
break;
case "joingrouperror": //加入分组失败
onJoinGroupError();
break;
case "regdisplaynameerror": // 登记昵称出错
onRegDisplayNameError();
break;
case "joingroup": // 加入新组时
MainData=MainData.firstChild;
CurrentGroup=new Object();
CurrentGroup.title=MainData.attributes["title"];
CurrentGroup.Count=MainData.attributes["count"];
CurrentGroup.length=MainData.attributes["men"];
CurrentGroup.admin=MainData.attributes["admin"];
CurrentGroup.handle=MainData.attributes["handle"];
onJoinGroupSuccess();
break;
case "groupmemberupdate": //当前组成员变化时
Members=new Array();
MainData=MainData.firstChild;
//trace(MainData.firstChild);
for(var I=0; I