/** * 【重发短消息方法】 * * <p>(non-Javadoc) * * @see * net.x_talker.as.im.handler.resend.IMResendHandler#resendIM(net.x_talker.as.im.container.entity.XTalkerSipMsg, * int) */ @Override public void resendIM(XTalkerSipMsg sipMsg) { logger.info("resend message, from:" + sipMsg.getFrom() + ", to:" + sipMsg.getTo()); Map<ResendParamEnum, Integer> resendParams = getResendParams(sipMsg.getStatus()); // 如果重发次数未达到设置的最大重发次数,则再次重发消息 if (sipMsg.getResendTimes() < resendParams.get(ResendParamEnum.resendTimes)) { sipMsg.setResendTimes(sipMsg.getResendTimes() + 1); long delayTime = resendParams.get(ResendParamEnum.resendInterval); // 重发消息设置为定时发送消息,发送时间为当前时间向后推一个重发间隔 DelayedMessage<XTalkerSipMsg> msg = new DelayedMessage<XTalkerSipMsg>( delayTime, TimeUnit.SECONDS, DelayedTypeEnum.ResendMessage); msg.setItem(sipMsg); DelayedContainer.getInstance().addItem(msg); // 如果为短消息则修改消息状态为重发中 if (sipMsg.getMessageBody() instanceof ShortMessage) { MessageState state = new MessageState( sipMsg.getMessageBody().getMessageId(), new Timestamp(System.currentTimeMillis()), BizConsts.MessageStateCode.MESSAGE_SATTE_SMC_RESEND); MessageStateContainer.getInstance().addMessageState(state); } // 如果消息是短消息生成失败回执,如果是回执不用处理 } else if (sipMsg.getMessageBody() instanceof ShortMessage) { logger.info( "this message has send " + BizConsts.DEFAULT_MESSAGE_RESEND_TIMES + " times,send fail receipt"); imReceipt.receiptHandle(sipMsg); } }