⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notificationprocessor.java

📁 J2me实现的MSN Messeger客户端程序。聊天、添加好友、删除好友、阻止好友
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    if (bg.isListForward(accessId))
      fixAdd(bg.getForwardList(), hisLoginName, friend, groupIndex);
    if (bg.isListAllow(accessId))
      fixAdd(bg.getAllowList(), hisLoginName, friend, groupIndex);
    if (bg.isListBlock(accessId))
      fixAdd(bg.getBlockList(), hisLoginName, friend, groupIndex);
    if (bg.isListReverse(accessId))
      fixAdd(bg.getReverseList(), hisLoginName, friend, groupIndex);

      /*
       * Cannot determine that list completed.
       * Sooooooooooooooo overhead :(
       */
    collectComplete(msg);
  }

  private void fixAdd(BuddyList list, String loginName, MsnFriend friend,
                      int groupIndex) {
    MsnFriend old = list.get(loginName);
    if (old != null) {
      friend.setStatus(old.getStatus());
      old.setGroupIndex(groupIndex);
    }
    list.add(friend); //函数自动判断是否已在好友列表中
  }

  /**
   * 好友列表接收完成
   * @param msg IncomingMessage
   * @throws IOException
   */
  private void collectComplete(IncomingMessage msg) throws IOException {
    //msn.storeLocalCopy(lastSerial);//保存到本地
    msn.fireAllListUpdatedEvent();
  }

  /**
   * 设定我的状态
   * @param code String
   * @throws IOException
   */
  public void setMyStatus(String code) throws IOException {
    this.status = code;
    OutgoingMessage out = new OutgoingMessage("CHG");
    markTransactionId(out);
    out.add(code);
    sendMessage(out);
  }

  public String getMyStatus() {
    return this.status;
  }

  public void setMyFriendlyName(String newName) throws IOException {
//    Callback cb = Callback.getInstance("processRename", this.getClass());
    Callback cb = Callback.getInstance(PROCESS_RENAME);
    OutgoingMessage out = new OutgoingMessage("REA");
    markTransactionId(out);
    out.add(msn.getOwner().getLoginName());
    out.add(StringUtil.replaceString(newName, " ", "%20"));
    out.setBackProcess(cb);
    sendMessage(out);
  }

  public void processRename(IncomingMessage msg) throws IOException {
    if (!msg.getHeader().equals("REA")) {
      // Error, maybe 209? (Invalid friendly name)
      // For instance, request name include 'MSN', you'll fail.
      msn.fireRenameNotifyEvent(null);
      return;
    }

    int sn = msg.getInt(0);
    String ln = msg.get(1);
    String fn = msg.get(2);

    this.lastSerial = sn;
    msn.storeLocalCopy(lastSerial);

    msn.fireRenameNotifyEvent(new MsnFriend(ln, fn));
  }


  /**
   * \uFFFDwμ\uFFFD\uFFFD\uFFFD\uFFFDthread\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0474\uFFFD.
   */
  public void start() {
    if (callbackCleaner == null)
      startCallbackCleaner();
    super.start();
  }

  /**
   * Remove garbage callback per 30 minutes.
   * If callback's delay time over 3 minute, that callback should be removed.
   */
  private void startCallbackCleaner() {
    callbackCleaner = new Thread(new Runnable() {
      public final void run() {
        try {
          while (true) {
            Thread.currentThread().sleep(1000 * 60 * 30);
            //删除超过5分钟的回调函\uFFFD\uFFFD
            long limit = System.currentTimeMillis() - (long) (1000 * 60 * 3);
            synchronized (callbackMap) {
              //j2se version
//              for (Iterator i = callbackMap.values().iterator(); i.hasNext(); ) {
//                Callback cb = (Callback) i.next();
//                if (cb.getCreationTime() < limit)
//                  i.remove();
//              }
              // j2me \uFFFD\uFFFD2005/5/30 ceze
              for (Enumeration key = callbackMap.keys(); key.hasMoreElements(); ) {
                Callback cb = (Callback) callbackMap.get(key.nextElement());
                if (cb.getCreationTime() < limit)
                  callbackMap.remove(key);
              }
            }
          }
        }
        catch (InterruptedException e) {}
        catch (Exception e) {
          processError(e);
        }
      }
    });
    callbackCleaner.setPriority(Thread.MIN_PRIORITY);
    callbackCleaner.start();
  }

  /**
   * \uFFFD\u05BE\uFFFD\uFFFD\uFFFD loginName\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\u022D\uFFFD\uFFFD\u00FB \uFFFDwμ\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0474\uFFFD.
   */
  public void doCallFriend(String loginName) throws IOException {
    Callback cb = Callback.getInstance(CONNECT_SWITCHBOARD);
    OutgoingMessage out = new OutgoingMessage("XFR");
    markTransactionId(out);
    out.add("SB");
    out.setBackProcess(cb);

    callIdMap.put(new Integer(out.getTransactionId()), loginName);
    sendMessage(out);
  }

  public void requestAdd(String loginName) throws IOException {
    Callback cb = Callback.getInstance(RESPONSE_ADD);
    OutgoingMessage out = new OutgoingMessage("ADD");
    markTransactionId(out);
    out.add("FL");
    out.add(loginName);
    out.add(loginName);
    out.add("1");
    out.setBackProcess(cb);
    sendMessage(out);

    OutgoingMessage out2 = new OutgoingMessage("ADD");
    markTransactionId(out2);
    out2.add("AL");
    out2.add(loginName);
    out2.add(loginName);
    out2.setBackProcess(cb);
    sendMessage(out2);
  }

  public void responseAdd(IncomingMessage msg) throws IOException {
    String header = msg.getHeader();
    if (header.equals("ADD")) {
      String code = msg.get(0);
      lastSerial = msg.getInt(1);
      String loginName = msg.get(2);
      String custom = msg.get(3);

      MsnFriend friend = new MsnFriend(loginName, custom);
      BuddyList bl = msn.getBuddyGroup().getListAsCode(code);
      if (bl != null)
        bl.add(friend);
      msn.storeLocalCopy(lastSerial);
    }
    else {
      try {
        int errorCode = Integer.parseInt(header);
        msn.fireAddFailedEvent(errorCode);
      }
      catch (NumberFormatException e) {}
    }
  }

  public void requestRemove(String loginName) throws IOException {
//    Callback cb = Callback.getInstance("responseRemove", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_REMOVE);
    OutgoingMessage out = new OutgoingMessage("REM");
    markTransactionId(out);
    out.add("FL");
    out.add(loginName);
    out.setBackProcess(cb);
    sendMessage(out);

    OutgoingMessage out2 = new OutgoingMessage("REM");
    markTransactionId(out2);
    out2.add("AL");
    out2.add(loginName);
    out2.setBackProcess(cb);
    sendMessage(out2);
  }

  public void responseRemove(IncomingMessage msg) throws IOException {
    if (msg.getHeader().equals("REM")) {
      String code = msg.get(0);
      lastSerial = msg.getInt(1);
      String loginName = msg.get(2);

      BuddyList bl = msn.getBuddyGroup().getListAsCode(code);
      if (bl != null)
        bl.remove(loginName);
      msn.storeLocalCopy(lastSerial);
    }
  }

  /**
   * Block/Unblock the specified user.
   */
  public void requestBlock(String loginName, boolean isUnblock) throws
      IOException {
    BuddyList fl = msn.getBuddyGroup().getForwardList();
    MsnFriend friend = fl.get(loginName);
    if (friend == null)
      return;

//    Callback cb = Callback.getInstance("responseBlock", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_BLOCK);

    OutgoingMessage out = new OutgoingMessage("REM");
    markTransactionId(out);
    out.add(isUnblock ? "BL" : "AL");
    out.add(loginName);
    out.setBackProcess(cb);

    sendMessage(out);

    OutgoingMessage out2 = new OutgoingMessage("ADD");
    markTransactionId(out2);
    out2.add(isUnblock ? "AL" : "BL");
    out2.add(loginName);
    out2.add(friend.getFriendlyName());
    out2.setBackProcess(cb);
    sendMessage(out2);
  }

  /**
   * Callback to unblock user.
   */
  public void responseBlock(IncomingMessage msg) throws IOException {
    String header = msg.getHeader();

    if (Character.isDigit(header.charAt(0)))
      return;

    String code = msg.get(0);
    lastSerial = msg.getInt(1);
    String loginName = msg.get(2);

    BuddyList bl = msn.getBuddyGroup().getListAsCode(code);
    if (bl != null) {
      if (header.equals("REM")) {
        bl.remove(loginName);
        msn.storeLocalCopy(lastSerial);
      }
      else
      if (header.equals("ADD")) {
        BuddyList fl = msn.getBuddyGroup().getForwardList();
        MsnFriend friend = fl.get(loginName);
        if (friend != null) {
          bl.add(friend);
          msn.storeLocalCopy(lastSerial);
        }
      }
    }
  }

  /**
   * \uFFFD\u05BE\uFFFD\uFFFD\uFFFD \u0123\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\u05F7\uFFFD; \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0474\uFFFD.
   * \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03F5\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\u01FE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u01F7\uFFFD, \uFFFD\uFFFD\uFFFD\u07FB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD
   */
  public void requestMoveGroup(MsnFriend friend, int oldIndex, int newIndex) throws
      IOException {
//    Callback cb = Callback.getInstance("responseGroupAdd", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_GROUPADD);
    OutgoingMessage out = new OutgoingMessage("ADD");
    markTransactionId(out);
    out.add("FL");
    out.add(friend.getLoginName());
    out.add(friend.getFriendlyName());
    out.add(newIndex);
    out.setBackProcess(cb);
    sendMessage(out);

//    cb = Callback.getInstance("responseGroupRemove", this.getClass());
    cb = Callback.getInstance(RESPONSE_GROUPREMOVE);
    OutgoingMessage out2 = new OutgoingMessage("REM");
    markTransactionId(out2);
    out2.add("FL");
    out2.add(friend.getLoginName());
    out2.add(oldIndex);
    out2.setBackProcess(cb);
    sendMessage(out2);
  }

  public void responseGroupAdd(IncomingMessage msg) throws IOException {
    if (msg.size() < 5)
      return;

    String code = msg.get(0);
    int lastSerial = msg.getInt(1);
    String ln = msg.get(2);
    String fn = msg.get(3);
    int groupIndex = msg.getInt(4);

    BuddyList bl = msn.getBuddyGroup().getListAsCode(code);
    if (bl != null) {
      MsnFriend f = bl.get(ln);
      f.setFriendlyName(fn);
      f.setGroupIndex(groupIndex);
    }

    msn.storeLocalCopy(lastSerial);
  }

  public void responseGroupRemove(IncomingMessage msg) throws IOException {
    if (msg.size() < 2)
      return;

    String code = msg.get(0);
    int lastSerial = msg.getInt(1);

    msn.storeLocalCopy(lastSerial);
  }

  // \uFFFD\u05F7\uFFFD \uFFFD\u07F0\uFFFD,\uFFFD\uFFFDf,Rename \uFFFD\uFFFD\uFFFD\uFFFDmethod

  /**
   *
   * @param groupName \uFFFD\u03F9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\u05F7\uFFFD\uFFFD\u0338\uFFFD; \uFFFD\u05B4\u00B4\uFFFD.
   *                  \uFFFD\uFFFD \uFFFD\u07BC\u04B5峻\uFFFDο\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD \uFFFD\u05F7\uFFFD\uFFFD\u0338\uFFFD; UTF-8 URL Encoding\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\u0334\uFFFD.
   * @throws IOException
   */
  public void requestCreateGroup(String groupName) throws IOException {
//    Callback cb = Callback.getInstance("responseCreateGroup", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_CREATEGROUP);
    OutgoingMessage out = new OutgoingMessage("ADG");
    markTransactionId(out);
    out.add(MimeUtility.getURLEncodedString(groupName, "UTF-8"));
    out.add(0);
    out.setBackProcess(cb);
    sendMessage(out);
  }

  public void responseCreateGroup(IncomingMessage msg) throws IOException {
    if (msg.getHeader().equals("ADG")) {
      int sn = msg.getInt(0);
      String newName = MimeUtility.getURLDecodedString(msg.get(1), "UTF-8");
      int index = msg.getInt(2);

      Group group = new Group(newName, index);
      GroupList gl = msn.getBuddyGroup().getGroupList();
      gl.addGroup(group);
      msn.storeLocalCopy(this.lastSerial = sn);
    }
  }

  public void requestRemoveGroup(int groupIndex) throws IOException {
//    Callback cb = Callback.getInstance("responseRemoveGroup", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_REMOVEGROUP);
    OutgoingMessage out = new OutgoingMessage("RMG");
    markTransactionId(out);
    out.add(groupIndex);
    out.setBackProcess(cb);
    sendMessage(out);
  }

  public void responseRemoveGroup(IncomingMessage msg) throws IOException {
    if (msg.getHeader().equals("RMG")) {
      int sn = msg.getInt(0);
      int index = msg.getInt(1);

      this.lastSerial = sn;

      GroupList gl = msn.getBuddyGroup().getGroupList();
      gl.removeGroup(index);
      msn.storeLocalCopy(lastSerial);
    }
  }

  public void requestRenameGroup(int groupIndex, String newName) throws
      IOException {
//    Callback cb = Callback.getInstance("responseRenameGroup", this.getClass());
    Callback cb = Callback.getInstance(RESPONSE_RENAMEGROUP);
    OutgoingMessage out = new OutgoingMessage("REG");
    markTransactionId(out);
    out.add(groupIndex);
    out.add(MimeUtility.getURLEncodedString(newName, "UTF-8"));
    out.add(0);
    out.setBackProcess(cb);
    sendMessage(out);
  }

  public void responseRenameGroup(IncomingMessage msg) throws IOException {
    if (msg.getHeader().equals("REG")) {
      int sn = msg.getInt(0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -