예제 #1
0
        /// <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;
            }
        }
예제 #2
0
 /// <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;
     }
 }