@Override public void Heartbeat(int arg0) throws Exception { synchronized (this) { if (this.userState != GSUserState.Login) { logger.warn("drop heartbeat -- user state({}) error", this.userState); return; } int receivedID = binderDataBase.getReceivedSeqID(); logger.debug("received heartbeat {} local {}", arg0, receivedID); if (receivedID < arg0) { imServer.pollMessage(this.client.getToken(), receivedID); } } }
@Override public void sendMessage(final IPCMessage ipcMessage) throws RemoteException { synchronized (this) { if (this.userState != GSUserState.Login) { ipcMessage.setState(GSMessageState.SendFailed); onMessageStateChanged(ipcMessage, GSError.LOGIN_FIRST); return; } ipcMessage.setSource(this.client.getUser()); try { Gson gson = new Gson(); JsonObject json = (JsonObject) gson.toJsonTree(ipcMessage); JsonArray bodies = new JsonArray(); bodies.add(new JsonParser().parse(ipcMessage.getContent())); json.add("bodies", bodies); final String content = json.toString(); logger.debug("send message :{}", content); ipcMessage.setState(GSMessageState.LocalApply); this.binderDataBase.saveMessage(ipcMessage, this); onMessageStateChanged(ipcMessage, GSError.SUCCESS); // create rpc message package Message message = new Message(); message.setSeqID(ipcMessage.getSeqID()); message.setSource(ipcMessage.getSource()); message.setTarget(ipcMessage.getTarget()); message.setType(ipcMessage.getType()); message.setContent(content.getBytes("UTF-8")); imServer.sendMessage(ipcMessage.getId(), message); ipcMessage.setState(GSMessageState.Sending); this.binderDataBase.updateMessageState(ipcMessage.getId(), ipcMessage.getState()); onMessageStateChanged(ipcMessage, GSError.SUCCESS); } catch (Exception e) { logger.error("send message({}) error", ipcMessage.getId(), e); ipcMessage.setState(GSMessageState.SendFailed); try { this.binderDataBase.updateMessageState(ipcMessage.getId(), ipcMessage.getState()); } catch (Exception e1) { logger.error( "save message({}) state({}) error", ipcMessage.getId(), ipcMessage.getState(), e); } onMessageStateChanged(ipcMessage, GSError.UNKNOWN_ERROR); } } }