📄 socketcontroller.cpp
字号:
// SocketController.cpp: implementation of the CSocketController class.
//
//////////////////////////////////////////////////////////////////////
#include "SocketController.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
INAddr xConvertToINAddr(char *psz)
{
INAddr ul = 0;
int nByte = 0;
char c;
if(!psz)
return 0;
while (ISDIGIT(*psz)) {
int n = 0;
while ( ISDIGIT(c=*psz)) {
n = n*10 + (c - '0');
++psz;
}
((char*)&ul)[nByte++] = n;
if (nByte == 4 || *psz != '.')
break;
++psz;
}
if (nByte < 4 || ISALNUM(*psz))
ul = 0xFFFFFFF;
return ul;
}
CSocketController::CSocketController(CAppMainHandler *pAppMain)
{
m_pAppMain = pAppMain;
}
CSocketController::~CSocketController()
{
}
boolean CSocketController::InitSocketController()
{
if( m_piNet == NULL )
{
if( ISHELL_CreateInstance(m_pAppMain->m_pIShell, AEECLSID_NET, (void**)(&m_piNet)) != SUCCESS )
{
SocketCleanUp();
return FALSE;
}
INETMGR_SetLinger(m_piNet, 0);
}
if( m_piSock == NULL )
{
m_piSock = INETMGR_OpenSocket(m_piNet, AEE_SOCK_STREAM);
if( !m_piSock )
{
SocketCleanUp();
return FALSE;
}
}
return TRUE;
}
void CSocketController::SocketCleanUp()
{
if (m_piSock)
{
ISOCKET_Cancel(m_piSock, NULL, NULL);
ISOCKET_Release(m_piSock);
m_piSock = 0;
}
if (m_piNet)
{
INETMGR_SetLinger(m_piNet, 0);
INETMGR_Release(m_piNet);
m_piNet = 0;
}
}
boolean CSocketController::Connect(char* szHost, int nPort)
{
INAddr nodeINAddr = xConvertToINAddr( szHost );
ISOCKET_Connect(m_piSock, nodeINAddr, AEE_htons(nPort), ConnectCB, (void*)m_pAppMain);
return 0;
}
void CSocketController::ConnectCB(void *pAppMain, int err)
{
CSocketController * pThis = (CSocketController*)pAppMain;
if (err)
{
pThis->SocketCleanUp();
return;
}
ISOCKET_Readable(pThis->m_piSock, pThis->ReadCB, pAppMain);
}
void CSocketController::ReadCB(void *pAppMain)
{
CSocketController * pThis = (CSocketController*)pAppMain;
char Buf[MAX_BUFFER];
int nErr = ISOCKET_Read(pThis->m_piSock, (byte*)Buf, MAX_BUFFER);
if( nErr == AEE_NET_WOULDBLOCK )
{
ISOCKET_Readable(pThis->m_piSock, pThis->ReadCB, pAppMain );
return;
}
else if( nErr == AEE_NET_ERROR )
{
pThis->SocketCleanUp();
return;
}
else if( nErr > 0 )
{
pThis->ProcessMessage(Buf);
return;
}
else
{
pThis->SocketCleanUp();
return;
}
ISOCKET_Readable(pThis->m_piSock, pThis->ReadCB, pAppMain);
}
void CSocketController::ProcessMessage(char *pBuf)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -