Пример #1
0
        /// <summary>
        /// 处理发来的消息
        /// </summary>
        /// <param name="dic"></param>
        public async Task handle_msg(JObject dic)
        {
            WriteLog("handle message");
            if (null != messageHandle)
            {
                messageHandle.WxSync(dic);
            }

            int intMegCount = dic["AddMsgList"].Count();

            if (intMegCount == 0)
            {
                return;
            }

            WriteLog(Const.LOG_MSG_NEW_MSG, intMegCount);

            JArray msgs = (JArray)dic["AddMsgList"];

            foreach (JObject element in msgs)
            {
                //JsonObject msg = element.getAsJsonObject();
                String      msgType     = ((JValue)element["MsgType"]).Value.ToString();
                String      content     = ((JValue)element["Content"]).Value.ToString().Replace("&lt;", "<").Replace("&gt;", ">");
                ChatMessage userMessage = new ChatMessage();
                userMessage.messageId     = ((JValue)element["MsgId"]).Value.ToString();
                userMessage.RawMsg        = element;
                userMessage.messageType   = (EnumMsgType)(int.Parse(msgType));
                userMessage.From.UserName = ((JValue)element["FromUserName"]).Value.ToString();
                userMessage.To.UserName   = ((JValue)element["ToUserName"]).Value.ToString();

                switch (userMessage.messageType)
                {
                case EnumMsgType.MSGTYPE_TEXT:
                    // 地理位置消息
                    if (content.Contains("pictype=location"))
                    {
                        String location = content.Split(new string[] { "<br/>" }, StringSplitOptions.None)[1];
                        userMessage.Location = location;
                        userMessage.message  = String.Format(Const.LOG_MSG_LOCATION, location);
                    }
                    else
                    {
                        // 普通文本
                        String text = null;
                        if (content.Contains(":<br/>"))
                        {
                            text = content.Split(new string[] { ":<br/>" }, StringSplitOptions.None)[1];
                        }
                        else
                        {
                            text = content;
                        }
                        userMessage.message = text;
                        //userMessage.Log = text.Replace("<br/>", "\n");
                    }
                    break;

                case EnumMsgType.MSGTYPE_IMAGE:
                    //byte[] bts = await GetMessageImg(msgId);
                    WriteLog(Const.LOG_MSG_PICTURE, "");
                    break;

                case EnumMsgType.MSGTYPE_STATUSNOTIFY:
                    WriteLog(Const.LOG_MSG_NOTIFY_PHONE);
                    break;
                }
                //// 文本groupMessage
                //if (conf["MSGTYPE_TEXT"] == msgType)
                //{

                //}
                //else if (conf["MSGTYPE_STATUSNOTIFY"] == msgType)
                //{
                //    WriteLog(Const.LOG_MSG_NOTIFY_PHONE);
                //    return;
                //}

                await this.show_msg(userMessage);

                //Boolean isGroupMsg = (((JValue)element["FromUserName"]).Value.ToString() + ((JValue)element["ToUserName"]).Value.ToString()).Contains("@@");
                if (userMessage.isGroup)
                {
                    GroupMessage groupMessage = await make_group_msg(userMessage);

                    if (null != messageHandle)
                    {
                        messageHandle.groupMessage(groupMessage);
                    }
                }
                else
                {
                    if (null != messageHandle)
                    {
                        messageHandle.userMessage(userMessage);
                    }
                }
            }
        }