注意:请勿使用非文档化的 API。
非文档化的 API,或为内部使用,或因历史原因遗留,或为将来设计,后续版本均可能存在变动。
namespace fpnn;
FPReader 为 FPQReader 和 FPAReader 的基类。提供随机读取 FPNN 协议数据对象的能力。
class FPReader{
public:
const msgpack::object& getObject(const char *k);
const msgpack::object& getObject(const std::string& k);
const msgpack::object& wantObject(const char *k);
const msgpack::object& wantObject(const std::string& k);
bool existKey(const char *k);
bool existKey(const std::string& k);
//the following function will not throw exception
template<typename TYPE>
TYPE get(const char *k, TYPE dft);
template<typename TYPE>
TYPE get(const std::string& k, TYPE dft);
intmax_t getInt(const char* k, intmax_t dft = _intDef);
intmax_t getInt(const std::string& k, intmax_t dft = _intDef);
uintmax_t getUInt(const char* k, uintmax_t dft = _uintDef);
uintmax_t getUInt(const std::string& k, uintmax_t dft = _uintDef);
double getDouble(const char* k, double dft = _doubleDef);
double getDouble(const std::string& k, double dft = _doubleDef);
bool getBool(const char* k, bool dft = _boolDef);
bool getBool(const std::string& k, bool dft = _boolDef);
std::string getString(const char* k, std::string dft = _stringDef);
std::string getString(const std::string& k, std::string dft = _stringDef);
bool getFile(const char* k, FileSystemUtil::FileAttrs& attrs);
bool getFile(const std::string& k, FileSystemUtil::FileAttrs& attrs);
// The following function will throw exceptions
template<typename TYPE>
TYPE want(const char *k, TYPE dft);
template<typename TYPE>
TYPE want(const std::string& k, TYPE dft);
intmax_t wantInt(const char* k, intmax_t dft = _intDef);
intmax_t wantInt(const std::string& k, intmax_t dft = _intDef);
uintmax_t wantUInt(const char* k, uintmax_t dft = _uintDef);
uintmax_t wantUInt(const std::string& k, uintmax_t dft = _uintDef);
double wantDouble(const char* k, double dft = _doubleDef);
double wantDouble(const std::string& k, double dft = _doubleDef);
bool wantBool(const char* k, bool dft = _boolDef);
bool wantBool(const std::string& k, bool dft = _boolDef);
std::string wantString(const char* k, std::string dft = _stringDef);
std::string wantString(const std::string& k, std::string dft = _stringDef);
bool wantFile(const char* k, FileSystemUtil::FileAttrs& attrs);
bool wantFile(const std::string& k, FileSystemUtil::FileAttrs& attrs);
template<typename TYPE>
TYPE convert(TYPE& dst);
msgpack::type::object_type getObjectType(const char* k);
msgpack::type::object_type getObjectType(const std::string& k);
//get the type of key, if key not exist, return false
bool isInt(const char* k);
bool isInt(const std::string& k);
bool isBool(const char* k);
bool isBool(const std::string& k);
bool isDouble(const char* k);
bool isDouble(const std::string& k);
bool isString(const char* k);
bool isString(const std::string& k);
bool isBinary(const char* k);
bool isBinary(const std::string& k);
bool isArray(const char* k);
bool isArray(const std::string& k);
bool isMap(const char* k);
bool isMap(const std::string& k);
bool isExt(const char* k);
bool isExt(const std::string& k);
bool isNil(const char* k);
bool isNil(const std::string& k);
FPReader(const std::string& payload);
FPReader(const char* buf, size_t len);
FPReader(const msgpack::object& obj);
virtual ~FPReader() {}
std::string json();
};
typedef std::shared_ptr<FPReader> FPReaderPtr;
FPReader(const std::string& payload);
FPReader(const char* buf, size_t len);
FPReader(const msgpack::object& obj);
参数说明
-
const std::string& payload
需要读取的,经过 MsgPack 编码的 FPNN 协议 body 数据。
-
const char* buf
需要读取的,经过 MsgPack 编码的 FPNN 协议 body 数据。
-
size_t len
需要读取的 FPNN 协议 body 数据的长度。
-
const msgpack::object& obj
需要读取的,经过 MsgPack 编码的 FPNN 协议 body 数据。
const msgpack::object& getObject(const char *k);
const msgpack::object& getObject(const std::string& k);
获取 FPMessage 对象数据字典中,k
指定键值对应的 MsgPack 编码的数据。
如果对应键值不存在,将返回 MsgPack 空对象。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
返回值
MsgPack 编码的二进制数据。
const msgpack::object& wantObject(const char *k);
const msgpack::object& wantObject(const std::string& k);
获取 FPMessage 对象数据字典中,k
指定键值对应的 MsgPack 编码的数据。
如果对应键值不存在,将抛出 FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
返回值
MsgPack 编码的二进制数据。
bool existKey(const char *k);
bool existKey(const std::string& k);
检查 FPMessage 对象数据字典中,k
指定键值对是否存在。
参数说明
-
const char *k
&const std::string& k
需要检查的键值对。
template<typename TYPE>
TYPE get(const char *k, TYPE dft);
template<typename TYPE>
TYPE get(const std::string& k, TYPE dft);
按模板参数类型获取 FPMessage 对象数据字典中,k
指定键值的数据。
如果对应键值不存在,将返回参数 TYPE dft
的值作为替代。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
TYPE dft
如果指定的键值不存在时,作为替代,返回的数据。
intmax_t getInt(const char* k, intmax_t dft = _intDef);
intmax_t getInt(const std::string& k, intmax_t dft = _intDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为整型,则返回对应的整型数据,否则将参数 TYPE dft
的值作为替代值返回。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
intmax_t dft
如果指定的键值不存在时,作为替代,返回的数据。
uintmax_t getUInt(const char* k, uintmax_t dft = _uintDef);
uintmax_t getUInt(const std::string& k, uintmax_t dft = _uintDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为无符号整型,则返回对应的无符号整型数据,否则将参数 TYPE dft
的值作为替代值返回。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
uintmax_t dft
如果指定的键值不存在时,作为替代,返回的数据。
double getDouble(const char* k, double dft = _doubleDef);
double getDouble(const std::string& k, double dft = _doubleDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为双精度浮点型,则返回对应的双精度浮点型数据,否则将参数 TYPE dft
的值作为替代值返回。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
double dft
如果指定的键值不存在时,作为替代,返回的数据。
bool getBool(const char* k, bool dft = _boolDef);
bool getBool(const std::string& k, bool dft = _boolDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为布尔型,则返回对应的布尔型数据,否则将参数 TYPE dft
的值作为替代值返回。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
bool dft
如果指定的键值不存在时,作为替代,返回的数据。
std::string getString(const char* k, std::string dft = _stringDef);
std::string getString(const std::string& k, std::string dft = _stringDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为字符串类型,则返回对应的字符串类型数据,否则将参数 TYPE dft
的值作为替代值返回。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
std::string dft
如果指定的键值不存在时,作为替代,返回的数据。
bool getFile(const char* k, FileSystemUtil::FileAttrs& attrs);
bool getFile(const std::string& k, FileSystemUtil::FileAttrs& attrs);
如果 FPMessage 对象数据字典中,k
指定键值存在,且为字典类型,包含name
、sign
、content
、ext
4个字符串类型字段,且还包含 size
、atime
、mtime
、ctime
4 个整型字段,则 SDK 将提取 k
指定键值对应的字典,并尝试转换为 FileSystemUtil::FileAttrs
对象。
参数说明
-
const char *k
&const std::string& k
需要获取的文件数据的键值。
-
FileSystemUtil::FileAttrs& attrs
提取 & 转换成功时,返回的
FileSystemUtil::FileAttrs& attrs
对象。
返回值
返回值 | 含义 |
---|---|
true | 提取 & 转换成功 |
false | 提取 & 转换失败 |
template<typename TYPE>
TYPE want(const char *k, TYPE dft);
template<typename TYPE>
TYPE want(const std::string& k, TYPE dft);
按模板参数类型获取 FPMessage 对象数据字典中,k
指定键值的数据。
如果对应键值不存在,抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
TYPE dft
供类型转换参考使用。
intmax_t wantInt(const char* k, intmax_t dft = _intDef);
intmax_t wantInt(const std::string& k, intmax_t dft = _intDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为整型,则返回对应的整型数据,否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
intmax_t dft
供类型转换参考使用。
uintmax_t wantUInt(const char* k, uintmax_t dft = _uintDef);
uintmax_t wantUInt(const std::string& k, uintmax_t dft = _uintDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为无符号整型,则返回对应的无符号整型数据,否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
uintmax_t dft
供类型转换参考使用。
double wantDouble(const char* k, double dft = _doubleDef);
double wantDouble(const std::string& k, double dft = _doubleDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为双精度浮点型,则返回对应的双精度浮点型数据,否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
double dft
供类型转换参考使用。
bool wantBool(const char* k, bool dft = _boolDef);
bool wantBool(const std::string& k, bool dft = _boolDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为布尔型,则返回对应的布尔型数据,否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
bool dft
供类型转换参考使用。
std::string wantString(const char* k, std::string dft = _stringDef);
std::string wantString(const std::string& k, std::string dft = _stringDef);
如果 FPMessage 对象数据字典中,k
指定键值存在,且可被 MsgPack 转换为字符串类型,则返回对应的字符串类型数据,否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的数据的键值。
-
std::string dft
供类型转换参考使用。
bool wantFile(const char* k, FileSystemUtil::FileAttrs& attrs);
bool wantFile(const std::string& k, FileSystemUtil::FileAttrs& attrs);
如果 FPMessage 对象数据字典中,k
指定键值存在,且为字典类型,包含name
、sign
、content
、ext
4个字符串类型字段,且还包含 size
、atime
、mtime
、ctime
4 个整型字段,则 SDK 将提取 k
指定键值对应的字典,并尝试转换为 FileSystemUtil::FileAttrs
对象。否则将抛出FPNN 异常。
参数说明
-
const char *k
&const std::string& k
需要获取的文件数据的键值。
-
FileSystemUtil::FileAttrs& attrs
提取 & 转换成功时,返回的
FileSystemUtil::FileAttrs& attrs
对象。
返回值
返回值 | 含义 |
---|---|
true | 提取 & 转换成功 |
false | 提取 & 转换失败(实际不会发生,而是抛出FPNN 异常) |
template<typename TYPE>
TYPE convert(TYPE& dst);
转换 MsgPack 数据类型。
msgpack::type::object_type getObjectType(const char* k);
msgpack::type::object_type getObjectType(const std::string& k);
获取指定键值的 msgPack 数据类型。
参数说明
-
const char *k
&const std::string& k
需要获取 MsgPack 类型的数据的键值。
返回值
MsgPack 数据类型。
bool isInt(const char* k);
bool isInt(const std::string& k);
判断键值对象是否是整型类型。
参数说明
-
const char *k
&const std::string& k
需要判断整型类型的数据的键值。
bool isBool(const char* k);
bool isBool(const std::string& k);
判断键值对象是否是布尔类型。
参数说明
-
const char *k
&const std::string& k
需要判断布尔类型的数据的键值。
bool isDouble(const char* k);
bool isDouble(const std::string& k);
判断键值对象是否是浮点型类型。
参数说明
-
const char *k
&const std::string& k
需要判断浮点型类型的数据的键值。
bool isString(const char* k);
bool isString(const std::string& k);
判断键值对象是否是字符串类型。
参数说明
-
const char *k
&const std::string& k
需要判断字符串类型的数据的键值。
bool isBinary(const char* k);
bool isBinary(const std::string& k);
判断键值对象是否是二进制类型。
参数说明
-
const char *k
&const std::string& k
需要判断二进制类型的数据的键值。
bool isArray(const char* k);
bool isArray(const std::string& k);
判断键值对象是否是数组类型。
参数说明
-
const char *k
&const std::string& k
需要判断数组类型的数据的键值。
bool isMap(const char* k);
bool isMap(const std::string& k);
判断键值对象是否是字典类型。
参数说明
-
const char *k
&const std::string& k
需要判断字典类型的数据的键值。
bool isExt(const char* k);
bool isExt(const std::string& k);
判断键值对象是否存在。
参数说明
-
const char *k
&const std::string& k
需要判断是否存在的数据的键值。
bool isNil(const char* k);
bool isNil(const std::string& k);
判断键值对象是否是 null 类型。
参数说明
-
const char *k
&const std::string& k
需要判断 null 类型的数据的键值。
std::string json();
将 FPMessage 对象数据转换为 Json 格式。如果无法转换,则返回空字符串。
FPQReader 为 FPReader 的子类。提供读取 FPNN 协议请求对象(FPQuest) 的能力。
class FPQReader : public FPReader{
public:
FPQReader(const FPQuestPtr& quest);
bool isHTTP();
bool isTCP();
bool isOneWay();
bool isTwoWay();
bool isQuest();
uint32_t seqNum() const;
const std::string& method() const;
};
typedef std::shared_ptr<FPQReader> FPQReaderPtr;
参数说明
-
const FPQuestPtr& quest
需要读取的 FPQuest 对象。
bool isHTTP();
判断是否是 HTTP/HTTPS 数据。
bool isTCP();
判断是否是 FPNN 协议数据。
bool isOneWay();
判断是否是单向请求。
bool isTwoWay();
判断是否是双向请求。
bool isQuest();
判断是否是请求数据。
uint32_t seqNum() const;
返回应答数据包的序列号(本地字节序)。
const std::string& method() const;
返回请求的方法名/接口名。
FPAReader 为 FPReader 的子类。提供读取 FPNN 协议应答对象(FPAnswer) 的能力。
class FPAReader : public FPReader{
public:
FPAReader(const FPAnswerPtr& answer);
uint32_t seqNum() const;
uint16_t status() const;
};
typedef std::shared_ptr<FPAReader> FPAReaderPtr;
参数说明
-
const FPAnswerPtr& answer
需要读取的 FPAnswer 对象。
uint32_t seqNum() const;
返回应答数据包的序列号(本地字节序)。
uint16_t status() const;
返回 FPAnswer 对象的状态码。