SDKInterface.cpp 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. #include "stdafx.h"
  2. #include "SDKInterface.h"
  3. bool SDKInterface::m_bShortCut = false;
  4. std::shared_ptr<IXPhoneDevice> SDKInterface::m_XPhoneDevice = NULL;
  5. IXPhoneMonitorAddin* SDKInterface::m_pMonitor = NULL;
  6. SDKInterface::SDKInterface() :m_bInit(false)
  7. {
  8. }
  9. SDKInterface::~SDKInterface()
  10. {
  11. }
  12. bool SDKInterface::IsTaskIdExist(INT nTaskId)
  13. {
  14. bool bExist = false;
  15. for (std::vector<TaskInfo>::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++)
  16. {
  17. if (it->nTaskId == nTaskId)
  18. {
  19. bExist = TRUE;
  20. break;
  21. }
  22. }
  23. return bExist;
  24. }
  25. bool SDKInterface::IsTaskTypeExist(XPhonePlus::XPhone_TaskType TaskType)
  26. {
  27. bool bExist = false;
  28. for (std::vector<TaskInfo>::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++)
  29. {
  30. if (it->TaskType == TaskType)
  31. {
  32. bExist = TRUE;
  33. break;
  34. }
  35. }
  36. return bExist;
  37. }
  38. void SDKInterface::StopTask(INT nTaskId)
  39. {
  40. }
  41. INT SDKInterface::GetMaxTaskId()
  42. {
  43. INT nMaxTaskId = -1;
  44. for (std::vector<TaskInfo>::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++)
  45. {
  46. nMaxTaskId = it->nTaskId > nMaxTaskId ? it->nTaskId : nMaxTaskId;
  47. }
  48. return ++nMaxTaskId;
  49. }
  50. bool SDKInterface::Init()
  51. {
  52. XString strAdbResult = IXPhoneMonitorAddin::ExecuteAdbCommand(__XT("XPhoneAdb"));
  53. if (strAdbResult != __XT("XPhoneAdb"))
  54. {
  55. printf("adb 服务进程不是本模块的,必须先结束 其他adb 进程\r\n");
  56. return false;
  57. }
  58. m_pMonitor = IXPhoneMonitorAddin::CreateInstance();
  59. if (XErrorcode_Success == m_pMonitor->Init((IXPhoneDeviceEvent*)this))
  60. {
  61. m_pMonitor->StartListen();
  62. return true;
  63. }
  64. return false;
  65. }
  66. void SDKInterface::SavePng(const byte*pBuffer, int iLen, const XCHAR* strSavePath)
  67. {
  68. FILE* pFile = _wfopen(strSavePath, L"wb+");
  69. if (NULL == pFile)
  70. {
  71. return;
  72. }
  73. fwrite(pBuffer, 1, iLen, pFile);
  74. fclose(pFile);
  75. }
  76. void SDKInterface::OnScreenShow(const byte* buffer, int iBufferLen)
  77. {
  78. if (m_bShortCut)
  79. {
  80. SavePng(buffer, iBufferLen, __XT("c:\\screenshot.png"));
  81. m_bShortCut = false;
  82. printf("截图保存完成\r\n");
  83. }
  84. }
  85. void SDKInterface::OnRecvTcpMsg(const XString& strDeviceIdentify, const byte* buffer, int iBufferLen)
  86. {
  87. XPhonePlus::XPhone_ReqHead head;
  88. head.ParseFromArray(buffer, iBufferLen);
  89. switch (head.head().msgtype())
  90. {
  91. case XPhonePlus::MsgType_ContactInfoRsp:
  92. {
  93. printf("获取到联系人列表:\r\n");
  94. XPhonePlus::XPhone_ContactInfoRsp response;
  95. response.ParseFromArray(buffer, iBufferLen);
  96. // 打印出所有微信好友信息;
  97. INT nSize = response.contactlist_size();
  98. for (int i = 0; i < nSize; i++ )
  99. {
  100. XPhonePlus::XPhone_ContactInfo pContactInfo = response.contactlist(i);
  101. pContactInfo.PrintDebugString();
  102. }
  103. response.PrintDebugString();
  104. }
  105. break;
  106. case XPhonePlus::MsgType_ChatroomInfoRsp:
  107. {
  108. printf("获取到聊天室列表:\r\n");
  109. XPhonePlus::XPhone_ChatroomInfoRsp response;
  110. response.ParseFromArray(buffer, iBufferLen);
  111. // 打印出所有微信群信息;
  112. INT nSize = response.roomlist_size();
  113. INT nMemberSize = 0;
  114. for (int i = 0; i < nSize; i++ )
  115. {
  116. XPhonePlus::XPhone_ChatRoomInfo pChatRoomInfo = response.roomlist(i);
  117. nMemberSize = pChatRoomInfo.members_size();
  118. printf("微信群成员数量:%d\r\n",nMemberSize);
  119. // 获取微信群里的成员信息;
  120. for (int j = 0; j < nMemberSize; j++ )
  121. {
  122. XPhonePlus::XPhone_ContactInfo pContactInfo = pChatRoomInfo.members(j);
  123. pContactInfo.PrintDebugString();
  124. }
  125. printf("\r\n");
  126. pChatRoomInfo.PrintDebugString();
  127. }
  128. //response.PrintDebugString();
  129. }
  130. break;
  131. case XPhonePlus::MsgType_CaijiIDRsp:
  132. {
  133. printf("采集到的id:\r\n");
  134. XPhonePlus::XPhone_CaijiIDRsp response;
  135. response.ParseFromArray(buffer, iBufferLen);
  136. response.PrintDebugString();
  137. }
  138. break;;
  139. case XPhonePlus::MsgType_TaskRsp:
  140. {
  141. //接收到任务完成或者暂停消息
  142. XPhonePlus::XPhone_TaskRsp resp;
  143. resp.ParseFromArray(buffer, iBufferLen);
  144. switch (resp.tasktype())
  145. {
  146. case XPhonePlus::TaskType_OneKeyZan:
  147. {
  148. printf("点赞完成\r\n");
  149. }
  150. break;
  151. case XPhonePlus::TaskType_AddNearby:
  152. {
  153. printf("添加附近的人完成\r\n");
  154. }
  155. break;
  156. case XPhonePlus::TaskType_AddAddressbook:
  157. {
  158. printf("添加通讯录完成\r\n");
  159. }
  160. break;
  161. case XPhonePlus::TaskType_AddQQFriend:
  162. {
  163. printf("QQ 好友添加完成\r\n");
  164. }
  165. break;
  166. case XPhonePlus::TaskType_AddWeichatFriend:
  167. {
  168. printf("微信好友添加完成\r\n");
  169. }
  170. break;
  171. case XPhonePlus::TaskType_Radar:
  172. {
  173. printf("雷达扫描完成\r\n");
  174. }
  175. break;
  176. case XPhonePlus::TaskType_Yaoyiyao:
  177. {
  178. printf("摇一摇完成\r\n");
  179. }
  180. break;
  181. case XPhonePlus::TaskType_SendSNS:
  182. {
  183. printf("朋友圈发送完成\r\n");
  184. }
  185. break;
  186. case XPhonePlus::TaskType_DeleteZombine:
  187. {
  188. printf("僵尸删除完成\r\n");
  189. }
  190. break;
  191. default:
  192. break;
  193. }
  194. }
  195. break;
  196. case XPhonePlus::MsgType_ChatMsg:
  197. {
  198. printf("接收到好友消息\r\n");
  199. XPhonePlus::XPhone_ChatMsg response;
  200. response.ParseFromArray(buffer, iBufferLen);
  201. response.PrintDebugString();
  202. }
  203. break;
  204. }
  205. }
  206. void SDKInterface::OnCommonDisconnect(const XString& strDeviceIdentify)
  207. {
  208. printf("设备断开了:%s\r\n", XStringToLocal(strDeviceIdentify).c_str());
  209. }
  210. void SDKInterface::XPhoneDeviceChanged(std::shared_ptr<IXPhoneDevice> pXPhoneDevice, enum XDeviceChange changeType)
  211. {
  212. XString strIdentify = pXPhoneDevice->GetIdentify();
  213. printf("device changed: changetype:%d identify:%s\r\n", changeType, XStringToLocal(strIdentify).c_str());
  214. if (changeType == XDeviceChange_Add)
  215. {
  216. m_XPhoneDevice = pXPhoneDevice;
  217. XErrorcode errorcode = m_XPhoneDevice->ConnectToDevice();
  218. printf("设备连接:errorcode:%d %s\r\n", errorcode, XStringToLocal(strIdentify).c_str());
  219. if (errorcode == XErrorcode_Success)
  220. {
  221. XDeviceInfo deviceInfo;
  222. errorcode = m_XPhoneDevice->GetDeviceInfo(deviceInfo, true);
  223. printf("获取设备信息:errorcode:%d %s\r\n品牌:%s\r\n型号:%s\r\n分辨率:%s\r\n设备名:%s\r\nIMEI:%s\r\n", errorcode, XStringToLocal(strIdentify).c_str(),
  224. XStringToLocal(deviceInfo.szBrand).c_str(),
  225. XStringToLocal(deviceInfo.szModel).c_str(),
  226. XStringToLocal(deviceInfo.szResolution).c_str(),
  227. XStringToLocal(deviceInfo.szDeviceName).c_str(),
  228. XStringToLocal(deviceInfo.szIMEI).c_str());
  229. //设置屏幕回调;
  230. pXPhoneDevice->SetScreenShowCallback((IXPhoneScreenShow*)this);
  231. //设置消息回调;
  232. pXPhoneDevice->SetCommonTcpMsgCallback((IXPhoneCommonRecvMsg*)this);
  233. m_bInit = true;
  234. }
  235. }
  236. else
  237. {
  238. m_XPhoneDevice = NULL;
  239. m_bInit = false;
  240. }
  241. }
  242. void SDKInterface::BrightScreen(bool bBright /* = true */)
  243. {
  244. if (!m_bInit)
  245. return;
  246. std::string strRequest;
  247. if (!bBright)
  248. {
  249. XPhonePlus::XPhone_ReqHead request;
  250. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  251. pBase->set_msgtype(XPhonePlus::MsgType_LockScreen);
  252. request.set_allocated_head(pBase);
  253. request.SerializeToString(&strRequest);
  254. }
  255. else
  256. {
  257. XPhonePlus::XPhone_ReqHead request;
  258. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  259. pBase->set_msgtype(XPhonePlus::MsgType_UnlockScreen);
  260. request.set_allocated_head(pBase);
  261. request.SerializeToString(&strRequest);
  262. }
  263. m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length());
  264. }
  265. void SDKInterface::StartDianZan()
  266. {
  267. // 判断是否已经有任务在执行了;
  268. if (IsTaskTypeExist(XPhonePlus::TaskType_OneKeyZan))
  269. return;
  270. // 获取有效的任务id;
  271. TaskInfo tagTaskInfo;
  272. tagTaskInfo.nTaskId = GetMaxTaskId();
  273. tagTaskInfo.TaskType = XPhonePlus::TaskType_OneKeyZan;
  274. tagTaskInfo.TaskStatus = XPhonePlus::TaskStatusn_Unknow;
  275. tagTaskInfo.TaskAction = XPhonePlus::TaskAction_Start;
  276. m_taskinfo.push_back(tagTaskInfo);
  277. XPhonePlus::XPhone_TaskReq request;
  278. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  279. pBase->set_msgtype(XPhonePlus::MsgType_TaskReq);
  280. request.set_allocated_head(pBase);
  281. request.set_action(XPhonePlus::TaskAction_Start);
  282. request.set_tasktype(XPhonePlus::TaskType_OneKeyZan);
  283. request.set_taskid(tagTaskInfo.nTaskId); //设置一个任务ID,使用者自己生成 当任务完成的时候会回调,带上这个id, 如果需要暂停任务也需要这个ID
  284. //发送命令开始点赞
  285. std::string strRequest;
  286. request.SerializeToString(&strRequest);
  287. m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length());
  288. }
  289. void SDKInterface::StopDianZan()
  290. {
  291. bool bExist = false;
  292. std::vector<TaskInfo>::iterator it = m_taskinfo.begin();
  293. for (; it != m_taskinfo.end(); it++)
  294. {
  295. if (it->TaskType == XPhonePlus::TaskType_OneKeyZan)
  296. {
  297. bExist = true;
  298. break;
  299. }
  300. }
  301. if (!bExist)
  302. return;
  303. XPhonePlus::XPhone_TaskReq request;
  304. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  305. pBase->set_msgtype(XPhonePlus::MsgType_TaskReq);
  306. request.set_allocated_head(pBase);
  307. request.set_action(XPhonePlus::TaskAction_Stop);
  308. request.set_tasktype(XPhonePlus::TaskType_OneKeyZan);
  309. request.set_taskid(it->nTaskId); //设置一个任务ID,使用者自己生成 当任务完成的时候会回调,带上这个id, 如果需要暂停任务也需要这个ID
  310. //发送命令开始点赞
  311. std::string strRequest;
  312. request.SerializeToString(&strRequest);
  313. m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length());
  314. m_taskinfo.erase(it);
  315. }
  316. void SDKInterface::GetContactList()
  317. {
  318. XPhonePlus::XPhone_ReqHead request;
  319. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  320. pBase->set_msgtype(XPhonePlus::MsgType_ContactInfoReq);
  321. request.set_allocated_head(pBase);
  322. std::string strRequest;
  323. request.SerializeToString(&strRequest);
  324. m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length());
  325. }
  326. void SDKInterface::GetChatroomList()
  327. {
  328. XPhonePlus::XPhone_ReqHead request;
  329. XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase;
  330. pBase->set_msgtype(XPhonePlus::MsgType_ChatroomInfoReq);
  331. request.set_allocated_head(pBase);
  332. std::string strRequest;
  333. request.SerializeToString(&strRequest);
  334. m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length());
  335. }