📄 entity_base.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 + -