📄 notificationprocessor.java
字号:
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 + -