欢迎光临
我们一直在努力

在asp聊天室里实现房间功能和用户显示

建站超值云服务器,限时71元/月

再谈在asp聊天室里实现房间功能与用户的显示

在我写下了《在asp聊天室里实现悄悄话功能》一文后,很多的朋友来信问我

关于其他高级功能实现的问题。确实,例如房间、用户管理等高级功能是一个完善的

聊天室所必有的功能。在这里面又以房间功能是比较难于实现的。因此我想和大家谈谈

这个问题。

我依然倾向于用数组来解决这两个问题,这并不是说不能用数据库来解决,但我们

要考虑性能的问题。而且用数组有几个好处,利于排序,利于控制总的长度。在服务器

内存中长驻(有利于性能的提高)。我先讲一讲房间的问题,这里给出大家在两个系统

房间中切换的方法。至于自建房间的方法,希望大家能触类旁通。还有关于用户在线显示的

问题,因为我们既要显示各个房间的用户和总的用户,所以会和房间产生一些互动,在讲的

时候请大家注意。为了大家使用的方便,我尽量把这些功能写成子程序或子函数,大家可以

直接的应用。

我们先看在gloable.asa中的定义,这很重要

<script language="vbscript" runat="server">

sub application_onstart()

application("groom_name")="逍遥游" 保存主聊天室的名字,所有人先到的聊天室

dim pchat_value(50)

application(application("groom_name")&"_value")=pchat_value p代表private g代表globle 用来保存逍遥游聊天室的内容

application(application("groom_name")&"_number")=0 用来保存逍遥游聊天室的谈话的数目

application("养生主"&"_value")=pchat_value

application("养生主"&"_number")=0

dim pchater_value(150)

application(application("groom_name")&"er_value")=pchater_value 用来保存逍遥游聊天室的聊天者的名字

application(application("groom_name")&"er_number")=0 用来表示逍遥游聊天室的上线的人数

application("养生主"&"er_value")=pchater_value

application("养生主"&"er_number")=0

dim proom_value(50)

proom_value(0)="逍遥游"&"("&"系统"&")"&"["&application(application("groom_name")&"er_number")&"]"&"人"

proom_value(1)="养生主"&"("&"系统"&")"&"["&application("养生主"&"er_number")&"]"&"人"

application("groom_value")=proom_value 用来保存房间的名字

application("groom_number")=2

end sub

sub session_onstart()

session("sroom_name")=application("groom_name")每个新用户的默认房间

session("schater_name")="" s代表session 用来保存说话者的名字

strprovider="driver={microsoft access driver (*.mdb)}; dbq="&server.mappath("../chat")&"\"&"db\chater_message.mdb;"

set cres=server.createobject("adodb.connection")

set res=server.createobject("adodb.recordset")

cres.open strprovider

res.activeconnection=cres

set session("res")=res 一个recordset的实例

end sub

在gloable.asa中进行了如上的定义后,我们就可以在后面的页面中应用了。我们假设

先有一个用户的登陆确认(从数据库中确认用户的信息)大致的代码如下:

<!–

#include virtual="/chat/inc/convert.inc"

–> <%将欢迎的内容记入application数组并调整顺序%>

<!–

#include virtual="/chat/inc/roomrefresh.inc"

–>

<!–

#include virtual="/chat/inc/logname.inc"

–> <%将姓名记入application数组%>

<%

if request.servervariables("request_method")="post" and session("schater_name")="" then

name=request.form("txtname")

pass=request.form("txtpass")

set res=session("res")

sql="select * from chater_message where name="&name&" and pass="&pass&";"

res.open sql,,3,3

if res.bof then

response.write "login failed"&"<br>"

response.write "<a href="&chr(34)&"loginpage.htm"&chr(34)&">"&"请重新登陆"&"</a>"

res.close

else

session("schater_name")=name

welcome_message="common"&","&"系统"&","&"所有人"&","&"<font color="&chr(34)&"#ff98ff"&chr(34)&">"&"各位看官,"&session("schater_name")&"来也"&"</font>"&"<br>"

这句话请大家一定要注意,如果你读了我的上一篇文章你应该知道是什么意思。

application.lock

call convert(welcome_message)

call logname(session("schater_name"),session("sroom_name"))

call roomrefresh()

application.unlock

res.close

response.redirect "chatpage.htm"

end if

end if

%>

下面是三个关键的子程序,在后面也有大量的应用。

convert.inc

<%

sub convert(message)

dim tmpchat_value()

pchat_value=application(session("sroom_name")&"_value")

pchat_number=application(session("sroom_name")&"_number")

由于使用了session("sroom_name")来保存当前的房间名,因此可以被每个房间的

提交子过程调用。

if pchat_number>=50 then

pchat_number=0

end if

redim tmpchat_value(pchat_number)

for i=0 to pchat_number

tmpchat_value(i)=pchat_value(i)

next

pchat_value(0)=message

for i=0 to pchat_number

pchat_value(i+1)=tmpchat_value(i)

next

pchat_number=pchat_number+1

application(session("sroom_name")&"_value")=pchat_value

application(session("sroom_name")&"_number")=pchat_number

end sub

%>

logname.inc

<%

sub logname(chater_name,room_name)

pchater_value=application(session("sroom_name")&"er_value")

pchater_number=application(session("sroom_name")&"er_number")

if pchater_number>=150 then

pchater_number=0

end if

pchater_value(pchater_number)=chater_name&"["&room_name&"]"

pchater_number=pchater_number+1

application(session("sroom_name")&"er_value")=pchater_value

application(session("sroom_name")&"er_number")=pchater_number

end sub

%>

roomferesh.inc

<%

sub roomrefresh()

proom_number=application("groom_number")

proom_value=application("groom_value")

for i=0 to proom_number-1

room_name=left(proom_value(i),instr(proom_value(i),"(")-1)

proom_value(i)=left(proom_value(i),instr(proom_value(i),"[")-1)&"["&application(room_name&"er_number")&"]"&"人"

next

application("groom_number")=proom_number

application("groom_value")=proom_value

end sub

%>

这个子程序大家可能不太明白,他是用于显示各个房间信息的。

好了,下面是关键的显示页面chatpage.html,它分为三帧,左右为80%,20%,然后

再将右面的分为上下80%,20%,左上的部分就是主的显示页面

showpage.asp

<!–

#include virtual="/chat/inc/convert.inc"

–> <%将内容记入application数组并调整顺序%>

<!–

#include virtual="/chat/inc/changeroom.inc"

–> <%处理换房的过程%>

<!–

#include virtual="/chat/inc/logname.inc"

–>

<!–

#include virtual="/chat/inc/ulogname.inc"

–>

<%

if request.servervariables("request_method")="post" then

if request.form("cmdchangeroom")="换房" then

application.lock

call changeroom()

application.unlock

else

chat=request.form("txtchat")

who=session("schater_name")

towho=request.form("selshow")

common_or_private="common"

chat=who&towho&"说:"&chat

if request.form("chkprivate")="private" then

common_or_private="private"

chat=chat&"[私聊]"

end if

application.lock

call convert(common_or_private&","&who&","&towho&","&chat&"<br>")

application.unlock

end if

end if

%>

<html>

<head>

<title> showpage </title>

</head>

<body>

<center>

<%

response.write session("sroom_name")

%>

</center>

<%

for i=0 to application(session("sroom_name")&"_number")-1

position_one=instr(application(session("sroom_name")&"_value")(i),",")

position_two=instr(position_one+1,application(session("sroom_name")&"_value")(i),",")

position_three=instr(position_two+1,application(session("sroom_name")&"_value")(i),",")

if mid(application(session("sroom_name")&"_value")(i),1,position_one-1)="common" or session("schater_name")=mid(application(session("sroom_name")&"_value")(i),position_one+1,position_two-position_one-1) or session("schater_name")=mid(application(session("sroom_name")&"_value")(i),position_two+1,position_three-position_two-1) then

response.write mid(application(session("sroom_name")&"_value")(i),position_three+1)

end if

next

大家注意了,这里是关键的关键,房间的显示与悄悄话的处理都在这里了

代码是太长了,但若使用好的数据结构应该能大大简化代码,我会用sever端的

javascript来试一试,希望可以

%>

<%

end if

%>

</body>

</html>

好长哦,^o^,没办法,高级的功能要付出大的代价,我这里是想告诉大家一种思想

以前你肯定定义过application("var1")这样的变量,但象application(session("sroom_name")&"_value")

这样的呢???我会在近期将它做成一个activex控件,那时大家就方便了。

想要的话给我写个mail就行了。。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在asp聊天室里实现房间功能和用户显示
分享到: 更多 (0)