#include "ClientInfo.h" //添加客户端 void ClientWrapper::AddClient(ClientInfo* clientInfo) { bool isExist = false; std::lock_guard lck(m_mux); for (auto client = m_clientList.begin(); client != m_clientList.end(); ++client) { if (clientInfo == *client) { isExist = true; break; } } if (!isExist) m_clientList.emplace_back(clientInfo); } //下线检测 void ClientWrapper::OfflineCheck() { std::lock_guard lck(m_mux); auto client = m_clientList.begin(); while (client != m_clientList.end()) { if (!(*client)->IsConnect()) { size_t pos = (*client)->m_clientAddr.find_first_of(':'); printf("\n%s 下线了...\n", (*client)->m_clientAddr.substr(pos + 1).c_str()); delete (*client); client = m_clientList.erase(client); } else { ++client; } } } void ClientWrapper::Clear() { std::lock_guard lck(m_mux); auto client = m_clientList.begin(); while (client != m_clientList.end()) { (*client)->m_context->TryCancel(); if (*client) delete (*client); ++client; } m_clientList.clear(); } void ClientWrapper::PushAllClient(const WriteData& wd) { std::lock_guard lck(m_mux); auto client = m_clientList.begin(); while (client != m_clientList.end()) { (*client)->PushMsg(new WriteData(wd)); ++client; } } bool ClientWrapper::IsExist(ClientInfo* ci) { std::lock_guard lck(m_mux); bool flag = false; auto client = m_clientList.begin(); while (client != m_clientList.end()) { if (*client == ci){ flag = true; break; } ++client; } return flag; }