#include "stdafx.h" #include "SDKInterface.h" bool SDKInterface::m_bShortCut = false; std::shared_ptr SDKInterface::m_XPhoneDevice = NULL; IXPhoneMonitorAddin* SDKInterface::m_pMonitor = NULL; SDKInterface::SDKInterface() :m_bInit(false) { } SDKInterface::~SDKInterface() { } bool SDKInterface::IsTaskIdExist(INT nTaskId) { bool bExist = false; for (std::vector::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++) { if (it->nTaskId == nTaskId) { bExist = TRUE; break; } } return bExist; } bool SDKInterface::IsTaskTypeExist(XPhonePlus::XPhone_TaskType TaskType) { bool bExist = false; for (std::vector::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++) { if (it->TaskType == TaskType) { bExist = TRUE; break; } } return bExist; } void SDKInterface::StopTask(INT nTaskId) { } INT SDKInterface::GetMaxTaskId() { INT nMaxTaskId = -1; for (std::vector::iterator it = m_taskinfo.begin(); it != m_taskinfo.end(); it++) { nMaxTaskId = it->nTaskId > nMaxTaskId ? it->nTaskId : nMaxTaskId; } return ++nMaxTaskId; } bool SDKInterface::Init() { XString strAdbResult = IXPhoneMonitorAddin::ExecuteAdbCommand(__XT("XPhoneAdb")); if (strAdbResult != __XT("XPhoneAdb")) { printf("adb 服务进程不是本模块的,必须先结束 其他adb 进程\r\n"); return false; } m_pMonitor = IXPhoneMonitorAddin::CreateInstance(); if (XErrorcode_Success == m_pMonitor->Init((IXPhoneDeviceEvent*)this)) { m_pMonitor->StartListen(); return true; } return false; } void SDKInterface::SavePng(const byte*pBuffer, int iLen, const XCHAR* strSavePath) { FILE* pFile = _wfopen(strSavePath, L"wb+"); if (NULL == pFile) { return; } fwrite(pBuffer, 1, iLen, pFile); fclose(pFile); } void SDKInterface::OnScreenShow(const byte* buffer, int iBufferLen) { if (m_bShortCut) { SavePng(buffer, iBufferLen, __XT("c:\\screenshot.png")); m_bShortCut = false; printf("截图保存完成\r\n"); } } void SDKInterface::OnRecvTcpMsg(const XString& strDeviceIdentify, const byte* buffer, int iBufferLen) { XPhonePlus::XPhone_ReqHead head; head.ParseFromArray(buffer, iBufferLen); switch (head.head().msgtype()) { case XPhonePlus::MsgType_ContactInfoRsp: { printf("获取到联系人列表:\r\n"); XPhonePlus::XPhone_ContactInfoRsp response; response.ParseFromArray(buffer, iBufferLen); // 打印出所有微信好友信息; INT nSize = response.contactlist_size(); for (int i = 0; i < nSize; i++ ) { XPhonePlus::XPhone_ContactInfo pContactInfo = response.contactlist(i); pContactInfo.PrintDebugString(); } response.PrintDebugString(); } break; case XPhonePlus::MsgType_ChatroomInfoRsp: { printf("获取到聊天室列表:\r\n"); XPhonePlus::XPhone_ChatroomInfoRsp response; response.ParseFromArray(buffer, iBufferLen); // 打印出所有微信群信息; INT nSize = response.roomlist_size(); INT nMemberSize = 0; for (int i = 0; i < nSize; i++ ) { XPhonePlus::XPhone_ChatRoomInfo pChatRoomInfo = response.roomlist(i); nMemberSize = pChatRoomInfo.members_size(); printf("微信群成员数量:%d\r\n",nMemberSize); // 获取微信群里的成员信息; for (int j = 0; j < nMemberSize; j++ ) { XPhonePlus::XPhone_ContactInfo pContactInfo = pChatRoomInfo.members(j); pContactInfo.PrintDebugString(); } printf("\r\n"); pChatRoomInfo.PrintDebugString(); } //response.PrintDebugString(); } break; case XPhonePlus::MsgType_CaijiIDRsp: { printf("采集到的id:\r\n"); XPhonePlus::XPhone_CaijiIDRsp response; response.ParseFromArray(buffer, iBufferLen); response.PrintDebugString(); } break;; case XPhonePlus::MsgType_TaskRsp: { //接收到任务完成或者暂停消息 XPhonePlus::XPhone_TaskRsp resp; resp.ParseFromArray(buffer, iBufferLen); switch (resp.tasktype()) { case XPhonePlus::TaskType_OneKeyZan: { printf("点赞完成\r\n"); } break; case XPhonePlus::TaskType_AddNearby: { printf("添加附近的人完成\r\n"); } break; case XPhonePlus::TaskType_AddAddressbook: { printf("添加通讯录完成\r\n"); } break; case XPhonePlus::TaskType_AddQQFriend: { printf("QQ 好友添加完成\r\n"); } break; case XPhonePlus::TaskType_AddWeichatFriend: { printf("微信好友添加完成\r\n"); } break; case XPhonePlus::TaskType_Radar: { printf("雷达扫描完成\r\n"); } break; case XPhonePlus::TaskType_Yaoyiyao: { printf("摇一摇完成\r\n"); } break; case XPhonePlus::TaskType_SendSNS: { printf("朋友圈发送完成\r\n"); } break; case XPhonePlus::TaskType_DeleteZombine: { printf("僵尸删除完成\r\n"); } break; default: break; } } break; case XPhonePlus::MsgType_ChatMsg: { printf("接收到好友消息\r\n"); XPhonePlus::XPhone_ChatMsg response; response.ParseFromArray(buffer, iBufferLen); response.PrintDebugString(); } break; } } void SDKInterface::OnCommonDisconnect(const XString& strDeviceIdentify) { printf("设备断开了:%s\r\n", XStringToLocal(strDeviceIdentify).c_str()); } void SDKInterface::XPhoneDeviceChanged(std::shared_ptr pXPhoneDevice, enum XDeviceChange changeType) { XString strIdentify = pXPhoneDevice->GetIdentify(); printf("device changed: changetype:%d identify:%s\r\n", changeType, XStringToLocal(strIdentify).c_str()); if (changeType == XDeviceChange_Add) { m_XPhoneDevice = pXPhoneDevice; XErrorcode errorcode = m_XPhoneDevice->ConnectToDevice(); printf("设备连接:errorcode:%d %s\r\n", errorcode, XStringToLocal(strIdentify).c_str()); if (errorcode == XErrorcode_Success) { XDeviceInfo deviceInfo; errorcode = m_XPhoneDevice->GetDeviceInfo(deviceInfo, true); 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(), XStringToLocal(deviceInfo.szBrand).c_str(), XStringToLocal(deviceInfo.szModel).c_str(), XStringToLocal(deviceInfo.szResolution).c_str(), XStringToLocal(deviceInfo.szDeviceName).c_str(), XStringToLocal(deviceInfo.szIMEI).c_str()); //设置屏幕回调; pXPhoneDevice->SetScreenShowCallback((IXPhoneScreenShow*)this); //设置消息回调; pXPhoneDevice->SetCommonTcpMsgCallback((IXPhoneCommonRecvMsg*)this); m_bInit = true; } } else { m_XPhoneDevice = NULL; m_bInit = false; } } void SDKInterface::BrightScreen(bool bBright /* = true */) { if (!m_bInit) return; std::string strRequest; if (!bBright) { XPhonePlus::XPhone_ReqHead request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_LockScreen); request.set_allocated_head(pBase); request.SerializeToString(&strRequest); } else { XPhonePlus::XPhone_ReqHead request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_UnlockScreen); request.set_allocated_head(pBase); request.SerializeToString(&strRequest); } m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length()); } void SDKInterface::StartDianZan() { // 判断是否已经有任务在执行了; if (IsTaskTypeExist(XPhonePlus::TaskType_OneKeyZan)) return; // 获取有效的任务id; TaskInfo tagTaskInfo; tagTaskInfo.nTaskId = GetMaxTaskId(); tagTaskInfo.TaskType = XPhonePlus::TaskType_OneKeyZan; tagTaskInfo.TaskStatus = XPhonePlus::TaskStatusn_Unknow; tagTaskInfo.TaskAction = XPhonePlus::TaskAction_Start; m_taskinfo.push_back(tagTaskInfo); XPhonePlus::XPhone_TaskReq request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_TaskReq); request.set_allocated_head(pBase); request.set_action(XPhonePlus::TaskAction_Start); request.set_tasktype(XPhonePlus::TaskType_OneKeyZan); request.set_taskid(tagTaskInfo.nTaskId); //设置一个任务ID,使用者自己生成 当任务完成的时候会回调,带上这个id, 如果需要暂停任务也需要这个ID //发送命令开始点赞 std::string strRequest; request.SerializeToString(&strRequest); m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length()); } void SDKInterface::StopDianZan() { bool bExist = false; std::vector::iterator it = m_taskinfo.begin(); for (; it != m_taskinfo.end(); it++) { if (it->TaskType == XPhonePlus::TaskType_OneKeyZan) { bExist = true; break; } } if (!bExist) return; XPhonePlus::XPhone_TaskReq request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_TaskReq); request.set_allocated_head(pBase); request.set_action(XPhonePlus::TaskAction_Stop); request.set_tasktype(XPhonePlus::TaskType_OneKeyZan); request.set_taskid(it->nTaskId); //设置一个任务ID,使用者自己生成 当任务完成的时候会回调,带上这个id, 如果需要暂停任务也需要这个ID //发送命令开始点赞 std::string strRequest; request.SerializeToString(&strRequest); m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length()); m_taskinfo.erase(it); } void SDKInterface::GetContactList() { XPhonePlus::XPhone_ReqHead request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_ContactInfoReq); request.set_allocated_head(pBase); std::string strRequest; request.SerializeToString(&strRequest); m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length()); } void SDKInterface::GetChatroomList() { XPhonePlus::XPhone_ReqHead request; XPhonePlus::XPhone_MsgBase* pBase = new XPhonePlus::XPhone_MsgBase; pBase->set_msgtype(XPhonePlus::MsgType_ChatroomInfoReq); request.set_allocated_head(pBase); std::string strRequest; request.SerializeToString(&strRequest); m_XPhoneDevice->SendCommonTcpMSG((const byte*)strRequest.c_str(), strRequest.length()); }