上一篇文章大概完成了服务端程序,今天继续做项目的时候发现还有一些功能没有做,还有几处地方不够完善。不做好就会影响客户端程序的编写,因此,本篇文章将对服务端程序进行补充和优化。
首先是未完成的功能:离线消息的检测与发送
用户连接到服务器之后,不仅要开启线程接收、转发消息,也要检测数据库中是否有离线消息,如果有就发送给用户并将离线消息删除。
思路:根据上线的用户账号,查找离线消息表,找到记录就发送给用户,然后将数据库记录删除即可。在昨天的开启接收消息转发消息的代码下面,继续开启检测离线消息的线程:
//检测是否有离线消息,如果有就发送到客户端
Thread check = new Thread(checkUnReceivemsg);
check.Start(Account);
然后是checkUnReceivemsg方法:
private void checkUnReceivemsg(object clientAccount)
{
string toAccount = clientAccount.ToString();
//根据该上线的账号查找是否有离线消息
SqlDataReader sdr = SqlHelper.ExecuteReader("select * from Temp_msg where ToAccount='" + toAccount + "'");
while(sdr.Read())
{
if (dic_socket.ContainsKey(toAccount))
{
//给该账号发送所有的普通离线消息
if(sdr[4].ToString().Trim() != "")
{
dic_socket[toAccount].Send(Encoding.UTF8.GetBytes(sdr[2].ToString().Trim() + splitFlag + sdr[3].ToString().Trim()+splitFlag+sdr[4].ToString().Trim()));
}
else
{