学院首页 新手上路 建站指南 主页制作 图片处理 动画制作 网站编程 制作软件 网站发布 技术论坛 大宝库主页
当前位置:学院首页 >> 网站编程 >> asp >> 正文

ASP:在红蜻蜓中实现多房间
转自: 时间:2003-12-4 12:31:16

在global中完成两件事 
新房间在线人员名单的初始化(application_onstart) 
Dim nameindex(0) 
useronlinename=" " 
onliners=0 
Application("hxf_c_onlinelist")=nameindex 
Application("hxf_c_useronlinename")=useronlinename 
Application("hxf_c_chatrs")=onliners 
将这一段提前在rs.close setrs=nothing 
然后加入 
rs.Close 
rs.Open "select id from reginfo where grade>6",conn 
do while not (rs.EOF or rs.BOF) 
--chatroomsn=rs("id") 
--Application("hxf_c_onlinelist"&chatroomsn)=nameindex 
--Application("hxf_c_useronlinename"&chatroomsn)=useronlinename 
--rs.MoveNext 
loop 

关于Session_OnEnd的修改应该在后面说才对 
然后就是加入聊天室了hqtchat.asp关于这儿的调用我们应该加两个参数 
chatroomsn和chatroomname聊天室的房间号和聊天室的名称 
chatroomsn=request.querystring("chatroomsn") 
chatroomname=request.querystring("chatroomname") 
创建session("hxf_c_mylocale")=chatroomsn 
换聊天室的名称 
chatroomname=Application("hxf_c_chatroomname") 
为chatroomname=Application("hxf_c_chatroomname")&mychatroomname 
换 
crm="<%=Application("hxf_c_chatroomname")%>"; 
为crm="<%=Application("hxf_c_chatroomname")&mychatroomname%>"; 

然后就是替换了找出你所有文件中的application("hxf_c_useronlinename")为application("hxf_c_useronlinename"&session("hxf_c_mylocale")) 
替换application("hxf_c_onlinelist")为application("hxf_c_onlinelist"&session("hxf_c_mylocale"))当然Application_OnStrat中的部分除外 
事实是我是在chatroomsn=session("hxf_c_mylocale")之后用chatroomsn换掉了上面的session("hxf_c_mylocale")在循环中这样调用session并不是一个好主意 

这样每个房间有了自己的独立的在线名单了 
下一步是什么?我只能对我自己所在聊天室中的人说话而且也只能收到同一房间中的人说的话是的那我们应该在我们说的每一句话中加入一个关于房间号的信息,可是我并不想再加一个sd信息这样会好麻烦的,于是我看中了syscolor,先改syscolor中的blue和black因为这两个值 是不定长的不好处理,改成0000ff和000000好了有什么 变化呢没有只是也是六个字符长的了这样更好处理好了下一步吧 
那我们说的话就是newsd(537)=addwordcolor&cstr(chatroomsn)了 
机器人吗?它是这样说的autonewsd(537)=sayscolor&cstr(chatroomsn) 
其中的chatroomsn=session("hxf_c_mylocale") 
好了,我们说的话中有了我们的房间信息了如何接收呢 
在t.asp中 
Select Case sift 
Case "0","1","2" 
中的每一个case中我们都在if判 断中多加一个检测 
and mid(sd(i+5),7)=chatroomsn 
颜色住信息中多出的房间号现在不处理出没有关系的 
javascript解释RGB信息时会自己去除的 
如果想也可以是 show(j+5)=left(sd(i+5),6) 

好了,现在看起来没有事了我们的确有了不同的房间了只是好象没有入口而已 
这样好了你可以自己加我是在hqtchat中另加了一个框架我加在f3的上方你可以自便 
<frame src="selectchatroom.asp?chatroomsn=<%=chatroomsn%>" name="chatroomfrm" scrolling="NO" noresize marginwidth="0" marginheight="0"> 

其中的selectchatroom.asp为 
<%Response.Expires=0 
mychatroomsn=session("hxf_c_mylocale") 
chatroomsn=Request.QueryString("chatroomsn") 
%> 
<form name=form1> 
<select name=chatroomselect onchange='javascript:changechatroom();'> 
--<%online=split(trim(application("hxf_c_useronlinename"))," ") 
----onlinenum=ubound(online)+1 
--%> 
<option value='/' <%if chatroomsn=mychatroomsn then Response.Write "selected"%>> 
--<%=application("hxf_c_chatroomname")%>/ 
--<%=onlinenum%>人在线 
</option> 
<% 
set conn=server.CreateObject("adodb.connection") 
conn.Open application("hg_connstr"),conn 
set rst=server.CreateObject("adodb.recordset") 
rst.Open "SELECT ID,username from reginfo where grade>6",conn 
do while not (rst.EOF or rst.BOF) 
--chatroomsn=rst("ID") 
--chatroomname=rst("username") 
--useronline=application("hxf_c_useronlinename"&chatroomsn) 
--onlinelist=split(trim(useronline)," ") 
--onlinelistnum=ubound(onlinelist)+1 
%> 
--<option value="<%=chatroomsn%>/<%=chatroomname%>" <%if cstr(chatroomsn)=mychatroomsn then Response.Write "selected"%>> 
--<%=chatroomname%>/ 
--<%=onlinelistnum%>人在线 
--</option> 
<% 
--rst.MoveNext 
loop 
%> 
</select> 
</form> 
<script language=javascript> 
function changechatroom() 

--var chatroomoption=document.form1.chatroomselect.value; 
--var chatroomoptmp; 
--var chatroomsn; 
--var chatroomname; 
--chatroomtmp=chatroomoption.indexOf('/'); 
--chatroomsn=chatroomoption.substring(0,chatroomtmp); 
--chatroomname=chatroomoption.substring(chatroomtmp+1); 
--top.t.location.href="about:blank"; 
--top.d.location.href="about:blank"; 
--top.f3.location.href="changechatroom.asp?chatroomsn="+chatroomsn+"&chatroomname="+chatroomname; 

</script> 

好了现在让我们写changechatroom.asp吧 
更简单了,得到房间名称和房间号先 
mychatroomsn=Request.QueryString("chatroomsn") 
chatroomname=Request.QueryString("chatroomname") 
然后在下面加入exitchat.asp中的部分,当然是已经更改过了的exitchat.asp呀 
去掉最后对close.asp的调用 
最后加入新的处理方法 
<script language=javascript> 
var mychatroomsn="<%=mychatroomsn%>"; 
var chatroomname="<%=chatroomname%>"; 
top.location.href='jhchat.asp?chatroomsn='+mychatroomsn+'&chatroomname='+chatroomname; 
</script> 
这样就行了不是很简单吗 

新的房间在线名单不会更新 
你可以用refresh 和settimeout 但是我想也许不会有多少人关心,而总是重读数据库并不是个好的主意如果你要用 refresh的话我建议是三分钟 

事实上这样的房间只有六级的人能开如果你的服务器再的足够好,你可以让每个人都能开当然你应该在限定了房间数量之后实时更新,这样会更有趣些,所有的房间都没有新的管理功能?正是因为这样我才只让六级的人才能有自己的房间,当然他不在线就!! 


好象就这样了,应该没有错了,自己做了呀 
事实上我已经调试通过了,也算了我给大家的元宵礼物吧 


(编辑:dabaoku)
发表评论】【关闭窗口