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

📄 entity_cmpplink.cpp

📁 短信网管的原代码。用于与sp通信
💻 CPP
字号:
// TCmppLink_Entity.cpp: implementation of the TCmppLink_Entity class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PTChannel.h"
#include "Entity_CmppLink.h"
//#include <stdlib.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

extern DWORD g_dwLogin;
//本函数被socket线程调用     
BOOL TCmppLink_Entity::OnTcpDataInd(char Buff[],int BufLen) //收到TCP消息
{
   STRUCT_CMPP12_MSG_HEADER *pHead;
   DWORD dwMsgTye;

   iSendLinkTestCount = 0;//用来判断协议实体连接是否正常
   pHead = (STRUCT_CMPP12_MSG_HEADER *)Buff;
   dwMsgTye = ntohl(pHead->dwCommand_ID);
   switch(dwMsgTye)
   {
		case CMPP12_CONNECT_REP:
			STRUCT_SGIP_CONNECT_REP *pMsg;
			pMsg = (STRUCT_SGIP_CONNECT_REP *)Buff;
			LogTest("Rcv a  ESME_BNDRCV_RESP from CmppLink !\r\n");
			if(pMsg->btResult == BYTE(E_SUCCESS))
		    	SetEvent(m_LogSucc);//通知收到连接成功
			break;
		case CMPP12_TERMINATE:
  	        LogTest("Rcv a  CMPP12_TERMINATE from CmppLink !\r\n");
			break;
		case CMPP12_TERMINATE_REP:
  	        LogTest("Rcv a  CMPP12_TERMINATE_REP from CmppLink !\r\n");
			break;
		case CMPP12_ACTIVE_TEST:
  	        LogTest("Rcv a  CMPP12_ACTIVE_TEST from CmppLink !\r\n");
		//	SendLinkTestRsp();
			break;
		case CMPP12_ACTIVE_TEST_REP:
			LogTest("Rcv a  CMPP12_ACTIVE_TEST_REP from CmppLink !\r\n");
			break;
        default:
		  if(MsgQue.push(Buff, BufLen)!=1)
				LogErr("Entity_CmppLink Push message error!\r\n");
        break;
   }
   return TRUE;
}

int TCmppLink_Entity::Login()        //登陆服务器,阻塞式登陆
{
	//连接数据缓冲区
	char szbuf[200];
	STRUCT_SGIP_CONNECT con;
	ZeroMemory(szbuf,sizeof(szbuf));
	ZeroMemory(&con,sizeof con);
	con.sHeader.Total_Length=htonl(sizeof con);
	con.sHeader.Command_ID=htonl(0x1);//SGIP_BIND
    //changed by shijijiang
	//福建联通协议SGIP1.2,按SGIP协议添加序列号。原节点编号(4字节)+时间(12字节)+序号(4字节)
    //第一部分
    //原节点编号 3AAAAQQQQQ    3059123008 福建区号0591  特符号 23008
	//con.sHeader.Sequence_ID.srcseq = htonl(atoi(gStructTransInfo.szICPID));
	con.sHeader.Sequence_ID.srcseq = htonl(3059123008);

	//第二部分   时间
	time_t datetime;
	time( &datetime );
    char temp[12];
	strftime(&temp[0], 12, "%m%d%H%M%S",localtime(&datetime));
	unsigned long ldatetime;
	ldatetime=atol(temp);
	con.sHeader.Sequence_ID.systime = htonl( ldatetime );
    //第三部分  序号
	con.sHeader.Sequence_ID.seq=htonl(1);
	
	//接口ID,ICPID	
	strcpy(con.AuthenticatorICP,gStructTransInfo.szPAS);
	con.longin_type=1;
	strcpy(con.Source_Addr,gStructTransInfo.szICPID);
	memcpy(szbuf,&con,sizeof con);

    if((SendToTcp(szbuf,sizeof con) )==TRUE)
    {
		if(WaitForSingleObject(m_LogSucc,5000)==0)//事件发生
		{
			m_LlcConnected = TRUE;//登陆成功
			g_dwLogin = 1;
			return TRUE;
		}
	}
	return FALSE;
}

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

BOOL TCmppLink_Entity::SendLinkTest() //发送测试消息
{
	STRUCT_CMPP12_ACTIVE_TEST cmpp_active_test;
	ZeroMemory(&cmpp_active_test,sizeof(STRUCT_CMPP12_ACTIVE_TEST));

	cmpp_active_test.sHeader.dwCommand_ID=htonl(CMPP12_ACTIVE_TEST);
	cmpp_active_test.sHeader.dwSequence_ID=htonl(GET_SEQ_NO);
	cmpp_active_test.sHeader.dwTotal_Length=htonl(12);

	iSendLinkTestCount ++;	
	return(SendToTcp((char *)&cmpp_active_test, sizeof(STRUCT_CMPP12_ACTIVE_TEST)));
}

#define LOOP_TIME  5000
extern  DWORD g_dwLogin;
DWORD WINAPI CmppLinkCheckThread(LPVOID lpParam)
{
	int Loops = 0;
    TCmppLink_Entity* pEntity=(TCmppLink_Entity*)lpParam;

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

        if(pEntity->m_LlcConnected == FALSE)//协议实体未登陆
        {
            if(pEntity->Login() == FALSE)
			{
				//发送连接失败通知消息
				gdw_CmppLinkNetStatus = 1;
				g_dwLogin = 0;
				LogErr("Login CmppLink failure!\r\n");
				Sleep(3000);
				continue;
			}
			LogInf("Login CmppLink success!\r\n");
			//发送连接成功通知消息
			gdw_CmppLinkNetStatus = 0;
        }

		if(pEntity->LinkStatusChanged()) 
		{
			Loops = 20000/LOOP_TIME + 1;//send link test imediately
			pEntity->ResetLinkStatus();
		}
		if(Loops < (20000/LOOP_TIME ))
		{	Loops ++; Sleep(LOOP_TIME); continue; }
        
//        if( (!pEntity->SendLinkTest()) ||(pEntity->iSendLinkTestCount> DELAY_TIME))
//            pEntity->RstTcp();
		
		Sleep(1000);
		Loops = 0;
    }
	return 0x13001300;
}

⌨️ 快捷键说明

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