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

📄 entity_base.cpp

📁 短信网管的原代码。用于与sp通信
💻 CPP
字号:
#include "stdafx.h"
#include "entity_base.h"
#include "TServerLink_Entity.h"
#include "ServerSocket.h"
//SGIP连接服务线程函数
DWORD WINAPI SgipAcceptThread(LPVOID lpParam)
{
	TServerLink_Entity* pSgipEntity = (TServerLink_Entity*)lpParam;
	while(TRUE)
	{
		//生成并初始化一个连接实体
		pSgipEntity->m_pTmpServerSocket = new CServerSocket;
		DWORD bRet = pSgipEntity->WaitConnect(*pSgipEntity->m_pTmpServerSocket);
		if(!bRet)
		{
			if(pSgipEntity->m_pTmpServerSocket == NULL) return 44;
			LogErrPara("CreateThread Error!ACCEPT错误代码 [%d] !\r\n", WSAGetLastError());
			//pSgipEntity->m_pTmpServerSocket->Reset();
			delete pSgipEntity->m_pTmpServerSocket;
			pSgipEntity->m_pTmpServerSocket = NULL;
			return 33;
		}
		else
		{
			for(int i=0;i<128;i++)
			{
				if(pSgipEntity->m_ServerSocket[i].bUsed == FALSE)
				{
					pSgipEntity->m_ServerSocket[i].bUsed = TRUE;
					pSgipEntity->m_ServerSocket[i].nIdle = 0;
					pSgipEntity->m_ServerSocket[i].Socket = pSgipEntity->m_pTmpServerSocket->m_hSocket;
					break;
				}
			}
			pSgipEntity->dwAcceptTest = 0;
			char szTmp[128];
			sprintf(szTmp,"接收远端TCP [%s] 连接!\r\n",pSgipEntity->m_pTmpServerSocket->m_Ip);
			LogErrPara("接收远端TCP [%s] 连接!\r\n", pSgipEntity->m_pTmpServerSocket->m_Ip);
			pSgipEntity->m_pTmpServerSocket = NULL;
		}
	}
	return 22;
}

//TCP线程函数
extern DWORD g_dwLogin;
DWORD WINAPI MainTcpThread(LPVOID lpParam)
{
    TcpSock* pSocket=(TcpSock*)lpParam;

    while(TRUE)
    {
        if(pSocket->m_Status == E_UNCONNECTED)
        {
            pSocket->OnTcpDisConnected();//向上传递消息
			if(pSocket->m_bType == SERVER_SOCKET)
			{
				//ExitThread(0x11111111);
				delete pSocket;
				pSocket = NULL;
				return 0x11111111;
				//if(!pSocket->WaitConnect())
					//continue;
			}
			else
			{
				Sleep(2000);
				if(!pSocket->ConnectToHost())
				{
					LogErrPara("TCP 连接远程主机 [ %s ] 失败!\r\n", pSocket->m_Ip);
					Sleep(5000);//5s 连接一次
					continue;
				}
			}
			LogInfPara("TCP 连接远程主机 [ %s ] 成功!\r\n", pSocket->m_Ip);
            pSocket->OnTcpConnected();//向上传递消息
        }
        char bBuff[1024];
		int  nMsgBodyLength;
        if( SOCKET_ERROR == (nMsgBodyLength = pSocket->ReceiveMsg(bBuff, 1024)) )
        {
			if(pSocket->m_bType == SERVER_SOCKET)
			{
				LogErrPara("TCP 远程主机 [%s] 连接中断!\r\n", pSocket->m_Ip);
				pSocket->Reset();
				delete pSocket;
				pSocket = NULL;
				//ExitThread(0x11111111);
				return 0x11111111;
			}
			else
			{
				g_dwLogin = 0;
				LogInfPara("TCP 从主机 [%s] 读消息失败,TCP连接中断!\r\n", pSocket->m_Ip);
				pSocket->Reset();
				continue;
			}
        }
		//
		if(!pSocket->OnTcpDataInd(bBuff,nMsgBodyLength+MSG_HEAD_LENGTH))//向上传递消息
		{
			LogErrPara("TCP 远程主机 [%s] 连接中断!\r\n", pSocket->m_Ip);
			pSocket->Reset();
			delete pSocket;
			pSocket = NULL;
			return 0x11111111;
		}
    }
    return 0x11881188;
}

extern TServerLink_Entity* g_pSgipEntity;
DWORD WINAPI MainClientThread(LPVOID lpParam)
{
    CServerSocket* pSocket=(CServerSocket*)lpParam;

    while(TRUE)
    {
        if(pSocket->m_Status == E_UNCONNECTED)
		{
			LogTest("pSocket->m_Status == E_UNCONNECTED \r\n");
			for(int i=0;i<128;i++)
			{
				if(g_pSgipEntity->m_ServerSocket[i].Socket == pSocket->m_hSocket)
				{
					g_pSgipEntity->m_ServerSocket[i].bUsed = FALSE;
					g_pSgipEntity->m_ServerSocket[i].nIdle = 0;
					shutdown(g_pSgipEntity->m_ServerSocket[i].Socket,SD_BOTH);
					closesocket(g_pSgipEntity->m_ServerSocket[i].Socket);
					g_pSgipEntity->m_ServerSocket[i].Socket = 0;
					break;
				}
			}
			delete pSocket;
			pSocket = NULL;
			return 0x11111111;
        }
        char bBuff[1024];
		int  nMsgBodyLength;
        if( SOCKET_ERROR == (nMsgBodyLength = pSocket->ReceiveMsg(bBuff, 1024)) )
        {
			LogErrPara("TCP 远程主机 [%s] 连接中断!pSocket->ReceiveMsg\r\n", pSocket->m_Ip);
			for(int i=0;i<128;i++)
			{
				if(g_pSgipEntity->m_ServerSocket[i].Socket == pSocket->m_hSocket)
				{
					g_pSgipEntity->m_ServerSocket[i].bUsed = FALSE;
					g_pSgipEntity->m_ServerSocket[i].nIdle = 0;
					shutdown(g_pSgipEntity->m_ServerSocket[i].Socket,SD_BOTH);
					closesocket(g_pSgipEntity->m_ServerSocket[i].Socket);
					g_pSgipEntity->m_ServerSocket[i].Socket = 0;
					break;
				}
			}
			pSocket->Reset();
			delete pSocket;
			pSocket = NULL;
			return 0x11111111;
        }
		if(!pSocket->OnTcpDataInd(bBuff,nMsgBodyLength+MSG_HEAD_LENGTH))//向上传递消息
		{
			LogErrPara("TCP 远程主机 [%s] 连接中断!pSocket->OnTcpDataInd\r\n", pSocket->m_Ip);
			for(int i=0;i<128;i++)
			{
				if(g_pSgipEntity->m_ServerSocket[i].Socket == pSocket->m_hSocket)
				{
					g_pSgipEntity->m_ServerSocket[i].bUsed = FALSE;
					g_pSgipEntity->m_ServerSocket[i].nIdle = 0;
					shutdown(g_pSgipEntity->m_ServerSocket[i].Socket,SD_BOTH);
					closesocket(g_pSgipEntity->m_ServerSocket[i].Socket);
					g_pSgipEntity->m_ServerSocket[i].Socket = 0;
					break;
				}
			}
			pSocket->Reset();
			delete pSocket;
			pSocket = NULL;
			return 0x11111111;
		}
    }
    return 0x11661166;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -