📄 utils.java
字号:
return "QQ.QQ_CMD_GET_USER_INFO";
case QQ.QQ_CMD_ADD_FRIEND:
return "QQ.QQ_CMD_ADD_FRIEND";
case QQ.QQ_CMD_DELETE_FRIEND:
return "QQ.QQ_CMD_DELETE_FRIEND";
case QQ.QQ_CMD_ADD_FRIEND_AUTH:
return "QQ.QQ_CMD_ADD_FRIEND_AUTH";
case QQ.QQ_CMD_CHANGE_STATUS:
return "QQ.QQ_CMD_CHANGE_STATUS";
case QQ.QQ_CMD_ACK_SYS_MSG:
return "QQ.QQ_CMD_ACK_SYS_MSG";
case QQ.QQ_CMD_SEND_IM:
return "QQ.QQ_CMD_SEND_IM";
case QQ.QQ_CMD_RECV_IM:
return "QQ.QQ_CMD_RECV_IM";
case QQ.QQ_CMD_REMOVE_SELF:
return "QQ.QQ_CMD_REMOVE_SELF";
case QQ.QQ_CMD_LOGIN:
return "QQ.QQ_CMD_LOGIN";
case QQ.QQ_CMD_GET_FRIEND_LIST:
return "QQ.QQ_CMD_GET_FRIEND_LIST";
case QQ.QQ_CMD_GET_FRIEND_ONLINE:
return "QQ.QQ_CMD_GET_FRIEND_ONLINE";
case QQ.QQ_CMD_CLUSTER_CMD:
return "QQ.QQ_CMD_CLUSTER_CMD";
case QQ.QQ_CMD_RECV_MSG_SYS:
return "QQ.QQ_CMD_RECV_MSG_SYS";
case QQ.QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS:
return "QQ.QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS";
case QQ.QQ_CMD_REQUEST_KEY:
return "QQ_CMD_REQUEST_KEY";
case QQ.QQ_CMD_GROUP_NAME_OP:
return "QQ_CMD_GROUP_NAME_OP";
case QQ.QQ_CMD_UPLOAD_GROUP_FRIEND:
return "QQ_CMD_UPLOAD_GROUP_FRIEND";
case QQ.QQ_CMD_DOWNLOAD_GROUP_FRIEND:
return "QQ_CMD_DOWNLOAD_GROUP_FRIEND";
case QQ.QQ_CMD_FRIEND_REMARK_OP:
return "QQ_CMD_FRIEND_REMARK_OP";
default:
return "UNKNOWN_TYPE " + (int)cmd;
}
}
/**
* 得到群操作的字符串形式,仅用于调试
* @param cmd
* @return
*/
public static String getClusterCommandString(byte cmd) {
switch (cmd) {
case QQ.QQ_CLUSTER_CMD_CREATE_CLUSTER:
return "QQ_CLUSTER_CMD_CREATE_CLUSTER";
case QQ.QQ_CLUSTER_CMD_MEMBER_OPT:
return "QQ_CLUSTER_CMD_MEMBER_OPT";
case QQ.QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO:
return "QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO";
case QQ.QQ_CLUSTER_CMD_GET_CLUSTER_INFO:
return "QQ_CLUSTER_CMD_GET_CLUSTER_INFO";
case QQ.QQ_CLUSTER_CMD_ACTIVATE_CLUSTER:
return "QQ_CLUSTER_CMD_ACTIVATE_CLUSTER";
case QQ.QQ_CLUSTER_CMD_SEARCH_CLUSTER:
return "QQ_CLUSTER_CMD_SEARCH_CLUSTER";
case QQ.QQ_CLUSTER_CMD_JOIN_CLUSTER:
return "QQ_CLUSTER_CMD_JOIN_CLUSTER";
case QQ.QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH:
return "QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH";
case QQ.QQ_CLUSTER_CMD_EXIT_CLUSTER:
return "QQ_CLUSTER_CMD_EXIT_CLUSTER";
case QQ.QQ_CLUSTER_CMD_SEND_IM:
return "QQ_CLUSTER_CMD_SEND_IM";
case QQ.QQ_CLUSTER_CMD_GET_ONLINE_MEMBER:
return "QQ_CLUSTER_CMD_GET_ONLINE_MEMBER";
case QQ.QQ_CLUSTER_CMD_GET_MEMBER_INFO:
return "QQ_CLUSTER_CMD_GET_MEMBER_INFO";
default:
return "Unknown QQ Group Command";
}
}
/**
* 返回文件命令的字符串形式,仅用作调试
* @param command
* @return
*/
public static String getFileCommandString(char command) {
switch(command) {
case QQ.QQ_FILE_CMD_HEART_BEAT:
return "QQ_FILE_CMD_HEART_BEAT";
case QQ.QQ_FILE_CMD_HEART_BEAT_ACK:
return "QQ_FILE_CMD_HEART_BEAT_ACK";
case QQ.QQ_FILE_CMD_TRANSFER_FINISHED:
return "QQ_FILE_CMD_TRANSFER_FINISHED";
case QQ.QQ_FILE_CMD_FILE_OP:
return "QQ_FILE_CMD_FILE_OP";
case QQ.QQ_FILE_CMD_FILE_OP_ACK:
return "QQ_FILE_CMD_FILE_OP_ACK";
case QQ.QQ_FILE_CMD_SENDER_SAY_HELLO:
return "QQ_FILE_CMD_SENDER_SAY_HELLO";
case QQ.QQ_FILE_CMD_SENDER_SAY_HELLO_ACK:
return "QQ_FILE_CMD_SENDER_SAY_HELLO_ACK";
case QQ.QQ_FILE_CMD_RECEIVER_SAY_HELLO:
return "QQ_FILE_CMD_RECEIVER_SAY_HELLO";
case QQ.QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK:
return "QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK";
case QQ.QQ_FILE_CMD_NOTIFY_IP_ACK:
return "QQ_FILE_CMD_NOTIFY_IP_ACK";
case QQ.QQ_FILE_CMD_TEST_CONNECTION:
return "QQ_FILE_CMD_TEST_CONNECTION";
case QQ.QQ_FILE_CMD_TEST_CONNECTION_ACK:
return "QQ_FILE_CMD_TEST_CONNECTION_ACK";
case QQ.QQ_FILE_CMD_NOTIFY_NAT_PORT:
return "QQ_FILE_CMD_0040";
default:
return "UNKNOWN TYPE " + (int)command;
}
}
/**
* @param clientTag 客户端标识
* @return 客户端标识的字符串形式,用于调试
*/
public static String getClientString(char clientTag) {
switch (clientTag) {
case QQ.QQ_CLIENT_062E:
return "GB QQ2000c build 630";
case QQ.QQ_CLIENT_072E:
return "En QQ2000c build 305";
case QQ.QQ_CLIENT_0801:
return "En QQ2000c build 630";
case QQ.QQ_CLIENT_0A1D:
return "GB QQ2003c build 0808";
case QQ.QQ_CLIENT_0B07:
return "GB QQ2003c build 0925";
case QQ.QQ_CLIENT_0B2F:
return "GB QQ2003iii build 0117";
case QQ.QQ_CLIENT_0B35:
return "GB QQ2003iii build 0304";
case QQ.QQ_SERVER_0100:
return "QQ Server 0100";
default:
return "QQ unknown version";
}
}
/**
* 得到状态的字符串表示
* @param status 状态码
* @return 字符串形式的状态码
*/
public static String getStatusString(byte status) {
switch(status) {
case QQ.QQ_FRIEND_STATUS_ONLINE:
return "online";
case QQ.QQ_FRIEND_STATUS_OFFLINE:
return "offline";
case QQ.QQ_FRIEND_STATUS_AWAY:
return "away";
case QQ.QQ_FRIEND_STATUS_HIDDEN:
return "hidden";
default:
return "Unknown Status";
}
}
/**
* 这个不是用于调试的,真正要用的方法
* @param encoding 编码方式
* @return 编码方式的字符串表示形式
*/
public static String getEncodingString(char encoding) {
switch(encoding) {
case QQ.QQ_IM_ENCODING_GB:
return "GBK";
case QQ.QQ_IM_ENCODING_EN:
return "ISO-8859-1";
case QQ.QQ_IM_ENCODING_BIG5:
return "BIG5";
default:
return "GBK";
}
}
/**
* 用于调试
* @param type 收到的消息类型
* @return 消息类型的字符串表示
*/
public static String getIMTypeString(char type) {
switch (type) {
case QQ.QQ_RECV_IM_TO_BUDDY:
return "QQ_RECV_IM_TO_BUDDY";
case QQ.QQ_RECV_IM_TO_UNKNOWN:
return "QQ_RECV_IM_TO_UNKNOWN";
case QQ.QQ_RECV_IM_CLUSTER_IM:
return "QQ_RECV_IM_CLUSTER_IM";
case QQ.QQ_RECV_IM_ADDED_TO_CLUSTER:
return "QQ_RECV_IM_ADDED_TO_CLUSTER";
case QQ.QQ_RECV_IM_DELETED_FROM_CLUSTER:
return "QQ_RECV_IM_DEL_FROM_CLUSTER";
case QQ.QQ_RECV_IM_REQUEST_JOIN_CLUSTER:
return "QQ_RECV_IM_REQUEST_JOIN_CLUSTER";
case QQ.QQ_RECV_IM_CREATE_CLUSTER:
return "QQ_RECV_IM_CREATE_CLUSTER";
case QQ.QQ_RECV_IM_SYS_MESSAGE:
return "QQ_RECV_IM_SYS_MESSAGE";
case QQ.QQ_RECV_IM_APPROVE_JOIN_CLUSTER:
return "QQ_RECV_IM_APPROVE_JOIN_CLUSTER";
case QQ.QQ_RECV_IM_REJECT_JOIN_CLUSTER:
return "QQ_RECV_IM_REJECT_JOIN_CLUSTER";
default:
return "QQ_RECV_IM_UNKNOWN";
}
}
/**
* 返回普通消息中的类型,仅用作调试
* @param type
* @return
*/
public static String getNormalIMTypeString(char type) {
switch(type) {
case QQ.QQ_IM_NORMAL_TEXT:
return "QQ_IM_NORMAL_TEXT";
case QQ.QQ_IM_TCP_REQUEST:
return "QQ_IM_TCP_REQUEST";
case QQ.QQ_IM_ACCEPT_TCP_REQUEST:
return "QQ_IM_ACCEPT_TCP_REQUEST";
case QQ.QQ_IM_REJECT_TCP_REQUEST:
return "QQ_IM_REJECT_TCP_REQUEST";
case QQ.QQ_IM_UDP_REQUEST:
return "QQ_IM_UDP_REQUEST";
case QQ.QQ_IM_ACCEPT_UDP_REQUEST:
return "QQ_IM_ACCEPT_UDP_REQUEST";
case QQ.QQ_IM_REJECT_UDP_REQUEST:
return "QQ_IM_REJECT_UDP_REQUEST";
case QQ.QQ_IM_NOTIFY_IP:
return "QQ_IM_NOTIFY_IP";
case QQ.QQ_IM_PLEASE_CONNECT_ME:
return "QQ_IM_PLEASE_CONNECT_ME";
case QQ.QQ_IM_REPORT_CONNECTION_SOURCE_INFO:
return "QQ_IM_REPORT_CONNECTION_SOURCE_INFO";
case QQ.QQ_IM_REPORT_CONNECTION_DEST_INFO:
return "QQ_IM_REPORT_CONNECTION_DEST_INFO";
case QQ.QQ_IM_REQUEST_CANCELED:
return "QQ_IM_REQUEST_CANCELED";
default:
return String.valueOf((int)type);
}
}
/**
* 返回字符串形式的回复类型,仅用于调试
* @param type 回复类型
* @return 字符串形式的回复类型
*/
public static String getIMReplyType(byte type) {
switch(type) {
case QQ.QQ_IM_NORMAL_REPLY:
return "QQ_IM_TEXT";
case QQ.QQ_IM_AUTO_REPLY:
return "QQ_IM_AUTO_REPLY";
default:
return "UNKNOWN";
}
}
/**
* 在buf字节数组中的begin位置开始,查找字节b出现的第一个位置
* @param buf 字节数组
* @param begin 开始未知索引
* @param b 要查找的字节
* @return 找到则返回索引,否则返回-1
*/
public static int indexOf(byte[] buf, int begin, byte b) {
for(int i = begin; i < buf.length; i++) {
if(buf[i] == b)
return i;
}
return -1;
}
/**
* 在buf字节数组中的begin位置开始,查找字节数组b中只要任何一个出现的第一个位置
* @param buf 字节数组
* @param begin 开始未知索引
* @param b 要查找的字节数组
* @return 找到则返回索引,否则返回-1
*/
public static int indexOf(byte[] buf, int begin, byte[] b) {
for(int i = begin; i < buf.length; i++) {
for(int j = 0; j < b.length; j++)
if(buf[i] == b[j])
return i;
}
return -1;
}
/**
* @return Random对象
*/
public static Random random() {
if (random == null)
random = new Random();
return random;
}
/**
* 从content的offset位置起的4个字节解析成int类型
* @param content 字节数组
* @param offset 偏移
* @return int
*/
public static final int parseInt(byte[] content, int offset) {
return ((content[offset++] & 0xff) << 24) | ((content[offset++] & 0xff) << 16) | ((content[offset++] & 0xff) << 8) | (content[offset++] & 0xff);
}
/**
* 从content的offset位置起的2个字节解析成char类型
* @param content 字节数组
* @param offset 偏移
* @return char
*/
public static final char parseChar(byte[] content, int offset) {
return (char) (((content[offset++] & 0xff) << 8) | (content[offset++] & 0xff));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -