/// <summary> /// 处理接收到的信息(包括大数据块信息)。 /// </summary> /// <param name="sourceUserID">发出信息的用户ID。如果为null,表示信息来自服务端。</param> /// <param name="informationType">自定义信息类型</param> /// <param name="info">信息</param> public void HandleInformation(string sourceUserID, int informationType, byte[] info) { SysMsg sysmsg = new SysMsg(); switch (informationType) { //文本消息 case Constant.MSGTEXT: //文本消息格式:接收者ID卍发送者ID卍消息内容卍发送时间卍发送人名字 string message = System.Text.Encoding.UTF8.GetString(info); //得到含有5个元素的数组 string[] msgs = Regex.Split(message, Constant.SPLIT, RegexOptions.IgnoreCase); //消息存在msg对象中 Msg msg = new Msg(msgs, 0, 0); try { //按照ID查找listbox中的subItem ChatListSubItem[] items = chatListBox_contacts.GetSubItemsById(Convert.ToUInt32(msgs[1])); //聊天窗口的标题 string windowsName = items[0].NicName + ' ' + items[0].ID; //查找是否已经存在窗口 IntPtr handle = NativeMethods.FindWindow(null, windowsName); //聊天窗口已存在 if (handle != IntPtr.Zero) { msg.IsReaded = 1; Form frm = (Form)Form.FromHandle(handle); //激活 frm.Activate(); //传送消息到聊天窗口 this.OnReceive(msg); } else { //头像闪烁 twinkle(chatListBox_contacts, Convert.ToUInt32(msgs[1])); } //消息存入数据库 MsgDB.uniqueInstance.addMsg(msg); } catch { MsgDB.uniqueInstance.addMsg(msg); } break; //处理图片 case Constant.MSGIMG: MsgImg msgimg = ImageUtil.bytesToIdImg(info); //存储图片 ImageUtil.ImgSave(msgimg.Id, msgimg.Img); break; case Constant.MSG_ADDFRIEND_APPLY: string infostr = System.Text.Encoding.UTF8.GetString(info); //info格式:ID卍昵称卍性别卍生日卍地址卍注册时间 sysmsg.Content = infostr; sysmsg.Type = Constant.MSG_ADDFRIEND_APPLY; SystemMsgDB.instance.addSystemMsg(sysmsg.Content, sysmsg.Type);//存入数据库 break; case Constant.MSG_ADDFRIEND_AGREE: //info格式:ID卍昵称卍性别卍生日卍地址卍注册时间 string userInfo= System.Text.Encoding.UTF8.GetString(info); //分割info string[] userInfos = Regex.Split(userInfo, Constant.SPLIT, RegexOptions.IgnoreCase); //把消息存进数据库 sysmsg.Content = userInfo; sysmsg.Type = Constant.MSG_ADDFRIEND_AGREE; SystemMsgDB.instance.addSystemMsg(sysmsg.Content, sysmsg.Type); //把好友存进数据库 Friend fr=new Friend(); fr.UserId=userInfos[0]; fr.UserName=userInfos[1]; fr.Sex=Convert.ToInt32(userInfos[2]); fr.Birthday=userInfos[3]; fr.Address=userInfos[4]; fr.Time=userInfos[5]; FriendDB.uniqueInstance.addFriend(fr); //刷新好友列表 displayFriend(); break; } }
/// <summary> /// 获得最新的系统消息 /// </summary> /// <returns></returns> public SysMsg getASysMsg() { string msgId; string cmdString = "SELECT * FROM sysmsg where isRead = 0 order by msgId desc limit 1;"; conn.Open(); SQLiteCommand sql = new SQLiteCommand(cmdString, conn); SQLiteDataReader result = sql.ExecuteReader(); if (result.Read()) { SysMsg sysMsg = new SysMsg(); msgId = result[0].ToString(); sysMsg.Type = int.Parse(result[1].ToString()); sysMsg.Content = result[2].ToString(); result.Close(); sql.CommandText = "UPDATE sysmsg SET isRead = 1 WHERE msgId=" + msgId + ";"; sql.ExecuteNonQuery(); sql.Dispose(); conn.Close(); return sysMsg; } else//没有结果 { result.Close(); sql.Dispose(); conn.Close(); return null; } }