/* ==================================================================== 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