コード例 #1
0
  @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);
      }
    }
  }
コード例 #2
0
  @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);
      }
    }
  }