GrpcPrint/PrintS/DataManage/ClientInfo.cpp

64 lines
1.7 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()) {
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;
}