package com.zhujizheng.IHome.chat.net; import com.zhujizheng.IHome.chat.dto.PYOfflineMsgDTO; import com.zhujizheng.IHome.chat.service.PYSingleChatService; import com.zhujizheng.IHome.chat.vo.PYOfflineMsgVO; import com.zhujizheng.IHome.chat.vo.PYSingleChatAckVO; import com.zhujizheng.IHome.websocket.Net.Base.NetProtocolBase; import com.zhujizheng.IHome.websocket.Net.exception.NetException; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @Slf4j @Component public class NetOfflineChatMsg extends NetProtocolBase { @Autowired private PYSingleChatService service; @Override public void dealWithJSONAndSid(JSONObject json, String sid) { super.dealWithJSONAndSid(json, sid); PYOfflineMsgDTO dto = (PYOfflineMsgDTO) JSONObject.toBean(json, PYOfflineMsgDTO.class); List list = service.pullOfflineSingleChatVO(Integer.parseInt(sid), dto.getReceiveId(), dto.getLatestTime()); PYOfflineMsgVO vo = PYOfflineMsgVO.createVOWithDTO(dto); if (vo == null) { this.sendServerError(sid); } else { if (list != null) { vo.setList(list); vo.setResult(true); } AtomicReference sendSuccess = new AtomicReference<>(true); try { this.sendObject(vo, sid); } catch (NetException e) { e.printStackTrace(); sendSuccess.set(false); } finally { if (sendSuccess.get() && list != null) { for (PYSingleChatAckVO ackVO : list) { service.updateOffline(ackVO.getMsgSeq()); } } } } } }