📄 mosocket.cpp
字号:
// MoSocket.cpp : implementation file
//
#include "stdafx.h"
#include "MoSocket.h"
#include "md5.h"
#include "MoThread.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMoSocket
CMoSocket::CMoSocket()
{
m_ParentThread=NULL;
}
CMoSocket::~CMoSocket()
{
int i,j;
for(j=0;j<m_ProvinceClient.GetSize();j++)
{
for(i=0;i<m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize();i++)
{
CMoClient * pClient = NULL ;
pClient = m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i) ;
pClient->Close() ;
delete pClient ;
pClient = NULL ;
}
m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAll();
StructProvinceClient * pClient = NULL ;
pClient = m_ProvinceClient.GetAt(j) ;
delete pClient ;
pClient = NULL ;
}
m_ProvinceClient.RemoveAll();
Close();
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CMoSocket, CSocket)
//{{AFX_MSG_MAP(CMoSocket)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
/////////////////////////////////////////////////////////////////////////////
// CMoSocket member functions
//
//创建一个MoSocket
BOOL CMoSocket::CreateMoSocket(UINT LocalPort, CString csRemoteIP,CString ICPSecret, char *AuthenticatorICP)
{
m_csRemoteIP=csRemoteIP;
if(!Create(LocalPort))
return FALSE;
if(!Listen()) //监听
return FALSE;
return TRUE;
}
void CMoSocket::OnAccept(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
CMoClient* NewClient=new CMoClient;
int i;
if(Accept(*NewClient))
{
//IP验证,对多个移动
CString csRemoteIP;
UINT RemotPort;
NewClient->GetPeerName(csRemoteIP,RemotPort);
int j;
for(j=0;j<m_ParentThread->m_ProvinceNum ;j++)
{
if(csRemoteIP==m_ProvinceClient.GetAt(j)->m_csIsmgIP)
{
NewClient->m_ProvinceIndex =m_ProvinceClient.GetAt(j)->Index;
break;
}
}
if(j==m_ParentThread->m_ProvinceNum)//非法IP
{
delete NewClient;
CSocket::OnAccept(nErrorCode);
return ;
}
//验证通过接受
NewClient->m_ParentThread=m_ParentThread ;
NewClient->m_pParentSocket=this;
if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize()>=40) //最多连接40个客户端
{
for(i=0;i<m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize();i++) //
{
if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i)->m_bDeleted==TRUE)
{
m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i)->Close();
delete m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i);
m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAt(i);
break;
i--;
}
}//for
if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize()>=40)
{
m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(20)->Close();
delete m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(20);
m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAt(20);
}//删除中间的
}//if
int Pos=m_ProvinceClient.GetAt(j)->m_pClientArray.Add(NewClient);
m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(Pos)->m_PosInArray=Pos;
}
else //no Accept
{
delete NewClient;
}
CSocket::OnAccept(nErrorCode);
}
//收到错包
void CMoSocket::OnReceiveWrongPackage(int Pos,int Index)
{
m_ProvinceClient.GetAt(Index)->m_pClientArray.GetAt(Pos)->Close();
delete m_ProvinceClient.GetAt(Index)->m_pClientArray.GetAt(Pos);
m_ProvinceClient.GetAt(Index)->m_pClientArray.RemoveAt(Pos);
}
//初始化省份信息
void CMoSocket::InitProvince(CString IsmgIP, int Index)
{
StructProvinceClient* NewProvince= new StructProvinceClient;
NewProvince->m_csIsmgIP=IsmgIP;
NewProvince->Index=Index;
m_ProvinceClient.Add(NewProvince);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -