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

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

解决方案:

一、

 1.文本

    可以直接获得发送失败的消息的内容和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.家书

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

  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,但是解决方案很死,不够灵活,并且无法和重新发送文本消息保持一致。

二、

  将发送失败的信息从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,所以只能讲其当做新的数据插入。



转载于:https://my.oschina.net/u/2357858/blog/492537

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值