Example #1
0
void CAdminSocket::OnReceive(int nErrorCode)
{
	if (nErrorCode)
	{
		Close();
		m_pAdminInterface->Remove(this);
		return;
	}
	int numread = Receive(m_pRecvBuffer + m_nRecvBufferPos, m_nRecvBufferLen - m_nRecvBufferPos);
	if (numread > 0)
	{
		SYSTEMTIME sTime;
		GetSystemTime(&sTime);
		VERIFY(SystemTimeToFileTime(&sTime, &m_LastRecvTime));

		m_nRecvBufferPos += numread;
		if (m_nRecvBufferLen-m_nRecvBufferPos < (BUFSIZE/4))
		{
			unsigned char *tmp=m_pRecvBuffer;
			m_nRecvBufferLen *= 2;
			m_pRecvBuffer = new unsigned char[m_nRecvBufferLen];
			memcpy(m_pRecvBuffer, tmp, m_nRecvBufferPos);
			delete [] tmp;
		}
		int parseResult;
		while ((parseResult = ParseRecvBuffer()) > 0);

		if (parseResult == -1)
			return;
	}
	if (numread == 0)
	{
		if (ParseRecvBuffer() == -1)
			return;
		Close();
		m_pAdminInterface->Remove(this);
		return;
	}
	else if (numread == SOCKET_ERROR)
	{
		if (WSAGetLastError() != WSAEWOULDBLOCK)
		{
			if (ParseRecvBuffer() == -1)
				return;
			Close();
			m_pAdminInterface->Remove(this);
			return;
		}
	}
	while (ParseRecvBuffer() > 0);
}
int post_api_comm_communcation(SOCKET ClientSocket, const char *IpAddress, u_short Port, char *SendBuffer){
	//char *SendBuffer, *RecvBuffer;
	char RecvBuffer[SOCKET_MAX_BUF];
	int SendRes = 0, RecvRes = 0;
	int SendLen = 0, RecvLen = 0;
	int RecvBufferIsEmpty = 0;
	int ParseRes = 0;

	SendRes = send(ClientSocket, SendBuffer, SendLen, 0);
	if(SendRes == SOCKET_ERROR){
		return -1;
	}

	while(1){
		RecvRes = recv(ClientSocket, RecvBuffer, SOCKET_MAX_BUF, 0);
		if(RecvRes == 0 || RecvRes == SOCKET_ERROR){
			break;
		}

		if((int)strlen(RecvBuffer) != 0){
			RecvBufferIsEmpty = 0;
		}

		if(RecvBufferIsEmpty == 0){
			ParseRes = ParseRecvBuffer(RecvBuffer, RecvRes, POST_API_ACTION_COMM);
			if(ParseRes != -1){
				// undo
			}
		}
	}

	//undo
	return 1; 
}