Flash MX 编程深层次应用-网络连线游戏(1)
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-10
|
sg = new XML();
???????????? var ack = xmlMsg.createElement("CMD");
?????? //登陆命令
???????????? ack.attributes.VALUE = "LGIN";
?????? //我的用户名
???????????? ack.attributes.NICK = objLogin.nickname;
?????? //我的密码
???????????? ack.attributes.PASS = "nothing";
???????????? xmlMsg.appendChild(ack);
???????????? trace ("第一次连接的内容:"+xmlMsg);
?????? //送出这个XML串
???????????? this.send(xmlMsg);
?????? //命令发出后连接完成,进入通信阶段
??? }
}
调试窗口output输出内容如下:
connect = true
第一次连接的内容:
很明显,这是成功连接的输出提示。至此,登陆部分完成。从前面所列的代码可以看出登陆过程就是先实例化一个Socket对象(new语句),然后发出一个联机请求,等待后台程序返回一个值,如果返回true则表示成功连接,返回false表示连接失败。
在上面的代码中
chatSocket.onConnect = onConnect;
function onConnect (success) {……
这两句代码也可以合起来写成一句代码:
chatSocket.onConnect = function (success) {……
现在让我们来看看后台的Java代码:
if(this.cmd_LOGIN.equals(cmd)) {
??? //如果是登陆请求就把用户的名字、密码存起来
??? String nickname = (String)root.attributes.get("NICK");
??? String password = (String)root.attributes.get("PASS");
??? if( nickname != null && user.manager.findNickname(nickname) == null) {
??????? //ok!
??????? user.nickname = nickname;
??????? user.password = password;
??????? user.status = this.usr_ST_ON;
??????? user.level = this.usr_LVL_NORMAL;
??? ????user.manager.addUser(user);
??????? //向登陆的人发出一个服务器已经做好准备接收数据的信息
??????? user.notify(packMsg(this.m_ACK, "OK", ""));
??????? //向所有其他已经登陆的人发出有人登陆的信息
??????? user.manager.notifyAll(packMsg(this.m_USR, "ON", user.nickname));
??????? //向登陆的人发出其他已与服务器连接的用户的名单信息
??????? user.notify(packMsg(this.m_USR, user.manager.getUserlist(","), ""));
??????? //向登陆的人发出其他已与服务器连接的用户坐在哪张桌子的信息
? user.notify(packMsg(this.m_PLA, user.manager.getUserplace(","), ""));
??? }
??? else {
??????? //出错,退出
??????? user.notify(packMsg(this.m_ACK, "401", ""));
??????? user.onKill();
??? }
}
在上面的代码中有一句比较重要的事件函数定义语句就是:
chatSocket.onXML = onXML;
这个其实就是当有XML数据传送过来时就会激发出onXML函数,onXML函数的代码如下:
function onXML(x) {
??? if (x.firstChild.nodeName == "ACK") {
???????????? if (x.firstChild.attributes.VALUE == "OK") {
????????????????????? //重新指定连接函数,而指向通信函数
????????????????????? this.onXML = _root.onXML_Receive;
???????????? } else {
????????????????????? this.close();
????????????????????? objLogin.status = "nickname already exists";
???????????? }
??? } else {
???????????? trace(x);
??? }
}
很明显在前面连接成功后就向后台送出一个用户名及其相关信息,如果后台收到这个信息而且已经准备好,就会回送一个给Flash,然后onXML程序部分就会收到并处理这个信息。其实这个过程与前面的登陆联机一起算是一个握手的过程,或者说是连接后台的过程。其方式就像是说:我(用户)要登陆了,你(服务器)准备好了没有?服务器在准备好之后就说:行了,我准备好了,你可以发数据了。至此,通信建立过 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn
为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
|