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

📄 entity_pt.cpp

📁 短信网管的原代码。用于与sp通信
💻 CPP
字号:
#include "stdafx.h"

#include "entity_pt.h"
 
//本函数被socket线程调用     
BOOL TPt_Entity::OnTcpDataInd(char Buff[],int BufLen) //收到TCP消息
{
   STRUCT_TRP_MSG_HEADER *pHead;
   DWORD dwMsgTye;

   iSendLinkTestCount = 0;
   pHead = (STRUCT_TRP_MSG_HEADER *)Buff;
   dwMsgTye = ntohl(pHead->dwCommandId);
   switch(dwMsgTye)
   {
		case TRP_CHANNEL_CONNECT_RSP:
			LogTest("Rcv a  TRP_PROTOCOLCONNECT_ACK message !\r\n");
			if(pHead->dwStatus == 0)
		    	SetEvent(m_LogSucc);//通知收到连接成功
			break;
		case TRP_NETREPORT_RSP:
			LogTest("Rcv NET_REPORT_RSP from PT!\r\n");
            iRcvLinkTestCount++;
        break;
        default:
		  if(MsgQue.push(Buff, BufLen)!=1)
				LogErr("Entity_Pt Push message error!\r\n");
        break;
   }
   return TRUE;
}

int TPt_Entity::Login()        //登陆服务器,阻塞式登陆
{
	char buf[200];
	int bufLen;

	//组连接登陆包connect_msg
	STRUCT_CHANNEL_CONNECT struct_channel_connect;
	ZeroMemory(&struct_channel_connect,sizeof(STRUCT_CHANNEL_CONNECT));
	struct_channel_connect.sHeader.dwCommandId=htonl(TRP_CHANNEL_CONNECT);
	struct_channel_connect.sHeader.dwTotalLen=htonl(sizeof(STRUCT_CHANNEL_CONNECT));
	memcpy(&struct_channel_connect.szChannelName,gStructChannelInfo.szChannelName,sizeof(gStructChannelInfo.szChannelName));
	memcpy(&struct_channel_connect.szPwd,gStructChannelInfo.szPwd,sizeof(gStructChannelInfo.szPwd));
	struct_channel_connect.cChannelProtocol=gStructChannelInfo.ChannelProtocol;
	struct_channel_connect.cChannelType=gStructChannelInfo.ChannelType;
	memcpy(&buf,&struct_channel_connect,sizeof(STRUCT_CHANNEL_CONNECT));
	bufLen=sizeof(STRUCT_CHANNEL_CONNECT);
	LogTest("Send a  TRP_PROTOCOLCONNECT message to PT !\r\n");
    if((SendToTcp(buf, bufLen) )==TRUE)
    {
		if(WaitForSingleObject(m_LogSucc,5000)==0)//事件发生
		{
			m_LlcConnected = TRUE;//登陆成功
			return TRUE;
		}
	}
	return FALSE;
}

int  TPt_Entity::Logout()       //退出服务器
{
	return 0;
}

BOOL TPt_Entity::SendLinkTest() //发送测试消息
{
    STRUCT_LINKTEST LinkTest;

	LinkTest.sHeader.dwCommandId = htonl(TRP_NETREPORT);
	LinkTest.sHeader.dwSeqNo    = 0;
	if((gdw_RcvLinkNetStatus == 0) && (gdw_TransLinkNetStatus == 0))//正常
	    LinkTest.sHeader.dwStatus   = 0;
	else
		LinkTest.sHeader.dwStatus   = 1;
	LinkTest.sHeader.dwTotalLen = htonl(16);
	iSendLinkTestCount ++;
	LogTest("Send NET_REPORT to PT!\r\n");
	return(SendToTcp((char *)&LinkTest, 16));
}

#define LOOP_TIME 1000 //1 S
DWORD WINAPI PtCheckThread(LPVOID lpParam)
{
    TPt_Entity* pEntity=(TPt_Entity*)lpParam;
	int Loops=0;
	DWORD dwOldRcvStatus=1;
	DWORD dwOldTransStatus=1;

    while(TRUE)
    {
        if(pEntity->m_TcpConnected == FALSE)//TCP未连接
        {
			gdw_PtLinkNetStatus = 1;
            Sleep(2000);
            continue;
        }

        if(pEntity->m_LlcConnected == FALSE)//协议实体未登陆
        {
            if(pEntity->Login() == FALSE)
			{
				gdw_PtLinkNetStatus = 1;
				LogErr("Login AppAgent failure!\r\n");
				Sleep(5000);
				continue;
			}
			LogInf("Login AppAgent success!\r\n");
			gdw_PtLinkNetStatus = 0;
        }
		
		if((dwOldRcvStatus != gdw_RcvLinkNetStatus) || (dwOldTransStatus !=gdw_TransLinkNetStatus))
		{
			dwOldRcvStatus   = gdw_RcvLinkNetStatus;
			dwOldTransStatus = gdw_TransLinkNetStatus;
			Loops = 20000/LOOP_TIME + 1;//send link test imediately
		}
		if(Loops < 20000/LOOP_TIME )
		{	Loops ++; Sleep(LOOP_TIME); continue; }

        if( (!pEntity->SendLinkTest()) || (pEntity->iSendLinkTestCount > DELAY_TIME))
           pEntity->RstTcp();
		Loops = 0;
	    Sleep(1000);
    }
	return 0x11001100;
}



⌨️ 快捷键说明

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