<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在asp聊天室里完成房間技巧與用戶顯示

      [摘要]再談在asp聊天室里實現房間功能與用戶的顯示 在我寫下了《在asp聊天室里實現悄悄話功能》一文后,很多的朋友來信問我 關于其他高級功能實現的問題。確實,例如房間、用戶管理等高級功能是一個完善的 聊天室所必有的功能。在這里面又以房間功能是比較難于實現的。因此我想和大家談談 這個問題。 我依然傾向于用...

      再談在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就行了。。(出處:熱點網絡)


      日韩精品一区二区三区高清