void  Server::SendNewListToAllClients(const int& IDclient, char* buffer, std::string& tmpAllClientFiles)
{
	int BytesSend = 0;
	int size = 0;
	int i = 0;
	std::lock_guard<std::mutex> guard(ClientMutex);
	for (i = 0; i < m_AllClients.size(); i++)
	{
		if (m_AllClients[i].IDSock != IDclient)
		{
			//std::lock_guard<std::mutex> guar(ClientMutex);
			SendCommandMsg(m_AllClients[i].cl_socket, SendNewListFromClient);
			SendCommandMsg(m_AllClients[i].cl_socket, IDclient);
			size = tmpAllClientFiles.size();
			SendCommandMsg(m_AllClients[i].cl_socket, size);
			do
			{
				send(m_AllClients[i].cl_socket, (char *)&tmpAllClientFiles.c_str()[BytesSend], BUFFER_SIZE, 0);//отправка всего списка клиенту
				BytesSend += BUFFER_SIZE;
				size -= BUFFER_SIZE;
			} while (size > 0);
			BytesSend = 0;
		}
	}
}
void Server::ClientToClinet(const SOCKET& ClientSock, char* buffer)
{
	//	std::lock_guard<std::mutex> guard(ClientMutex);
	int tmpID = 0, i;
	int index = 0;
	bool flagConnect = false;
	if (ReadMsg(ClientSock, tmpID, buffer))
	{
		SendCommandMsg(ClientSock, TakeIP);
		std::lock_guard<std::mutex> guard(ClientMutex);
		for (i = 0; i < m_AllClients.size(); i++)
		{
			if (m_AllClients[i].IDSock == tmpID)
			{
				strcpy(buffer, inet_ntoa(m_AllClients[i].client_addr.sin_addr));
				send(ClientSock, (char *)&buffer[0], BUFFER_SIZE, 0);
				memset(buffer, '\0', BUFFER_SIZE);
				flagConnect = true;
				break;
			}
		}
		if (!flagConnect)
			SendCommandMsg(ClientSock, Cancel);
	}

}
void Server::SendIDDeleteToAllClient(const int& IDclient)
{
	int i;
	std::lock_guard<std::mutex> guard(ClientMutex);
	for (i = 0; i < m_AllClients.size(); i++)
	{
		SendCommandMsg(m_AllClients[i].cl_socket, DeleteClient);
		SendCommandMsg(m_AllClients[i].cl_socket, IDclient);
	}
}
void CDesktopDlg::OnBnClickedBtnShowDesktop()
{
	DESKTOPINFO_C tagDesktopInfo;
	memset(&tagDesktopInfo, 0, sizeof(DESKTOPINFO_C));
	tagDesktopInfo.nType = DESKTOP_ICON;
	tagDesktopInfo.bTag = false;  //显示桌面
	SendCommandMsg(tagDesktopInfo);
}
void CDesktopDlg::OnBnClickedBtnShowTaskbar()
{
	DESKTOPINFO_C tagDesktopInfo;
	memset(&tagDesktopInfo, 0, sizeof(DESKTOPINFO_C));
	tagDesktopInfo.nType = TASKBAR;
	tagDesktopInfo.bTag = false;  //显示任务栏
	SendCommandMsg(tagDesktopInfo);
}
void CDesktopDlg::OnBnClickedBtnAllowMouse()
{
	// TODO: 在此添加控件通知处理程序代码
	DESKTOPINFO_C tagDesktopInfo;
	memset(&tagDesktopInfo, 0, sizeof(DESKTOPINFO_C));
	tagDesktopInfo.nType = MOUSE_MOVE;
	tagDesktopInfo.bTag = true;  //允许鼠标移动
	SendCommandMsg(tagDesktopInfo);
}
//查看剪贴板内容
void CDesktopDlg::OnBnClickedBtnViewClip()
{
	// TODO: 在此添加控件通知处理程序代码
	DESKTOPINFO_C tagDesktopInfo;
	memset(&tagDesktopInfo, 0, sizeof(DESKTOPINFO_C));
	tagDesktopInfo.nType = CLIPBOARD;
	tagDesktopInfo.bTag = true;
	SendCommandMsg(tagDesktopInfo);
}
bool Server::GetListFromClient(const SOCKET& ClientSock, const int& IDclient, char* buffer, std::string& tmpAllClientFiles)
{
	tmpAllClientFiles.clear();
	bool flagConnect = false;
	int cm = 0;
	int size = 0;
	SendCommandMsg(ClientSock, SendListToServer);
	if (ReadMsg(ClientSock, cm, buffer))
	{
		if (cm == Ok)
		{
			SendCommandMsg(ClientSock, Ok);
			if (ReadMsg(ClientSock, size, buffer))
			{
				SendCommandMsg(ClientSock, Ok);
				flagConnect = true;
				tmpAllClientFiles = std::to_string(IDclient);
				tmpAllClientFiles += ':';
				do
				{
					if (recv(ClientSock, (char *)&buffer[0], BUFFER_SIZE, 0) != SOCKET_ERROR)
					{
						tmpAllClientFiles += buffer;
						size -= BUFFER_SIZE;
						memset(buffer, '\0', BUFFER_SIZE);
					}
					else
					{
						flagConnect = false;
						break;
					}
				} while (size > 0);
				memset(buffer, '\0', BUFFER_SIZE);
				if (flagConnect)
				{
					std::cout << tmpAllClientFiles << "\n";
					WriteInfoFromClient(IDclient, tmpAllClientFiles);//записываем информацию от клиента в вектор данных сервера						
					return true;
				}
			}
		}
	}
	return false;
}
void Server::SendListToCLient(const SOCKET& ClientSock, const int& IDclient, char* buffer)
{
	std::string tmpAllClientFiles = "";
	int cm = 0, i = 0;
	int size = 0;
	int BytesSend = 0;
	GetAllList(tmpAllClientFiles, IDclient);
	if (tmpAllClientFiles.size() > 0)
	{
		SendCommandMsg(ClientSock, SetListClients);
		if (ReadMsg(ClientSock, cm, buffer))
		{
			if (cm == Ok)
			{
				size = tmpAllClientFiles.size();
				//Send size of allFiles list
				SendCommandMsg(ClientSock, size);
				if (ReadMsg(ClientSock, cm, buffer))
				{
					if (cm == Ok)
					{
						do
						{
							strcpy(buffer, tmpAllClientFiles.c_str());
							send(ClientSock, (char *)&buffer[0], BUFFER_SIZE, 0);
							//отправка всего списка клиенту
							//send(ClientSock, (char *)&tmpAllClientFiles.c_str()[BytesSend], BUFFER_SIZE, 0);

							BytesSend += BUFFER_SIZE;
							size -= BUFFER_SIZE;
						} while (size > 0);
						memset(buffer, '\0', BUFFER_SIZE);
					}
				}
			}
		}
	}
}
void Server::GetNewListFromClient(const SOCKET& ClientSock, int& IDclient, char* buffer, std::string& tmpAllClientFiles, bool flagConnect)
{
	tmpAllClientFiles.clear();
	int cm = 0;
	int size = 0;
	SendCommandMsg(ClientSock, GetNewList);
	if (ReadMsg(ClientSock, cm, buffer))
	{
		if (cm == Ok)
		{
			if (GetListFromClient(ClientSock, IDclient, buffer, tmpAllClientFiles))
				flagConnect = true;
		}
		SendNewListToAllClients(IDclient, buffer, tmpAllClientFiles);
	}
}