快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号