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

📄 updatecontactlistaction.java.svn-base

📁 类似QQ的功能
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************* Jimm - Mobile Messaging - J2ME ICQ clone Copyright (C) 2003-05  Jimm Project This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. ******************************************************************************** File: src/jimm/comm/UpdateContactListAction.java Version: ###VERSION###  Date: ###DATE### Author(s): Manuel Linsmayer, Andreas Rossbacher *******************************************************************************/package jimm.comm;import jimm.ContactItem;import jimm.ContactListGroupItem;import jimm.ContactListItem;import jimm.ContactList;import jimm.JimmException;import jimm.MainThread;import java.io.ByteArrayOutputStream;import java.util.*;public class UpdateContactListAction extends Action{	/* Action states */	private static final int STATE_ERROR = -1;	private static final int STATE_CLI_ROSTERMODIFY_SENT = 1;	private static final int STATE_COMPLETED = 2;	private static final int STATE_MOVE1 = 3;	private static final int STATE_MOVE2 = 4;	private static final int STATE_REQ_AUTH1 = 5;	private static final int STATE_ADD_CONTACT1 = 6;	private static final int STATE_ADD_CONTACT2 = 14;	private static final int STATE_DELETE_CONTACT1 = 7;	private static final int STATE_DELETE_CONTACT2 = 8;	private static final int STATE_DELETE_GROUP1 = 9;	private static final int STATE_DELETE_GROUP2 = 10;	private static final int STATE_ADD_GROUP1 = 11;	private static final int STATE_ADD_GROUP2 = 12;	/* Action types */	public static final int ACTION_ADD        = 1;	public static final int ACTION_DEL        = 2;	public static final int ACTION_RENAME     = 3;	public static final int ACTION_MOVE       = 4;	public static final int ACTION_REQ_AUTH   = 5;	public static final int ACTION_PRIV_LISTS = 6;	/* Timeout */	public static final int TIMEOUT = 10 * 1000; // milliseconds	/** ************************************************************************* */	/* Contact item */	private ContactItem cItem;	/* Group item */	private ContactListGroupItem gItem, newGItem;	/* Action state */	private int state;	/* Action type */	private int action;	/* Type of error happend */	private int errorCode;	/* Last activity */	private long lastActivity = System.currentTimeMillis();	/* Constructor (removes or adds given contact item) */	public UpdateContactListAction(ContactListItem cItem, int _action)	{		super(false, true);		this.action = _action;		if (cItem instanceof ContactItem)		{			this.cItem = (ContactItem) cItem;			this.gItem = null;		} else		{			this.cItem = null;			this.gItem = (ContactListGroupItem) cItem;		}	}	public UpdateContactListAction(ContactItem cItem, ContactListGroupItem oldGroup, ContactListGroupItem newGroup)	{		super(false, true);		this.cItem = cItem;		this.gItem = oldGroup;		this.newGItem = newGroup;		action = ACTION_MOVE;	}		public UpdateContactListAction(Vector privacyChanges)	{		super(false, true);	}	/* Init action */	protected void init() throws JimmException	{		SnacPacket packet;		byte[] buf = null;		if (this.action != ACTION_RENAME)		{			/* Send a CLI_ADDSTART packet */			Icq.sendCLI_ADDSTART();		}		switch (action)		{		/* Send a CLI_ROSTERUPDATE packet */		case ACTION_RENAME:			if (cItem != null)				buf = packRosterItem(cItem, 0);			else if (gItem != null)				buf = packRosterItem(gItem);			else			{			    this.state = UpdateContactListAction.STATE_ERROR;			    break;			}			packet = new SnacPacket(SnacPacket.CLI_ROSTERUPDATE_FAMILY,					SnacPacket.CLI_ROSTERUPDATE_COMMAND, Util.getCounter(),					new byte[0], buf);			Icq.sendPacket(packet);			this.state = UpdateContactListAction.STATE_CLI_ROSTERMODIFY_SENT;			break;		/* Send CLI_ROSTERADDpacket */		case ACTION_ADD:		case ACTION_REQ_AUTH:			if (cItem != null)			{				int groupId = cItem.getIntValue(ContactItem.CONTACTITEM_GROUP);				gItem = ContactList.getGroupById(groupId);				cItem.setIntValue(ContactItem.CONTACTITEM_ID, ContactList.generateNewIdForBuddy());				MainThread.addContact(cItem);				buf = packRosterItem(cItem, groupId);				if (action == ACTION_REQ_AUTH) state = STATE_REQ_AUTH1;				else state = STATE_ADD_CONTACT1;			} else if (gItem != null)			{				buf = packRosterItem(gItem);				state = STATE_ADD_GROUP1;			} else			{			    this.state = UpdateContactListAction.STATE_ERROR;			    break;			}			packet = new SnacPacket(SnacPacket.CLI_ROSTERADD_FAMILY,					SnacPacket.CLI_ROSTERADD_COMMAND, Util.getCounter(),					new byte[0], buf);			Icq.sendPacket(packet);			break;		/* Send a CLI_ROSTERDELETE packet */		case ACTION_DEL:			if (cItem != null)			{				buf = packRosterItem(cItem, 0);				this.state = STATE_DELETE_CONTACT1;			} else if (gItem != null)			{				buf = packRosterItem(gItem);				this.state = STATE_DELETE_GROUP1;			} else			{			    this.state = UpdateContactListAction.STATE_ERROR;			    break;			}			packet = new SnacPacket(SnacPacket.CLI_ROSTERDELETE_FAMILY,					SnacPacket.CLI_ROSTERDELETE_COMMAND, Util.getCounter(),					new byte[0], buf);			Icq.sendPacket(packet);			break;        case ACTION_MOVE:            Icq.sendPacket            (                 new SnacPacket                 (                      SnacPacket.CLI_ROSTERUPDATE_FAMILY,                      SnacPacket.CLI_ROSTERDELETE_COMMAND,                      SnacPacket.CLI_ROSTERDELETE_COMMAND|((ContactList.generateNewIdForBuddy() << 16)&0x7FFF0000),                       new byte[0],                      packRosterItem(cItem, gItem.getId())                 )            );            cItem.setIntValue(ContactItem.CONTACTITEM_GROUP, newGItem.getId());            cItem.setIntValue(ContactItem.CONTACTITEM_ID, ContactList.generateNewIdForBuddy());            Icq.sendPacket            (                 new SnacPacket                 (                      SnacPacket.CLI_ROSTERUPDATE_FAMILY,                      SnacPacket.CLI_ROSTERADD_COMMAND,                      SnacPacket.CLI_ROSTERADD_COMMAND|((ContactList.generateNewIdForBuddy() << 16)&0x7FFF0000),                      new byte[0],                      packRosterItem(cItem, newGItem.getId())                 )            );                        state = STATE_MOVE1;                        break;		}	}	private boolean processPaket(Packet packet) throws JimmException	{		/* Flag indicates whether packet has been consumed or not */		boolean consumed = false;		/* Watch out for SRV_UPDATEACK packet type */		if (packet instanceof SnacPacket)		{			SnacPacket snacPacket = (SnacPacket) packet;			if ((snacPacket.getFamily() == SnacPacket.SRV_UPDATEACK_FAMILY)					&& (snacPacket.getCommand() == SnacPacket.SRV_UPDATEACK_COMMAND))			{				// Check error code, see ICQv8 specification				int retCode = Util.getWord(snacPacket.getData(), 0);				switch (retCode)				{				case 0x002:					errorCode = 154;					break;				case 0x003:					errorCode = 155;					break;				case 0x00A:					errorCode = 156;					break;				case 0x00C:					errorCode = 157;					break;				case 0x00D:					errorCode = 158;					break;				}				if (errorCode != 0)				{					state = STATE_ERROR;					return true;				}				switch (state)				{				/* STATE_DELETE_GROUP */				case STATE_DELETE_GROUP1:					sendGroupsList();					this.state = STATE_DELETE_GROUP2;					break;				case STATE_DELETE_GROUP2:					ContactList.removeGroup(this.gItem);					this.state = STATE_COMPLETED;					Icq.sendCLI_ADDEND();					break;				/* STATE_ADD_GROUP */				case STATE_ADD_GROUP1:					sendGroupsList();

⌨️ 快捷键说明

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