void CLogSocket::DoExecute() { unsigned long ulLastCheckTick = 0; unsigned long ulTick = 0; LoadConfig(); while (!IsTerminated()) { try { m_ClientSocket.Execute(); ulTick = GetTickCount(); if (ulTick - ulLastCheckTick >= 10 * 1000) { ulLastCheckTick = ulTick; if (m_ClientSocket.IsConnected()) { if (m_iPingCount > 3) m_ClientSocket.Close(); else SendHeartBeat(); } else m_ClientSocket.Open(); } } catch (...) { SendDebugString("CLogSocket::DoExecute Exception"); } WaitForSingleObject(m_Event, 10); } m_ClientSocket.Close(); }
void CSampleClientManager::ConnectToServer(const std::string& sIP, const int iPort) { m_Address = sIP; m_Port = iPort; SetReconnectInterval(10000); SendDebugString("开始连接。。。"); }
CSampleClientManager::CSampleClientManager() { SendDebugString("CSampleClientManager 创建"); m_OnConnect = std::bind(&CSampleClientManager::OnSocketConnect, this, std::placeholders::_1); m_OnDisConnect = std::bind(&CSampleClientManager::OnSocketDisconnect, this, std::placeholders::_1); m_OnRead = std::bind(&CSampleClientManager::OnSocketRead, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); m_OnError = std::bind(&CSampleClientManager::OnSocketError, this, std::placeholders::_1, std::placeholders::_2); }
void SerialComm::ProcessData() { MessageType code; uint32_t mask; if (!data_input.ParseInto(code, mask)) return; if (code != MessageType::Command) return; uint32_t ack_data{0}; if (mask & COM_SET_EEPROM_DATA && data_input.ParseInto(config->raw)) { writeEEPROM(); // TODO: deal with side effect code ack_data |= COM_SET_EEPROM_DATA; } if (mask & COM_REINIT_EEPROM_DATA) { initializeEEPROM(); // TODO: deal with side effect code writeEEPROM(); // TODO: deal with side effect code } if (mask & COM_REQ_EEPROM_DATA) { SendConfiguration(); ack_data |= COM_REQ_EEPROM_DATA; } if (mask & COM_REQ_ENABLE_ITERATION) { uint8_t flag; if (data_input.ParseInto(flag)) { if (flag == 1) state->processMotorEnablingIteration(); else state->disableMotors(); ack_data |= COM_REQ_ENABLE_ITERATION; } } // This should pass if any motor speed is set if (mask & COM_MOTOR_OVERRIDE_SPEED_ALL) { if (mask & COM_MOTOR_OVERRIDE_SPEED_0 && data_input.ParseInto(state->MotorOut[0])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_0; if (mask & COM_MOTOR_OVERRIDE_SPEED_1 && data_input.ParseInto(state->MotorOut[1])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_1; if (mask & COM_MOTOR_OVERRIDE_SPEED_2 && data_input.ParseInto(state->MotorOut[2])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_2; if (mask & COM_MOTOR_OVERRIDE_SPEED_3 && data_input.ParseInto(state->MotorOut[3])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_3; if (mask & COM_MOTOR_OVERRIDE_SPEED_4 && data_input.ParseInto(state->MotorOut[4])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_4; if (mask & COM_MOTOR_OVERRIDE_SPEED_5 && data_input.ParseInto(state->MotorOut[5])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_5; if (mask & COM_MOTOR_OVERRIDE_SPEED_6 && data_input.ParseInto(state->MotorOut[6])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_6; if (mask & COM_MOTOR_OVERRIDE_SPEED_7 && data_input.ParseInto(state->MotorOut[7])) ack_data |= COM_MOTOR_OVERRIDE_SPEED_7; } if (mask & COM_SET_COMMAND_OVERRIDE) { uint8_t flag; if (data_input.ParseInto(flag)) { if (flag == 1) state->set(STATUS_OVERRIDE); else state->clear(STATUS_OVERRIDE); ack_data |= COM_SET_COMMAND_OVERRIDE; } } if (mask & COM_SET_STATE_MASK) { uint32_t new_state_mask; if (data_input.ParseInto(new_state_mask)) { SetStateMsg(new_state_mask); ack_data |= COM_SET_STATE_MASK; } } if (mask & COM_SET_STATE_DELAY) { uint16_t new_state_delay; if (data_input.ParseInto(new_state_delay)) { send_state_delay = new_state_delay; ack_data |= COM_SET_STATE_DELAY; } } if (mask & COM_REQ_HISTORY) { String eeprom_data; for (size_t i = EEPROM_LOG_START; i < EEPROM_LOG_END; ++i) eeprom_data += char(EEPROM[i]); SendDebugString(eeprom_data, MessageType::HistoryData); ack_data |= COM_REQ_HISTORY; } if (mask & COM_SET_LED) { uint8_t mode, r1, g1, b1, r2, g2, b2, ind_r, ind_g; if (data_input.ParseInto(mode, r1, g1, b1, r2, g2, b2, ind_r, ind_g)) { led->set(LED::Pattern(mode), r1, g1, b1, r2, g2, b2, ind_r, ind_g); ack_data |= COM_SET_LED; } } if (mask & COM_REQ_RESPONSE) { SendResponse(mask, ack_data); } }
void CSampleClientManager::OnSocketDisconnect(void* Sender) { SendDebugString("连接已断开!"); }
void CSampleClientManager::OnSocketConnect(void* Sender) { SendDebugString("连接成功!"); }
void CSampleClientManager::Disconnect() { SendDebugString("主动断开"); Close(false); }
CSampleClientManager::~CSampleClientManager() { SendDebugString("CSampleClientManager 销毁"); }
static void DebugTimerCallback(int ,void *) { SendDebugString(); }