重发发送失败的消息--众学

发送的信息的表被存在本地local:message_infohtml

解决方案:ui

1、code

 1.文本htm

    能够直接得到发送失败的消息的内容和message_id,而后将此消息当作新消息,从新发送对象

    function resendTextMessage(messageId,data){
     var sendMsg = escape(decodeURIComponent(data));
     var flag = "message_id_"+messageId;
     ueppscript('', "content", "sendTextMessage('"+sendMsg+"');");
     $("#"+flag).remove();
     delete_message_info(messageId);
    }

可是存在一个bug,若是渲染出来的对话框中有表情,则获取的sendMsg就会是图片,而不是文本,这样则没法处理。图片

2.家书ip

    仍然是获取家书的一些字段信息,而后将此家书从新发送rem

  function resendHomeBook(messageId,home_book_id){
          var home_data = [];
           var homeData = {};
           var objli = $('#message_id_'+messageId);
           var title = objli.find(".item-title").text();
           var content  =  objli.find(".item-con").html();
           homeData.home_book_id =  home_book_id;
           homeData.home_book_title = title;
           homeData.home_book_content = encodeURIComponent(content);
           home_data.push(homeData);    
           sendHomebookMessage(JSON.stringify(home_data));
           objli.remove();
           delete_message_info(messageId);          
    }

此方法当前不存在bug,可是解决方案很死,不够灵活,而且没法和从新发送文本消息保持一致。get

2、string

  将发送失败的信息从message_id中load出来,而后将此对象进行格式上的封装,与直接发送的信息保持一致,再将此对象直接扔进原来的方法,进行从新发送。

 function resendMessage(messageId){
        query_message_info(messageId,function(data){
        if(data.length>0){
             var datas = {};
         *    datas['data'] = new Array();
         *      data[0].messageId = uuid();
         *      var receiveTime = parseInt(Now())+1;
         *      data[0].receiveTime = receiveTime; 
         *      data[0].timeStamp = new Date().valueOf();
               
            if(data[0].content != undefined && data[0].content != 'undefined')
              data[0].content = JSON.parse(decodeURIComponent(data[0].content));
            if(data[0].extra !=undefined && data[0].extra != 'undefined')
              data[0].extra = JSON.parse(decodeURIComponent(data[0].extra));
              
              datas['data'][0] = data[0];
              addMessage(datas,messageTargetID, true, true);
             }
             
             $("#message_id_"+messageId).remove();
             delete_message_info(messageId);
        })
    }

  此方法即是将message_info中的对象直接取出来进行封装,不用管它具体是文本仍是家书,直接将其修改保持格式一致再发送就OK

 加“*”的代码则是将数据进行封装,由于调用的addMessage()方法中被规定了这种格式,不然没法调用。其中三个属性须要装入新的值,messageId和两个time,time涉及到增量,因此须要保持实时,messageId则是因为要根据主键删除旧的message_info,因此只能讲其当作新的数据插入。

相关文章
相关标签/搜索