日期:2014-4-29 浏览次数:21226次 点赞次数:20

前面的教程我们介绍了Flash与XML结合使用的原理(Flash MX 2004中的XML应用之原理篇)以及一个论坛(用Flash和XML构建论坛实例(上)(下))的实现,下面我们继续结合Flash与XML来实现一个简单的聊天室,有在线聊天、在线人员名单、在线时间、简单的管理操作等功能。根据需要在此基础上稍作修改,就可以实现一个功能比较完备的聊天室了。

一、原理
  用Flash和XML来构造聊天室,跟直接用Flash和Asp来构造聊天室的基本原理是一样的。都是先在Flash端发送一个XML请求到服务器端,然后等待从服务器端的XML返回值,当值返回Flash端后,解释所返回的XML串,根据相应的值做相应的操作。

在Flash部分,用到的主要都是XML串的构造和sendAndLoad()函数的操作。在Asp部分,主要用到了global.asa文件和application()属性,先定义几个application对象,然后将要保持的内容放在application对象中,要用的时候,直接从application对象中取就是了。

下面就按顺序一个一个来实现聊天室的功能,每一个介绍的内容都分为“传递的XML”、“Flash部分”、“Asp部分”三部分。

二、登陆
  登陆就是将用户名和密码用XML格式发送到服务器端,服务器端将验证的结果用XML格式返回。

  A、传递的XML

  1、请求报文

 <LOGIN><USERNAME>用户名</USERNAME><PWD>密码</PWD></LOGIN>

  2、响应报文

 <LOGIN><USRENAME name="用户名" right="权限">用户名</USERNAME></LOGIN>

  B、Flash部分

  1、在Flash MX 2004中新建一个Flash文件,设置场景的第一帧的帧标签为“login”,并在ActionScript面板上增加语句:

 stop();

  2、在第一帧的场景中用文本工具拉两个文本框,类型都为“Input type”,变量名var分别设置为“username”、“userpwd”,这是用来输入用户名跟密码的。

  3、新建一个Button并拖到第一帧的场景中,摆放位置如图1所示。并在这个Button的ActionScript面板中增加如下语句:

 on (release) {
if (length(_root.username) == 0) { //注释1
_root.username = "guest";
} else if (length(_root.userpwd) == 0) { //注释2
_root.username = "guest";
}
loginXml = new XML(); //注释3
loginElement = loginXml.createElement("LOGIN"); //注释4
// name node
nameElement = loginXml.createElement("USERNAME"); //注释5
nameNode = loginXml.createTextNode("name"); //注释6
nameNode.nodeValue = _root.username;
nameElement.appendChild(nameNode); //注释7
// pwd node
pwdElement = loginXml.createElement("PWD"); //注释8
pwdNode = loginXml.createTextNode("pwd");
pwdNode.nodeValue = _root.userpwd;
pwdElement.appendChild(pwdNode); //注释9
loginElement.appendChild(nameElement); //注释10
loginElement.appendChild(pwdElement);
loginXml.appendChild(loginElement); //注释11
xmlRepley = new XML(); //注释12
xmlRepley.onLoad = onLoginReply; //注释13
function onLoginReply(success) {
if (success) {
if (xmlRepley.firstChild.firstChild.attributes.right == "1") { //注释14
_root.gotoAndPlay("main");
} else {
_root.username = "登陆失败";
}
}
}
loginXml.sendAndLoad("http://localhost/xmlchat/login.asp", xmlRepley); //注释15
}

  注释1:检查输入框中用户名的长度,如为空,则默认为guest。
  注释2:检查输入框中密码的长度。
  注释3:新建一个XML对象,这是用来发送到服务器端的。
  注释4:创建一个LOGIN结点对象。
  注释5:创建一个USERNAME结点对象,注意不能直接在Element对象中放置文本内容,要在Text Node对象中才能放置文本内容。具体可以参见Flash帮助文件中有关XML.createElement()和XML.createTextNode() 中的内容。
  注释6:创建一个Text Node对象,用来放置USERNAME结点的文本内容。
  注释7:将创建的Text Node结点插入到USERNAME结点对象中。
  注释8:分别创建一个PWD结点对象和Text Node。
  注释9:将Text Node结点插入到PWD结点对象中。
  注释10:将USERNAME结点对象插入到LOGIN结点对象中,将PWD结点对象插入到LOGIN结点对象中。
  注释11:将LOGIN结点对象插入到所创建的XML对象中,从而构造一个完整的XML对象。注意这里在构建XML对象时,是从最里面开始构建的。
  注释12:新建一个XML对象,这里是用来放置接收到的XML对象的。
  注释13:设置接收XML对象的响应函数,当服务器端返回XML对象的时候触发。
  注释14:判断返回的XML对象中的结点属性是否符合要求。
  注释15:利用sendAndLoad()函数,将Flash端的XML对象发送到服务器端,并接收从服务器端返回的XML对象。

  C、Asp部分

  1、新建一个文件,命名为global.asa,输入如下内容:

 <script language="vbscript" runat="server">
sub application_onstart
application("VisitorNum")=0
application("VisitorName")=""
application("AllCanSee")=""
end sub
</script>


 2、新建一个Asp文件,命名为login.asp,输入如下的内容:

 <%