#include "StdAfx.h"
|
#include "MBThreadCheckServer.h"
|
#include "MBBaseSvrInfo.h"
|
|
BOOL EstablishConnection(CString strExterFServer, u_short nPort)
|
{
|
// Create a stream socket
|
SOCKET sd = socket(AF_INET, SOCK_STREAM, 0);
|
if (sd != INVALID_SOCKET)
|
{
|
struct sockaddr_in sockaddr;
|
LPSTR pDest ;
|
memset( &sockaddr, 0, sizeof(sockaddr));
|
if ( !CStrFileUtils::CStringToAnsi(strExterFServer, &pDest))
|
{
|
return FALSE;
|
}
|
memset(&sockaddr, 0, sizeof(sockaddr));
|
sockaddr.sin_addr.s_addr = inet_addr( pDest );
|
sockaddr.sin_family = AF_INET;
|
sockaddr.sin_port = htons(nPort);
|
if (::connect(sd, (struct sockaddr*)&sockaddr, sizeof(sockaddr_in)) == SOCKET_ERROR)
|
{
|
::closesocket(sd);
|
return FALSE;
|
}
|
::closesocket(sd);
|
return TRUE;
|
}
|
return FALSE;
|
}
|
|
CMBThreadCheckServer::CMBThreadCheckServer(void)
|
{
|
m_bStop = false;
|
m_asUserIP.RemoveAll();
|
m_pSvrInfo = NULL;
|
}
|
|
|
CMBThreadCheckServer::~CMBThreadCheckServer(void)
|
{
|
}
|
|
void CMBThreadCheckServer::SetLoginUserIPInfo( CStringArray asUserIP, CString strUserConnIP, CString strOrgServer)
|
{
|
asUserIP.RemoveAll();
|
asUserIP.Copy(asUserIP);
|
m_strUserConnIP = strUserConnIP;
|
m_strOrgServer= strOrgServer;
|
}
|
|
// ¿ªÊ¼Ïß³Ì
|
void CMBThreadCheckServer::StartThread()
|
{
|
if(IsRunning())
|
return;
|
BeginThread();
|
}
|
|
// ½áÊøÏß³Ì
|
void CMBThreadCheckServer::OverThread()
|
{
|
m_bStop = true;
|
|
if(!IsRunning())
|
return;
|
EndThread();
|
}
|
|
|
|
UINT CMBThreadCheckServer::Run()
|
{
|
try
|
{
|
if ( m_pSvrInfo )
|
{
|
CheckFileServerValid(m_pSvrInfo->m_strExterIP,_tstol(m_pSvrInfo->m_strExterPort),m_pSvrInfo->m_strInterIP,_tstol(m_pSvrInfo->m_strInterPort));
|
}
|
}
|
catch(...)
|
{
|
}
|
|
return 0;
|
}
|
BOOL CMBThreadCheckServer::CheckFileServerValid(CString strExterFServer, UINT nExterFSPort,CString strInterFServer, UINT nInterFSPort)
|
{
|
int nPos;
|
CString strOrgSubIp1 = _T("");
|
CString strOrgSubIp2= _T("");
|
CString strConnSubIp1= _T("");
|
CString strConnSubIp2= _T("");
|
CString strTempOrgSubIp;
|
CString strTempConnSubIp;
|
CString strUserIP;
|
BOOL bInExIPSame = FALSE;
|
for(int i=0; i< m_asUserIP.GetCount();i++)
|
{
|
strUserIP = m_asUserIP.GetAt(i);
|
if(strUserIP == m_strUserConnIP)
|
{
|
bInExIPSame = TRUE;
|
break;
|
}
|
}
|
if( bInExIPSame )
|
{
|
if( EstablishConnection(strInterFServer,nInterFSPort))
|
{
|
SetValidSvrInfo(strInterFServer, nInterFSPort );
|
}
|
else
|
{
|
SetValidSvrInfo(strExterFServer, nExterFSPort );
|
}
|
return TRUE;
|
}
|
nPos = m_strOrgServer.Find(_T("."));
|
if(nPos > 0 )
|
{
|
strOrgSubIp1 = m_strOrgServer.Left(nPos);
|
strTempOrgSubIp = m_strOrgServer.Mid(nPos + 1);
|
nPos = strTempOrgSubIp.Find(_T("."));
|
if(nPos > 0 )
|
strOrgSubIp2 = strTempOrgSubIp.Left(nPos);
|
}
|
nPos = m_strUserConnIP.Find(_T("."));
|
if(nPos > 0 )
|
{
|
strConnSubIp1 = m_strUserConnIP.Left(nPos);
|
strTempConnSubIp = m_strUserConnIP.Mid(nPos + 1);
|
nPos = strTempConnSubIp.Find(_T("."));
|
if(nPos > 0 )
|
strConnSubIp2 = strTempConnSubIp.Left(nPos);
|
}
|
if(strConnSubIp1 == strOrgSubIp1 && strConnSubIp2 == strOrgSubIp2 )
|
{
|
if( EstablishConnection(strInterFServer,nInterFSPort))
|
{
|
SetValidSvrInfo(strInterFServer, nInterFSPort );
|
}
|
else
|
{
|
SetValidSvrInfo(strExterFServer, nExterFSPort );
|
}
|
}
|
else
|
{
|
if( EstablishConnection(strExterFServer,nExterFSPort))
|
{
|
SetValidSvrInfo(strExterFServer, nExterFSPort );
|
}
|
else
|
{
|
SetValidSvrInfo(strInterFServer, nInterFSPort );
|
}
|
}
|
return TRUE;
|
}
|
void CMBThreadCheckServer::SetValidSvrInfo( CString strSvrIP, int nSvrPort)
|
{
|
if ( m_pSvrInfo )
|
{
|
CString strPort;
|
strPort.Format(_T("%d"),nSvrPort);
|
m_pSvrInfo->SetValidSvrInfo(strSvrIP,strPort);
|
}
|
}
|