/*
* Copyright 2008-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hasor.rsf.protocol.rsf.v1;
/**
* RSF 1.0 Response 二进制传输协议
* --------------------------------------------------------bytes =13
* byte[1] version RSF版本(0xC1 or 0x81)
* byte[8] requestID 包含的请求ID
* byte[1] keepData 保留区
* byte[3] contentLength 内容大小(max ~ 16MB)
* --------------------------------------------------------bytes =6
* byte[2] status 响应状态
* byte[2] serializeType-(attr-index) 序列化策略
* byte[2] returnData-(attr-index) 返回数据
* --------------------------------------------------------bytes =1 ~ 1021
* byte[1] optionCount 选项参数总数
* byte[4] attr-0-(attr-index,attr-index) 选项参数1
* byte[4] attr-1-(attr-index,attr-index) 选项参数2
* ...
* --------------------------------------------------------bytes =6 ~ 8192
* byte[2] attrPool-size (Max = 2047) 池大小
* byte[4] att-length 属性1大小
* byte[4] att-length 属性2大小
* ...
* --------------------------------------------------------bytes =n
* dataBody 数据内容
* bytes[...]
* @version : 2014年10月25日
* @author 赵永春(zyc@hasor.net)
*/
public class ResponseBlock extends PoolBlock {
private byte rsfHead = 0; //byte[1] RSF头
private long requestID = 0; //byte[8] 请求ID
private short status = 0; //byte[2] 响应状态
private short serializeType = 0; //byte[2] 序列化类型
private short returnData = 0; //byte[2] 返回数据
private int[] optionMap = {}; //(attr-index,attr-index)
//
/**获取协议版本。*/
public byte getVersion() {
return (byte) (this.rsfHead & 0x0F);
}
/**获取协议版本。*/
public byte getHead() {
return this.rsfHead;
}
/**设置协议版本。*/
public void setHead(byte rsfHead) {
this.rsfHead = rsfHead;
}
/**获取请求ID。*/
public long getRequestID() {
return this.requestID;
}
/**设置请求ID。*/
public void setRequestID(long requestID) {
this.requestID = requestID;
}
/**获取响应状态*/
public short getStatus() {
return this.status;
}
/**设置响应状态*/
public void setStatus(short status) {
this.status = status;
}
/**获取序列化类型*/
public short getSerializeType() {
return this.serializeType;
}
/**设置序列化类型*/
public void setSerializeType(short serializeType) {
this.serializeType = serializeType;
}
/**获取返回值数据*/
public short getReturnData() {
return returnData;
}
/**设置返回值数据*/
public void setReturnData(short returnData) {
this.returnData = returnData;
}
/**添加选项。*/
public void addOption(short paramType, short paramData) {
int pType = paramType << 16;
int pData = paramData;
int mergeData = (pType | pData);
this.addOption(mergeData);
}
/**添加选项。*/
public void addOption(int mergeData) {
this.optionMap = ArrayUtils.add(this.optionMap, mergeData);
}
/**获取选项Key集合。*/
public short[] getOptionKeys() {
short[] optKeys = new short[this.optionMap.length];
for (int i = 0; i < this.optionMap.length; i++) {
int mergeData = this.optionMap[i];
optKeys[i] = (short) (mergeData >>> 16);
}
return optKeys;
}
/**获取选项数据*/
public short[] getOptionValues() {
short[] optDatas = new short[this.optionMap.length];
for (int i = 0; i < this.optionMap.length; i++) {
optDatas[i] = (short) (0x0000FFFF & this.optionMap[i]);
}
return optDatas;
}
/**获取Option。*/
public int[] getOptions() {
return this.optionMap;
}
}