main.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <fstream>
  5. #include "UserInfo.h"
  6. #include "tup/tup.h"
  7. using namespace std;
  8. using namespace tars;
  9. using namespace tup;
  10. using namespace Test;
  11. string str2hex(const string& sBuffer)
  12. {
  13. string str = "";
  14. for (size_t i = 0; i < sBuffer.length(); ++i) {
  15. char sb[4] = {0};
  16. snprintf(sb, 4, "%02x", (unsigned char)sBuffer[i]);
  17. if (i%10==0)str.append("\n");
  18. str.append("(byte)0x");
  19. str.append(sb);
  20. str.append(",");
  21. }
  22. return str;
  23. }
  24. /*static char __data[] = {
  25. 0x1c,0x2c,0x3c,0x40,0x03,0x56,0x00,0x66,0x09,0x6e,0x4c,0x6f,0x67,0x69,0x6e,0x6e,0x65,0x77,0x7d,0x00,0x00,0x39,0x08,0x00,0x02,0x06,0x03,0x70,0x77,0x64,0x18,0x00,0x01,0x06,0x06,0x73,0x74,0x72,0x69,0x6e,0x67,0x1d,0x00,0x00,0x0a,0x06,0x08,0x33,0x67,0x71,0x71,0x74,0x65,0x73,0x74,0x06,0x03,0x75,0x69,0x6e,0x18,0x00,0x01,0x06,0x05,0x69,0x6e,0x74,0x33,0x32,0x1d,0x00,0x00,0x05,0x02,0x3f,0xe2,0x78,0xac,0x8c,0x98,0x0c,0xa8,0x0c,};
  26. */
  27. int main()
  28. {
  29. try
  30. {
  31. ////////////////////////////////////////
  32. /*
  33. string data(__data, sizeof(__data));
  34. UniRequest<> request;
  35. request.decode(data.c_str(), data.length());
  36. return 0;
  37. cout << "type:" << Class<Int32>::name() << endl;
  38. cout << "type:" << Class<vector<Char> >::name() << endl;
  39. cout << "type:" << Class<map<Short, vector<string> > >::name() << endl;
  40. cout << "type:" << Class<map<Double, map<Float, vector<Bool> > > >::name() << endl;
  41. cout << "type:" << Class<map<Int64, vector<UserInfo> > >::name() << endl;
  42. cout << "type:" << Class<map<Short, FriendInfo> >::name() << endl;
  43. */
  44. string buff = "";
  45. ////////////////////////////////////////
  46. UniPacket<> client;
  47. client.setRequestId(10000);
  48. client.setServantName("do");
  49. client.setFuncName("test");
  50. client.put<Int32>("qq", 11688188);
  51. client.put<string>("nick", "zhangsan");
  52. //struct
  53. FriendInfo fi;
  54. fi.nick = "zhangsan";
  55. fi.uin = 172917;
  56. fi.birthday.push_back('5');
  57. fi.birthday.push_back('3');
  58. client.put<FriendInfo>("friendInfo", fi);
  59. //vector
  60. vector<UserInfo> vui;
  61. UserInfo ui;
  62. ui.qq = 123456;
  63. ui.nick = "wawa";
  64. ui.birthday.push_back('2');
  65. ui.birthday.push_back('0');
  66. vui.push_back(ui);
  67. ui.qq = 122400997;
  68. ui.nick = "wawahaha";
  69. ui.birthday.push_back('1');
  70. ui.birthday.push_back('9');
  71. ui.city = "bj";
  72. vui.push_back(ui);
  73. client.put<vector<UserInfo> >("userInfo", vui);
  74. //map
  75. map<short, FriendInfo> mfi;
  76. FriendInfo ffi;
  77. ffi.uin = 10001;
  78. ffi.nick = "friend1";
  79. ffi.birthday.push_back('9');
  80. ffi.birthday.push_back('8');
  81. mfi[10001] = ffi;
  82. ffi.uin = 10002;
  83. ffi.nick = "friend2";
  84. ffi.birthday.clear();
  85. ffi.birthday.push_back('9');
  86. ffi.birthday.push_back('7');
  87. mfi[10002] = ffi;
  88. client.put<map<short, FriendInfo> >("friendInfo", mfi);
  89. //crypt-attr
  90. UniAttribute<> attr;
  91. attr.put<Int32>("attr-qq", 172917);
  92. attr.put<string>("attr-nick", "sanzhang");
  93. vector<FriendInfo> vfi;
  94. attr.put<vector<FriendInfo> >("attr-friends", vfi);
  95. vector<char> crpyBuffer;
  96. attr.encode(crpyBuffer);
  97. //do encrypt...
  98. client.put("crypt-attr", crpyBuffer);
  99. vector<char> vc;
  100. vc.push_back('a');
  101. vc.push_back('b');
  102. vc.push_back('c');
  103. vc.push_back('d');
  104. vc.push_back('e');
  105. client.put<vector<char> >("vc", vc);
  106. //客户端编码
  107. client.encode(buff);
  108. ////////////////////////////////////////
  109. //网络传输...
  110. /*
  111. cout << str2hex(buff) << endl;
  112. output.close();
  113. return 0;
  114. */
  115. ////////////////////////////////////////
  116. cout << "---------------------------------" << endl;
  117. //服务端解码
  118. UniPacket<> server;
  119. server.decode(buff.c_str(), buff.length());
  120. cout << "[requestId]:" << server.getRequestId() << endl;
  121. cout << "[servantName]:" << server.getServantName() << endl;
  122. cout << "[funcName]:" << server.getFuncName() << endl;
  123. cout << "[qq]:" << server.get<int>("qq") << endl;
  124. cout << "[nick]:" << server.get<string>("nick") << endl;
  125. //vector
  126. vector<UserInfo> vinfo;
  127. server.get("userInfo", vinfo);
  128. for (size_t j = 0; j < vinfo.size(); ++j)
  129. {
  130. UserInfo info = vinfo[j];
  131. cout << "[userInfo]:" << j << endl;
  132. cout << "<qq>:" << info.qq << endl;
  133. cout << "<nick>:" << info.nick << endl;
  134. cout << "<birthday>:";
  135. for (size_t i = 0; i < info.birthday.size(); ++i)
  136. {
  137. cout << info.birthday[i] << ",";
  138. }
  139. cout << endl;
  140. cout << "<city>:" << info.city << endl;
  141. }
  142. cout << "---------------------------------" << endl;
  143. //map
  144. map<short, FriendInfo> minfo;
  145. server.get("friendInfo", minfo);
  146. for (map<short, FriendInfo>::iterator it = minfo.begin(); it != minfo.end(); ++it)
  147. {
  148. cout << "[friendInfo]:" << it->first << endl;
  149. cout << "<uin>:" << it->second.uin << endl;
  150. cout << "<nick>:" << it->second.nick << endl;
  151. cout << "<birthday>:";
  152. for (size_t i = 0; i < it->second.birthday.size(); ++i)
  153. {
  154. cout << it->second.birthday[i] << ",";
  155. }
  156. cout << endl;
  157. }
  158. cout << "---------------------------------" << endl;
  159. //crypt-attr
  160. UniAttribute<> cryptAttr;
  161. vector<char> cryptAttrBuffer;
  162. server.get("crypt-attr", cryptAttrBuffer);
  163. //do decrypt...
  164. cryptAttr.decode(cryptAttrBuffer);
  165. cout << "[attr-qq]:" << cryptAttr.get<int>("attr-qq") << endl;
  166. cout << "[attr-nick]:" << cryptAttr.get<string>("attr-nick") << endl;
  167. vector<FriendInfo> sfi;
  168. cryptAttr.get("attr-friends", sfi);
  169. cout << "[attr-friends]:" << sfi.size() << endl;
  170. for (size_t i = 0; i < sfi.size(); ++i)
  171. {
  172. cout << "<uin>:" << sfi[i].uin << endl;
  173. cout << "<nick>:" << sfi[i].nick << endl;
  174. }
  175. cout << "---------------------------------" << endl;
  176. ////////////////////////////////////////
  177. cout << "{default}:" << server.getByDefault<string>("default", "kaka") << endl;
  178. }
  179. catch (exception& e)
  180. {
  181. cout << "excep:" << e.what() << endl;
  182. }
  183. catch (...)
  184. {
  185. cout << "excep." << endl;
  186. }
  187. return 0;
  188. }