jsonCommon.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. /**
  2. * @brief
  3. jason公共头文件
  4. * @version
  5. V 1.0.0
  6. * @author
  7. * @date
  8. 创建时间: 2018-04-19\n
  9. * @note
  10. 2018-04-19 初次创建。\n
  11. * @warning
  12. * @bug
  13. */
  14. #ifndef _JSON_COMMON_H_
  15. #define _JSON_COMMON_H_
  16. #include <string>
  17. #include <vector>
  18. #include <rapidjson/document.h>
  19. #include <rapidjson/pointer.h>
  20. #include "constdef.h"
  21. namespace sys
  22. {
  23. /**
  24. * @brief
  25. 通用jason包结构体
  26. */
  27. struct _JS_PACK_
  28. {
  29. public:
  30. rapidjson::Document m_Doc;//jason文档对象
  31. public:
  32. _JS_PACK_()
  33. {
  34. }
  35. /**
  36. * @brief
  37. 获得命令字函数。
  38. * @param [out] std::string& Error 错误信息\n
  39. * @return 如果成功返回获得的命令字,否则返回空字符串\n
  40. * @note
  41. * @warning
  42. * @bug
  43. */
  44. std::string GetCmd( std::string& Error )
  45. {
  46. rapidjson::Value::MemberIterator itMember;
  47. itMember = m_Doc.FindMember( JSON_ROOT_KEY_CMD );
  48. if ( itMember == m_Doc.MemberEnd() )
  49. {
  50. Error = "Error,Failed to find member: ";
  51. Error += JSON_ROOT_KEY_CMD;
  52. return "";
  53. }
  54. return m_Doc[JSON_ROOT_KEY_CMD].GetString();
  55. }
  56. /**
  57. * @brief
  58. 获得成员函数。
  59. * @param [in] const std::string& MemberName 成员名称\n
  60. * @param [out] rapidjson::Value& Member 获得的成员\n
  61. * @param [out] std::string& Error 错误信息\n
  62. * @return 如果成功返回true,否则返回false\n
  63. * @note
  64. * @warning
  65. * @bug
  66. */
  67. bool GetMember( const std::string& MemberName, rapidjson::Value& Member, std::string& Error )
  68. {
  69. rapidjson::Value::MemberIterator itMember;
  70. itMember = m_Doc.FindMember( MemberName.c_str() );
  71. if ( itMember == m_Doc.MemberEnd() )
  72. {
  73. Error = "Error,Failed to find member: ";
  74. Error += MemberName;
  75. return false;
  76. }
  77. rapidjson::Document::AllocatorType allocator;
  78. Member.CopyFrom( itMember->value, allocator );
  79. return true;
  80. }
  81. /**
  82. * @brief
  83. 获得指定成员的值函数。
  84. * @param [in] const std::string& MemberName 指定成员\n
  85. * @param [in] const std::string& ValueName 值名称\n
  86. * @param [out] rapidjson::Value& Member 获得的值\n
  87. * @param [out] std::string& Error 错误信息\n
  88. * @return 如果成功返回true,否则返回false\n
  89. * @note
  90. * @warning
  91. * @bug
  92. */
  93. bool GetValue( const rapidjson::Value& Member, const std::string& ValueName, rapidjson::Value& Value, std::string& Error )
  94. {
  95. rapidjson::Value::ConstMemberIterator itValue;
  96. itValue = Member.FindMember( ValueName.c_str() );
  97. if ( itValue == Member.MemberEnd() )
  98. {
  99. char szError[256] = { 0 };
  100. sprintf( szError, "Error,Failed to find: %s", ValueName.c_str() );
  101. Error = szError;
  102. return false;
  103. }
  104. rapidjson::Document::AllocatorType allocator;
  105. Value.CopyFrom( itValue->value, allocator );
  106. return true;
  107. }
  108. /**
  109. * @brief
  110. 根据jason pointer获得指定的值函数。
  111. * @param [in] const char* JPointer 指定的jason pointer\n
  112. * @return 返回获得的值\n
  113. * @note
  114. * @warning
  115. * @bug
  116. */
  117. const rapidjson::Value* GetValueByJP( const char* JPointer )
  118. {
  119. if ( 0 == JPointer )
  120. {
  121. return 0;
  122. }
  123. return rapidjson::GetValueByPointer( m_Doc, rapidjson::Pointer( JPointer ) );
  124. }
  125. /**
  126. * @brief
  127. 获得所有成员函数。
  128. * @param 无\n
  129. * @return 返回获得的所有成员的列表\n
  130. * @note
  131. * @warning
  132. * @bug
  133. */
  134. std::vector<std::string> GetMembers()
  135. {
  136. std::vector<std::string> vMembers;
  137. for (auto& m : m_Doc.GetObject())
  138. {
  139. vMembers.push_back( m.name.GetString() );
  140. }
  141. return vMembers;
  142. }
  143. };
  144. /**
  145. * @brief
  146. 分站结构体
  147. */
  148. struct _JS_COMMON_
  149. {
  150. std::string version;//版本
  151. _JS_COMMON_()
  152. {
  153. }
  154. };
  155. /**
  156. * @brief
  157. 分站结构体
  158. */
  159. struct _JS_STATION_
  160. {
  161. int stationid;//分站ID
  162. _JS_STATION_()
  163. {
  164. stationid = 0;
  165. }
  166. };
  167. /**
  168. * @brief
  169. 卡结构体
  170. */
  171. struct _JS_CARD_
  172. {
  173. int cardid;//卡ID
  174. int cardtype;//卡类型
  175. _JS_CARD_()
  176. {
  177. cardid = 0;
  178. cardtype = 0;
  179. }
  180. };
  181. /**
  182. * @brief
  183. 呼叫结构体
  184. */
  185. struct _JS_CALL_CARD_REQ_ : public _JS_COMMON_
  186. {
  187. int call_type_id;//呼叫类型(0 全员, 1定员)
  188. int call_time_out;//呼叫时长(单位分钟)
  189. int call_level_id;//呼叫级别(0一般呼叫,1紧急呼叫)
  190. std::string user_name;//用户
  191. long long call_time_interval;//呼叫间隔
  192. std::vector<_JS_STATION_> stations;//分站列表
  193. std::vector<_JS_CARD_> cards;//呼叫的卡列表
  194. _JS_CALL_CARD_REQ_()
  195. {
  196. call_type_id = 0;
  197. call_time_out = 0;
  198. call_level_id = 0;
  199. call_time_interval = 0;
  200. }
  201. };
  202. /**
  203. * @brief
  204. 取消呼叫结构体
  205. */
  206. struct _JS_CALL_CARD_CANCEL_REQ_ : public _JS_COMMON_
  207. {
  208. int call_type_id;//呼叫类型(0 全员, 1定员)
  209. std::string user_name;//用户
  210. long long call_time;//取消时间
  211. std::vector<_JS_STATION_> stations;//分站列表
  212. std::vector<_JS_CARD_> cards;//呼叫的卡列表
  213. _JS_CALL_CARD_CANCEL_REQ_()
  214. {
  215. call_type_id = 0;
  216. call_time = 0;
  217. }
  218. };
  219. /**
  220. * @brief
  221. 数据库连接设置结构体
  222. */
  223. struct _JS_LOGIN_
  224. {
  225. std::string user_name;//用户名
  226. std::string user_password;//密码
  227. _JS_LOGIN_()
  228. {
  229. }
  230. };
  231. }
  232. #endif//_JSON_COMMON_H_