上次寫了WEBQQ的線上人員的實現,一直都沒有時間寫後面的。今天抽空上來爬爬格子(經常寫代碼語言能力變差了,汗)。上一次說了如何?人員的線上和上下線的問題,今天主要談談訊息發送和接收的實現實現。其實這個實現需要基於上次的基礎。前一次談了如何定期檢查資料庫線上人員的情況,同樣的道理,在檢查線上人員的時候可以檢查資料庫的訊息表,我寫了一個方法用來檢查資料庫中屬於目前使用者的未讀訊息。 1private void checkMessage()
2 {
3 string Sql="select distinct sender from message where state=1 and recrieve='"+this._UserID+"'";
4 DataTable msgtb=Data.DataSetQuery(Sql,"msg").Tables[0];
5 foreach(DataRow r in msgtb.Rows)
6 {
7 string username=r["sender"].ToString();
8
9string script="window.open('message.aspx?sender="+username+"&type=0','"+username+"','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,top=2,width=400,height=400');";
10 Response.Write(script);
11
12 }
13
14 }
當檢查到合格記錄時就用JAVASCRIPT開啟一個訊息視窗彈出訊息。
檢查到了訊息以後接著要在訊息視窗中顯示未讀訊息。發送訊息和接受訊息都用的一個視窗根據不同參數來判斷是否讀取資料庫資料(分兩中狀態,一種是選擇要發送的對象直接開啟的視窗,一種是根據上面方法檢查到有資訊而自動彈出的視窗),在這裡我寫了一個屬性 1private string Type
2 {
3 get{return Request.QueryString["type"].ToString();}
4
5 }
下面是根據該屬性來判斷是否讀取資料庫訊息的方法,下面方法從資料庫讀取了相關資訊,並把他們的狀態都從未讀改為已讀,這樣讀過的資訊下次就不會再顯示出來。
1private void checkMsg()
2 {
3 if (Type.Equals("0")) {
4 string sql="select *,b.username from message a,user_info b where b.userid=a.sender and a.state=1 and a.sender='"+sendName+"' and recrieve='"+this._UserID+"'";
5 DataTable dt=Data.DataSetQuery(sql,"msg").Tables[0];
6
7 this.BindBaseList(DataList1,dt);
8 sql="update message set state=0 where state=1 and sender='"+sendName+"' and recrieve='"+this._UserID+"'";
9 Data.EditData(sql);
10
11 }
12 }
最後是發送訊息的代碼,這個比較簡單,只是向資料庫插入一條記錄然後關閉當前視窗 1string sql=@"insert into message(sender,recrieve,message,creattime)
2values('"+this._UserID+"','"+sendName+"','"+tb_concent.Text+"',getdate())";
3 Data.EditData(sql);
4 this.Response_Page("訊息發送成功。","debug");
5 Response.Write("<script language=javascript>window.close();</script>");
6 this.tb_concent.Text="";
這樣一個WEBQQ的準系統就實現了,代碼並不複雜,關鍵是想說明我做這個東西的思想方法。也許我的想法和功能都很簡單,但是有很多東西通過自己想法實現的都比較有意思,有做類似東西的朋友也可以多多交流,希望能給我更多的想法和思路:)