void CMonitor::OnGetStatus()
{
CString strName;
int iMax = m_SockArray.GetSize();
for (int iSelection = 0; iSelection < iMax; ++iSelection)
{
CString * pDataString = GetDataString(iSelection);
CProgressCtrl * pProgressCtrl = GetProcessorProgressCtrl(iSelection);
CProgressCtrl * pMemoryProgressCtrl = GetMemoryProgressCtrl(iSelection);
*pDataString = "Getting Data";
UpdateData(FALSE);
SOCKET socket = m_SockArray[iSelection];
if (socket)
{
int iReturn = 0;
DWORD dwProcessor = 1;
LONG lProcessorUsage = 0;
LONG lMemoryUsage = 0;
char Message[1024];
pDataString = GetDataString(iSelection);
if (!pDataString)
ExitThread(0);
iReturn = send(socket, (char*)&dwProcessor, sizeof(DWORD), 0);
if (iReturn == SOCKET_ERROR)
{
iReturn = WSAGetLastError();
translate_WSAErrorCode(iReturn, Message);
strcpy(pDataString->GetBuffer(256), "--");
closesocket(socket);
socket = 0;
m_SockArray[iSelection] = socket;
}
#define MAX_RETRIES 1500
int iNameLength = 0;
iReturn = 0;
while (SOCKET_ERROR == recv(socket, (char*)&iNameLength, sizeof(int), 0))
{
if ((WSAGetLastError() != WSAEWOULDBLOCK))
{
closesocket(socket);
socket = 0;
m_SockArray[iSelection] = socket;
iReturn = WSAGetLastError();
break;
}
else
{
if (iReturn == MAX_RETRIES+1)
{
break;
}
++iReturn;
Sleep(100);
}
}
iReturn = 0;
LPTSTR pNameString = strName.GetBuffer(iNameLength);
while (SOCKET_ERROR == recv(socket, pNameString, iNameLength, 0))
{
if ((WSAGetLastError() != WSAEWOULDBLOCK))
{
closesocket(socket);
socket = 0;
m_SockArray[iSelection] = socket;
iReturn = WSAGetLastError();
break;
}
else
{
if (iReturn == MAX_RETRIES+1)
{
break;
}
++iReturn;
Sleep(100);
}
}
strName.ReleaseBuffer();
CString * pStringName = GetString(iSelection);
*pStringName = strName;
iReturn = 0;
while (SOCKET_ERROR == recv(socket, (char*)&lProcessorUsage, sizeof(LONG), 0))
{
if ((WSAGetLastError() != WSAEWOULDBLOCK))
{
closesocket(socket);
socket = 0;
m_SockArray[iSelection] = socket;
iReturn = WSAGetLastError();
break;
}
else
{
if (iReturn == MAX_RETRIES+1)
{
break;
}
++iReturn;
Sleep(100);
}
}
iReturn = 0;
while (SOCKET_ERROR == recv(socket, (char*)&lMemoryUsage, sizeof(LONG), 0))
{
if ((WSAGetLastError() != WSAEWOULDBLOCK))
{
closesocket(socket);
socket = 0;
m_SockArray[iSelection] = socket;
iReturn = WSAGetLastError();
break;
}
else
{
if (iReturn == MAX_RETRIES+1)
{
break;
}
++iReturn;
Sleep(100);
}
}
if (iReturn == MAX_RETRIES+1)
strcpy(pDataString->GetBuffer(256), "Failed");
else
{
if ((lProcessorUsage > 100))
{
strcpy(pDataString->GetBuffer(256), "Closed");
closesocket(socket);
socket = 0;
}
else
{
if (socket)
{
sprintf(pDataString->GetBuffer(256), "%d%%", lProcessorUsage);
if (pProgressCtrl)
pProgressCtrl->SetPos(lProcessorUsage);
if (pMemoryProgressCtrl)
pMemoryProgressCtrl->SetPos(lMemoryUsage);
}
else
sprintf(pDataString->GetBuffer(256), "WSA%d", iReturn);
}
}
pDataString->ReleaseBuffer();
}
}
UpdateData(FALSE);
}