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

📄 devlinkmanager.cpp

📁 模拟手机源程序,做短信系统(源码)
💻 CPP
字号:
// DevLinkManager.cpp: implementation of the CDevLinkManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "VSMSCNEW.h"
#include "DevLinkManager.h"
#include "VSMSCNEWDlg.h"
#include "ConstDef.h"
#include "Global.h"

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


//在此打印

extern CVSMSCNEWDlg* gpDlg;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

BOOL AFXAPI CompareElements(const LinksocketInfo* pElement1, const LinksocketInfo* pElement2)
{
	if(strcmp(pElement1->szSim,pElement2->szSim))
		return FALSE;
	else
		return TRUE;
}

CDevLinkManager::CDevLinkManager()
{
	

}

CDevLinkManager::~CDevLinkManager()
{
	ReMoveAll();
}

BOOL CDevLinkManager::AddDev(CDevClientSocket* pDevClientSocket)
{
	m_CriticalSection.Lock();
		LinksocketInfo LinkInfo;
		memcpy(LinkInfo.szSim,pDevClientSocket->m_szSim,strlen(pDevClientSocket->m_szSim));
		POSITION pos=m_MyList.Find(LinkInfo);
		if(pos==NULL)
		{
			LinkInfo.pDevClientSocket=pDevClientSocket;
			m_MyList.AddTail(LinkInfo);
			m_CriticalSection.Unlock();
			gpDlg->AddDev(pDevClientSocket->m_szDevName,pDevClientSocket->m_szSim);
			char szMsg[256];
			sprintf(szMsg,"设备连接成功(SIM:%s)",LinkInfo.szSim);
			AddToMsgLog(szMsg);

			return TRUE;
		}
	m_CriticalSection.Unlock();
	return FALSE;
}
BOOL CDevLinkManager::ReMoveDev(CDevClientSocket* pDevClientSocket)
{
	m_CriticalSection.Lock();
	  LinksocketInfo LinkInfo;
	  memcpy(LinkInfo.szSim,pDevClientSocket->m_szSim,strlen(pDevClientSocket->m_szSim));
	  POSITION pos=m_MyList.Find(LinkInfo);
	  if(pos)
	  {
		  m_MyList.RemoveAt(pos);
		  pDevClientSocket->CloseSocket();
		  char szMsg[256];
		  sprintf(szMsg,"设备断开(SIM:%s)",LinkInfo.szSim);
		  AddToMsgLog(szMsg);
		  delete pDevClientSocket;
		  pDevClientSocket=NULL;
	  }
	  gpDlg->RemoveDev(LinkInfo.szSim);
	m_CriticalSection.Unlock();
	return TRUE;
}
BOOL CDevLinkManager::ReMoveAll()
{
	m_CriticalSection.Lock();
	  POSITION pos=m_MyList.GetHeadPosition();
	  POSITION prepos=NULL;
	  while(pos)
	  {
		  prepos=pos;
		  LinksocketInfo LinkInfo=m_MyList.GetNext(pos);
		  LinkInfo.pDevClientSocket->CloseSocket();
		  delete LinkInfo.pDevClientSocket;
		  m_MyList.RemoveAt(prepos);
	  }
	//gpDlg->m_ListCtrl.DeleteAllItems();
	m_CriticalSection.Unlock ();
	return TRUE;
}

CDevClientSocket* CDevLinkManager::GetAt(char* szSim)
{
	LinksocketInfo LinkInfo;
	CDevClientSocket* pRet=NULL;
	m_CriticalSection.Lock();
	   memcpy(LinkInfo.szSim,szSim,strlen(szSim));
	   POSITION pos=m_MyList.Find(LinkInfo);
	   if(pos)
	   {
			  LinkInfo=m_MyList.GetAt(pos);
			  pRet=LinkInfo.pDevClientSocket;
		}
	m_CriticalSection.Unlock();
	return pRet;
}

BOOL CDevLinkManager::SendToDev(STRUCT_SMPP_SUBMIT &sSubmit)
{
	STRUCT_DEV_SUBMIT  s_DevSubmit;
	ZeroMemory(&s_DevSubmit,sizeof(STRUCT_DEV_SUBMIT));
	s_DevSubmit.sHeader.command_id=DEV_SUBMIT;
	s_DevSubmit.sHeader.command_status=0;
	s_DevSubmit.sHeader.command_length=sizeof(STRUCT_DEV_SUBMIT)+sSubmit.csm_Length-255;
	s_DevSubmit.sHeader.sequence_no=GetSEQID();
	strcpy(s_DevSubmit.szSimNo,sSubmit.szDest_addr);
	s_DevSubmit.bMsg_Len=sSubmit.csm_Length;
	memcpy(s_DevSubmit.szMsgContent,sSubmit.szShort_message,s_DevSubmit.bMsg_Len);
	CDevClientSocket* pSocekt=GetAt(s_DevSubmit.szSimNo);
	char szPrintfContent[1024];
	ZeroMemory(szPrintfContent,sizeof(szPrintfContent));
	if(pSocekt)
	{
		if(pSocekt->SendMsg((char*)&s_DevSubmit,s_DevSubmit.sHeader.command_length))
		{
			sprintf(szPrintfContent,"消息发送给设备(SIM:%s)成功",s_DevSubmit.szSimNo);
			AddToMsgLog(szPrintfContent);
			return TRUE;
		}else
		{
			sprintf(szPrintfContent,"消息发送给设备(SIM:%s)失败",s_DevSubmit.szSimNo);
			AddToMsgLog(szPrintfContent);
			return FALSE;
		}
	}
	sprintf(szPrintfContent,"消息发送给设备(SIM:%s)失败(设备未连接)",s_DevSubmit.szSimNo);
	AddToMsgLog(szPrintfContent);
	return FALSE;
}

BOOL CDevLinkManager::SendToESMC(STRUCT_DEV_DELIVER &sDev_Deliver)
{
	char szPrintfContent[1024];
	ZeroMemory(szPrintfContent,sizeof(szPrintfContent));
	if(!gpDlg->m_SmcRcvSocket->bNewSocket)
	{
	   //if(gpDlg->m_SmcRcvSocket->SendDeliverMsg(sDev_Deliver.szMsgContent,sDev_Deliver.bMsg_Len,sDev_Deliver.szSimNo,sDev_Deliver.szSimNo,"",FALSE,0))
	   if(gpDlg->m_SmcRcvSocket->SendDeliverMsg(sDev_Deliver.szMsgContent,sDev_Deliver.bMsg_Len,sDev_Deliver.szSimNo,sDev_Deliver.szDesNum,"",FALSE,0))
	   {
			sprintf(szPrintfContent,"消息发送给短信通道(设备SIM:%s)成功",sDev_Deliver.szSimNo);
			AddToMsgLog(szPrintfContent);
			return TRUE;
	   }else
	   {
			sprintf(szPrintfContent,"消息发送给短信通道(设备SIM:%s)失败",sDev_Deliver.szSimNo);
			AddToMsgLog(szPrintfContent);
			return FALSE;
	   }
	}
	sprintf(szPrintfContent,"消息发送给短信通道(设备SIM:%s)失败(通道未连接)",sDev_Deliver.szSimNo);
	AddToMsgLog(szPrintfContent);
	return FALSE;
}

BOOL CDevLinkManager::SendMsgWithRecv(char* szSendMsg,int nLen)
{
	if(gpDlg->m_SmcRcvSocket->m_bRecvLink)
	    return gpDlg->m_SmcRcvSocket->SendMsg(szSendMsg,nLen);
	else
		return gpDlg->m_SmcSocket->SendMsg(szSendMsg,nLen);
}

⌨️ 快捷键说明

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