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);
}
示例#4
0
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();
}