最近学习了解了下MSN机器人头像显示部分的资料,协议资料地址http://msnpiki.msnfanatic.com/index.php/MSNC:Display_pictures
在MSN协议中,图像显示采用的是p2p协议。
下面这段代码用于解析和生成p2p数据包中的BinaryHeader部分。
/**
*
*/
package com.msnbot.entity;
/**
* @author jjhuang
*
*/
public class BinaryHeader {
private int sessionId;
private int identifier;
private long dataOffset;
private long totalDataSize;
private int messageLength;
private int flag;
private int AKLIdentifier;
private int AKLUniqueId;
private long AKLDataSize;
public int getSessionId() {
return sessionId;
}
public void setSessionId(int sessionId) {
this.sessionId = sessionId;
}
public int getIdentifier() {
return identifier;
}
public void setIdentifier(int identifier) {
this.identifier = identifier;
}
public long getDataOffset() {
return dataOffset;
}
public void setDataOffset(long dataOffset) {
this.dataOffset = dataOffset;
}
public long getTotalDataSize() {
return totalDataSize;
}
public void setTotalDataSize(long totalDataSize) {
this.totalDataSize = totalDataSize;
}
public int getMessageLength() {
return messageLength;
}
public void setMessageLength(int messageLength) {
this.messageLength = messageLength;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public int getAKLIdentifier() {
return AKLIdentifier;
}
public void setAKLIdentifier(int identifier) {
AKLIdentifier = identifier;
}
public int getAKLUniqueId() {
return AKLUniqueId;
}
public void setAKLUniqueId(int uniqueId) {
AKLUniqueId = uniqueId;
}
public long getAKLDataSize() {
return AKLDataSize;
}
public void setAKLDataSize(long dataSize) {
AKLDataSize = dataSize;
}
public void parse(byte[] data){
if(data.length<48) throw new RuntimeException("byte[] length isnt fit for parse,must not less than 48");
sessionId = BinaryHeader.getIntValue(data, 0, 4);
identifier = BinaryHeader.getIntValue(data, 4, 4);
dataOffset = BinaryHeader.getLongValue(data, 8, 8);
totalDataSize = BinaryHeader.getLongValue(data, 16, 8);
messageLength = BinaryHeader.getIntValue(data, 24, 4);
flag = BinaryHeader.getIntValue(data, 28, 4);
AKLIdentifier = BinaryHeader.getIntValue(data, 32, 4);
AKLUniqueId = BinaryHeader.getIntValue(data, 36, 4);
AKLDataSize = BinaryHeader.getLongValue(data, 40, 8);
}
public static int getIntValue(byte[] data,int offSet,int length){
int ret = 0;
for (int i = offSet+length-1; i >= offSet; i--) {
int posShiff = 8*(i-offSet);
if(posShiff>0){
ret += ((int)(data[i]&0xff)) << posShiff;
}else ret += (int)(data[i]&0xff);
}
return ret;
}
public static long getLongValue(byte[] data,int offSet,int length){
long ret = 0;
for (int i = offSet+length-1; i >= offSet; i--) {
int posShiff = 8*(i-offSet);
if(posShiff>0){
ret += ((long)(data[i]&0xff)) << posShiff;
}else ret += (long)(data[i]&0xff);
}
return ret;
}
public byte[] getBytes(){
byte[] data = new byte[48];
//sessionId
data[0] = (byte)( sessionId & 0xff);
data[1] = (byte)((sessionId>>8) & 0xff);
data[2] = (byte)((sessionId>>16) & 0xff);
data[3] = (byte)((sessionId>>24) & 0xff);
//identifier
data[4] = (byte)( identifier & 0xff);
data[5] = (byte)((identifier>>8) & 0xff);
data[6] = (byte)((identifier>>16) & 0xff);
data[7] = (byte)((identifier>>24) & 0xff);
//dataOffset
data[8] = (byte)( dataOffset & 0xff);
data[9] = (byte)((dataOffset>>8) & 0xff);
data[10] = (byte)((dataOffset>>16) & 0xff);
data[11] = (byte)((dataOffset>>24) & 0xff);
data[12] = (byte)( dataOffset>>32 & 0xff);
data[13] = (byte)((dataOffset>>40) & 0xff);
data[14] = (byte)((dataOffset>>48) & 0xff);
data[15] = (byte)((dataOffset>>56) & 0xff);
//totalDataSize
data[16] = (byte)( totalDataSize & 0xff);
data[17] = (byte)((totalDataSize>>8) & 0xff);
data[18] = (byte)((totalDataSize>>16) & 0xff);
data[19] = (byte)((totalDataSize>>24) & 0xff);
data[20] = (byte)( totalDataSize>>32 & 0xff);
data[21] = (byte)((totalDataSize>>40) & 0xff);
data[22] = (byte)((totalDataSize>>48) & 0xff);
data[23] = (byte)((totalDataSize>>56) & 0xff);
//messageLength
data[24] = (byte)( messageLength & 0xff);
data[25] = (byte)((messageLength>>8) & 0xff);
data[26] = (byte)((messageLength>>16) & 0xff);
data[27] = (byte)((messageLength>>24) & 0xff);
//flag
data[28] = (byte)( flag & 0xff);
data[29] = (byte)((flag>>8) & 0xff);
data[30] = (byte)((flag>>16) & 0xff);
data[31] = (byte)((flag>>24) & 0xff);
//AKLIdentifier
data[32] = (byte)( AKLIdentifier & 0xff);
data[33] = (byte)((AKLIdentifier>>8) & 0xff);
data[34] = (byte)((AKLIdentifier>>16) & 0xff);
data[35] = (byte)((AKLIdentifier>>24) & 0xff);
//AKLUniqueId
data[36] = (byte)( AKLUniqueId & 0xff);
data[37] = (byte)((AKLUniqueId>>8) & 0xff);
data[38] = (byte)((AKLUniqueId>>16) & 0xff);
data[39] = (byte)((AKLUniqueId>>24) & 0xff);
//AKLDataSize
data[40] = (byte)( AKLDataSize & 0xff);
data[41] = (byte)((AKLDataSize>>8) & 0xff);
data[42] = (byte)((AKLDataSize>>16) & 0xff);
data[43] = (byte)((AKLDataSize>>24) & 0xff);
data[44] = (byte)( AKLDataSize>>32 & 0xff);
data[45] = (byte)((AKLDataSize>>40) & 0xff);
data[46] = (byte)((AKLDataSize>>48) & 0xff);
data[47] = (byte)((AKLDataSize>>56) & 0xff);
return data;
}
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("sessionId:");
sb.append(sessionId);
sb.append("\n\r");
sb.append("identifier:");
sb.append(identifier);
sb.append("\n\r");
sb.append("dataOffset:");
sb.append(dataOffset);
sb.append("\n\r");
sb.append("totalDataSize:");
sb.append(totalDataSize);
sb.append("\n\r");
sb.append("messageLength:");
sb.append(messageLength);
sb.append("\n\r");
sb.append("flag:");
sb.append(flag);
sb.append("\n\r");
sb.append("AKLIdentifier:");
sb.append(AKLIdentifier);
sb.append("\n\r");
sb.append("AKLUniqueId:");
sb.append(AKLUniqueId);
sb.append("\n\r");
sb.append("AKLDataSize:");
sb.append(AKLDataSize);
sb.append("\n\r");
return sb.toString();
}
}
分享到:
相关推荐
ABB工业机器人-小机器人-IRB-120
mBlock 编程机器人-mBlock-Mbot全文共21页,当前为第1页。 创客 什么是创客? ,"创客":指勇于创新,努力将自己的创意变为现实的人。 这个词译自英文单词"Mak-er",源于美国麻省理工学院微观装配实验室的实验课题,...
ABB工业机器人-IRB 460多功能工业机器人pdf,IRB 460 是全球最快的四轴多功能工业机器人,能显著缩短各项 作业的节拍时间,大幅提升生产效率。这款紧凑型的 4 轴机器人 到达距离为 2.4 m,有效荷重 110 kg;荷重 60 ...
使用workvisual软件配置机器人 工业机器人现场编程-使用workvisual软件配置机器人-课件全文共29页,当前为第1页。 学习目标和技能 学习目标 连接机器人与电脑途径 查找项目途径 打开项目途径 在workvisual'里安装...
重载码垛机器人-A1-模型技术要求和装配规范 重载码垛机器人-A1-模型是指一种高级的机器人设备,旨在提高生产效率和减少人工劳动强度。为了确保机器人的正常运转和高效工作,需要满足一定的技术要求和装配规范。本文...
安川机器人-MS165产品样本pdf,简介:安川工业机器人-最适合点焊的机器人MOTOMAN-MS165/MS210 诞生更加追求更高生产效率的机器人。 通过新型减震控制实现高速化 扩大搭载点焊枪时动作范围 机器人小型化,细长...
本次我们将深入探讨基于"RM2020-上海交大-步兵机器人-开源资料.zip"的步兵机器人设计与开发,通过分析提供的README.txt、效果展示、说明文档、三维图纸和二维图纸,揭示其中蕴含的技术细节和创新理念。 1. **...
乐高培训-机器人--
ABB机器人--DEVICENET--通信设置 This manual describes the option DeviceNet Master/Slave and contains instructions for the configuration. It also describes the configuration of boards and devices.
发那科-M410-iB-机器人-样本pdf,发那科-M410-iB-机器人-样本
在我们继续深入探索工业机器人的世界时,"工业机器人-part2.zip"为我们提供了一份宝贵的资源。这份压缩包包含了两份重要的文档:part2.pdf和工业机器人-part2.pdf,它们将带领我们进一步理解工业机器人的核心技术、...
唐山松下机器人-机器人焊接系统综合介绍样本pdf,简介:唐山松下机器人-机器人焊接系统综合介绍样本 广泛应用于各行业的机器人焊接系统。 唐山松下产业机器有限公司(Panasonic Welding Systems (Tangshan) Co., ...
abb机器人-pc-sdk
唐山松下机器人-机器人培训的理想选择-松下机器人虚拟教学系统pdf,简介:机器人虚拟教学系统YA -1UPCT2 机器人培训的理想选择 实现了机器人操作培训的离线化 使用与实机相同的示教器 唐山松下产业机器有限...
安川机器人-弧焊机器人pdf,安川机器人-弧焊机器人:为了使机器人更优化,我们提高了动作的自由度,紧凑并缩小了机器人的体型。机器人能够被高密度的安置,这一点为客户在生产设备上节省了空间。我们把像这样能节省...
基于Java技术的校园智能聊天机器人--晓同.pdf
ABB机器人-IRB 7600大功率机器人pdf,ABB 的新型大功率机器人家族的问世,为您开辟了一个充满机遇 的全新世界。它推出了承重能力分别为 500kg、400kg、340kg 和 150kg 五种版本的产品。IRB7600 可应用于各种行业的...
"工业机器人-11.zip"这个压缩包包含的文件可能提供了关于工业机器人的深入研究或教程,主要文件有"工业机器人-11.pdf"和"11.pdf"。 "工业机器人-11.pdf"很可能是一份详尽的报告或教程,涵盖了工业机器人的基本概念...
微信机器人-WeChatRobot