⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketcontroller.cpp

📁 BREW 应用
💻 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 + -