<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>MovieOnline聊天室 </title> <script type="text/javascript"> function send() { var txtContent = document.all("content").value; //文本框输入内容 if (txtContent == "") return; var user_to = document.all("userlist").value; var isPublic = !(document.all("isSecret").checked); regUser_ChatRoom.SendMsg(txtContent,user_to,isPublic);
var div = document.all("chatcontent"); div.innerHTML = div.innerHTML + regUser_ChatRoom.getNewMsg().value; document.all("content").value = ""; } function refresh_chatcontent() { //调用服务器方法获取最新消息的HTML字符串 var div = document.all("chatcontent"); var strNewMsg = regUser_ChatRoom.getNewMsg().value;
//判断是否为空,避免不必要的更新 if (strNewMsg != "") div.innerHTML = div.innerHTML+strNewMsg;
//定时更新 window.setTimeout(refresh_chatcontent, 3000); } function refresh_onlineusers() { //发送对象列表 var userlist = document.all("userlist");
//调用服务器端方法获取用户列表字符串(用逗号分隔) var strUserlist = regUser_ChatRoom.GetOnlineUserString().value;
//获取客户端显示的用户列表字符串 var strUserlistClient = ""; for (var i = 1;i < userlist.options.length;i++) { if (i != userlist.options.length - 1) { strUserlistClient += userlist.options[i].value + ","; } else { strUserlistClient += userlist.options[i].value; } }
if (strUserlistClient != strUserlist) //在线用户列表发生变化 { var userArr = strUserlist.split(',');
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Configuration;
public partial class regUser_ChatRoom : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Ajax.Utility.RegisterTypeForAjax(typeof(regUser_ChatRoom)); } [Ajax.AjaxMethod()] public void SendMsg(string content,string User_to,bool isPublic) { string User_from = "zengxie"; DataVisit dv = new DataVisit(); dv.SendMsg(User_from, content, User_to, isPublic); } [Ajax.AjaxMethod()] public string getNewMsg() { string name = "zengxie"; string MsgHTML=""; DataVisit dv = new DataVisit(); SqlDataReader sdr = dv.getNewMsg(name); while (sdr.Read()) { if (sdr.GetString(1) != "") { MsgHTML += String.Format(sdr.GetString(1)+"对"+sdr.GetString(2)+"说: "+sdr.GetString(3))+" <br>"; } } setLastInfo(name); return MsgHTML; } public void setLastInfo(string name) { DataVisit dv = new DataVisit(); dv.setLastChatInfo(name); } [Ajax.AjaxMethod()] public string GetOnlineUserString() { string strUserlist = "";
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MovieConnectionString"].ToString()); SqlCommand cmd = conn.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "GetOnlineUsers"; conn.Open(); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { strUserlist += dr.GetString(1) + ","; } } conn.Close(); return strUserlist.TrimEnd(','); } }
ALTER PROCEDURE [dbo].[setLastChatInfo] @username varchar(50) AS update ChatUser set LastChatInfo = (select max(ID) from ChatMsg) where UserName=@username
ALTER PROCEDURE [dbo].[getNewMsg] @username varchar(50) AS DECLARE @LastID int SET @LastID = (select LastChatInfo from ChatUser where UserName=@username)
select * from ChatMsg where (ID > @LastID) and ((IsPublic='True') or (User_to=@username) or (User_from=@username) or (User_to='大家')) AND ( sendtime > GETDATE() - '00:05:00' )