79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
#include "ClientInfo.h"
|
|
|
|
//添加客户端
|
|
void ClientWrapper::AddClient(ClientInfo* clientInfo) {
|
|
bool isExist = false;
|
|
std::lock_guard<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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;
|
|
}
|
|
|
|
void ClientWrapper::CloseOne(ClientInfo* ci) {
|
|
std::lock_guard<std::mutex> lck(m_mux);
|
|
auto client = m_clientList.begin();
|
|
while (client != m_clientList.end()) {
|
|
if (*client == ci) {
|
|
(*client)->m_context->TryCancel();
|
|
delete (*client);
|
|
m_clientList.erase(client);
|
|
break;
|
|
}
|
|
++client;
|
|
}
|
|
} |