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

📄 gsmsms.cpp

📁 sms sender 察到布局图全貌
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		ctrlSMSCom.SetOutput (m_varvalue);
		Sleep(100);	
		delete CMGFLENolevar;

	

		//memset(str,0,500);
		//sprintf(str,"0891683108200705F011000D91683179318790F70000A70CC8329BFD065DDF72363904%c",26);
		//m_outcmgsarr.SetSize(strlen(str));
		//memcpy((char*)m_outcmgsarr.GetData(),str,strlen(str));
      
		
        m_outcmgsarr.SetSize(strlen(m_chSMFrameCMGS));
		memcpy((char*)m_outcmgsarr.GetData(),m_chSMFrameCMGS,strlen(m_chSMFrameCMGS));
		COleVariant *CMGSolevar=new COleVariant(m_outcmgsarr);
		m_varvalue=*LPCVARIANT(*CMGSolevar);
		ctrlSMSCom.SetOutput (m_varvalue);
        Sleep(200);	
		delete CMGSolevar;

#ifdef MY_DEBUG_MSG
		AfxMessageBox(m_chSMFrameCMGS);
#else
#ifdef _DEBUG
	    TRACE(m_chSMFrameCMGS);
#endif
#endif
	}
	else
	{
		szError.Empty();
		szError=_T("串口未打开:");
		return FALSE;
	}

	return TRUE;
}

BOOL CGSMSMS::SetSMSCCode(CString &szPhoneCode)
{
	if(PhoneCodeIsValid(szPhoneCode)==FALSE)
		return FALSE;
	m_szSMCCode.Empty();
	m_szSMCCode=szPhoneCode;
	return ChangeSMCCode(szPhoneCode,m_szChangedSMCCode);
	//return TRUE;
}

BOOL CGSMSMS::GetSMSCCode(CString &szPhoneCode)
{
	if(m_szSMCCode.IsEmpty()!=0)
		return FALSE;
	szPhoneCode.Empty();
	szPhoneCode=m_szSMCCode;
	return TRUE;
}

BOOL CGSMSMS::SetSMCInterAreaCode(CString &szIAC)
{
	if(PhoneCodeIsValid(szIAC)==FALSE)
		return FALSE;
	m_szSMCIAC.Empty();
	m_szSMCIAC=szIAC;
	return TRUE;
}

BOOL CGSMSMS::GetSMCInterAreaCode(CString &szIAC)
{
	if(m_szSMCIAC.IsEmpty()!=0)
		return FALSE;
	szIAC.Empty();
	szIAC=m_szSMCIAC;
	return TRUE;
}

BOOL CGSMSMS::SetMTInterAreaCode(CString &szIAC)
{
	if(PhoneCodeIsValid(szIAC)==FALSE)
		if(szIAC.IsEmpty()==0)
	    	return FALSE;
	m_szMTIAC.Empty();
	m_szMTIAC=szIAC;
	return TRUE;
}

BOOL CGSMSMS::GetMTInterAreaCode(CString &szIAC)
{
	if(m_szMTIAC.IsEmpty()!=0)
		return FALSE;
	szIAC.Empty();
	szIAC=m_szMTIAC;
	return TRUE;
}

BOOL CGSMSMS::SetCalledPhoneCode(CString &szPhoneCode)
{
    if(PhoneCodeIsValid(szPhoneCode)==FALSE)
		return FALSE;
	m_szCalledPhoneCode.Empty();
	m_szCalledPhoneCode=szPhoneCode;
	return ChangeMTCode(szPhoneCode,m_szChangedCalledPhoneCode);
	//return TRUE;
}

BOOL CGSMSMS::GetCalledPhoneCode(CString &szPhoneCode)
{
    if(m_szCalledPhoneCode.IsEmpty()!=0)
		return FALSE;
	szPhoneCode.Empty();
	szPhoneCode=m_szCalledPhoneCode;
	return TRUE;
}

int CGSMSMS::SetShortMessageContext(CString &szContext)
{
	if(szContext.IsEmpty()!=0)
		return -1;
	m_szSMContext.Empty();
	m_nSMLen=0;
	m_szSMContext=szContext;
	if(m_nSMCodingType==0)//英文方式
	{
		m_nSMLen=m_szSMContext.GetLength();
	}
	else//中文方式
	{
		if(m_bstrSMContext!=NULL)
			::SysFreeString(m_bstrSMContext);   // Free previous string, if any.
		m_bstrSMContext = m_szSMContext.AllocSysString();
	    m_nSMLen=::SysStringLen(m_bstrSMContext);
	}
	
	return m_nSMLen;
}

BOOL CGSMSMS::GetShortMessageContext(CString &szContext)
{
    if(m_szSMContext.IsEmpty()!=0)
		return FALSE;
	szContext.Empty();
	szContext=m_szSMContext;
	return TRUE;
}

BOOL CGSMSMS::SetDialedPhoneCode(CString &szDialedPhoneCode)
{
	if(PhoneCodeIsValid(szDialedPhoneCode)==FALSE)
		return FALSE;
	m_szDialedPhoneCode.Empty();
	m_szDialedPhoneCode=szDialedPhoneCode;
	return TRUE;
}

BOOL CGSMSMS::GetDialedPhoneCode(CString &szDialedPhoneCode)
{
    if(m_szDialedPhoneCode.IsEmpty()!=0)
		return FALSE;
	szDialedPhoneCode.Empty();
	szDialedPhoneCode=m_szDialedPhoneCode;
	return TRUE;
}

BOOL CGSMSMS::Dial(CMSComm &ctrlSMSCom, CString &szError)
{
	if(PhoneCodeIsValid(m_szDialedPhoneCode)==FALSE)
	{
		szError.Empty();
		szError=_T("拨打号码无效:");
		return FALSE;
	}

	if(ctrlSMSCom.GetPortOpen())
	{
		char str[500],chtmp[256];
		CByteArray m_outarray;
		VARIANT m_varvalue;
        
		memset(str,'\0',500);
		memset(chtmp,'\0',256);
	    if(lstrcpy(chtmp,m_szDialedPhoneCode)==NULL)
		{
			szError.Empty();
		    szError=_T("拨打号码无效:");
			return FALSE;
		}
		sprintf(str,"ATD%s;%c%c",chtmp,13,10);
#ifdef MY_DEBUG_MSG
//		AfxMessageBox(str);
#else
#ifdef _DEBUG
	    TRACE(str);
#endif
#endif
        m_outarray.SetSize(strlen(str));
		memcpy((char*)m_outarray.GetData(),str,strlen(str));
		COleVariant *ATDolevar=new COleVariant(m_outarray);
		m_varvalue=*LPCVARIANT(*ATDolevar);
		ctrlSMSCom.SetOutput (m_varvalue);
		Sleep(20);
		delete ATDolevar;
	}
	else
	{
		szError.Empty();
		szError=_T("串口未打开:");
		return FALSE;
	}

	return TRUE;
}

BOOL CGSMSMS::Hangup(CMSComm &ctrlSMSCom, CString &szError)
{
    if(ctrlSMSCom.GetPortOpen())
	{
		char str[500];
		CByteArray m_outarray;
		VARIANT m_varvalue;
        
		memset(str,0,500);
		sprintf(str,"ATH%c%c",13,10);
        m_outarray.SetSize(strlen(str));
		memcpy((char*)m_outarray.GetData(),str,strlen(str));
		COleVariant *ATHolevar=new COleVariant(m_outarray);
		m_varvalue=*LPCVARIANT(*ATHolevar);
		ctrlSMSCom.SetOutput (m_varvalue);
        Sleep(20);
		delete ATHolevar;
	}
	else
	{
		szError.Empty();
		szError=_T("串口未打开:");
		return FALSE;
	}

	return TRUE;
}

int CGSMSMS::GetRebackMessgae(CMSComm &ctrlSMSCom, CString &szMsg, CString &szError)
{
	int nLength=-1;
	
	if(ctrlSMSCom.GetPortOpen())
	{
		UINT nCom;
		VARIANT m_input1;
		COleSafeArray m_input2;
		BYTE data[1024];   //和接收缓冲区相同的长度
		int length;
		long i;
		//CByteArray barray;
		CString str,addstr;
		int curpos=0;
		if(ctrlSMSCom.GetCommEvent()==2)   //接收
		{
			VariantInit(&m_input1);
			m_input1.vt = VT_BSTR;
			m_input1=ctrlSMSCom.GetInput ();
			m_input2=m_input1;   //类型转换
			//m_input2.CreateOneDim(VT_VARIANT, 1, &m_input1);

			length=m_input2.GetOneDimSize();  //确定数据长度
			for(i=0;i<length;i++)
			{
				m_input2.GetElement(&i,data+curpos); //将数据转换为BYTE
				curpos++;
			}
			nCom=ctrlSMSCom.GetCommPort();
			addstr=_T("");
	    	//addstr.Format("接收串口%d数据长度%d!",nCom,curpos);
	    	for(i=0;i<length;i++)
			{
				//str.Format("%02x[%c] ",data[i],data[i]);
				str.Format("%c",data[i]);
				addstr+=str;
			}
			szMsg=addstr;
			nLength=length;

			if(addstr.IsEmpty()==0)
			{
#ifdef MY_DEBUG_MSG
				AfxMessageBox(addstr);
#else
#ifdef _DEBUG
	            TRACE(addstr);
#endif
#endif

			}
		}
	}
	else
	{
		szError.Empty();
		szError=_T("串口未打开:");
	}
	return nLength;
}

BOOL CGSMSMS::AddToMTCodeList(CString &szMTCode,int Add_clear_flag)
{
	if(Add_clear_flag==0)	
	{
		if(PhoneCodeIsValid(szMTCode)==FALSE)
			return FALSE;
		m_szListMTCode.AddTail (szMTCode);
		POSITION pos;
		int flag=0;
		pos=m_szListMTCode.GetHeadPosition();
		for(int i=0;i<m_szListMTCode.GetCount()-1;i++)
		{
			if(m_szListMTCode.GetAt(pos)==szMTCode)
			{
				m_szListMTCode.RemoveTail();
				flag=1;
			}
			m_szListMTCode.GetNext(pos);
		}
		if(flag==1)
			return FALSE;
	}
	else//清空手机号码列表
		m_szListMTCode.RemoveAll();
	return TRUE;
}

BOOL CGSMSMS::ReadMTCodeFromDBSet(int &nCnt)
{
	nCnt=0;//计数清空
	CMobileTelephoneDBSet *m_rdset=new CMobileTelephoneDBSet();
	TRY
	{
	//连接数据库
		CString tt;
		tt.Format("alarm=1");
		m_rdset->m_strFilter =tt;

    	CString szMTCode;
    	if(!m_rdset->IsOpen())
		{
     		if(m_rdset->Open()==0)
			{
#ifdef MY_DEBUG_MSG
				CString idgetstr;
				idgetstr.LoadString(IDS_DBCONNECT_ERROR);
				AfxMessageBox(idgetstr);
#else
#ifdef _DEBUG
	            TRACE("资料库连接失败!");
#endif
#endif
		    	return FALSE;
			}
		}
    	if(!m_rdset->IsEOF())
    		m_rdset->MoveFirst();
  	//读取数据
    	while(!m_rdset->IsEOF())
		{
			szMTCode=m_rdset->m_phone;
			if(AddToMTCodeList(szMTCode)==TRUE) nCnt++;
 	    	m_rdset->MoveNext();
		}
    	m_rdset->Close();
	}
	CATCH(CDBException,e){
#ifdef MY_DEBUG_MSG
		AfxMessageBox(e->m_strError);
#else
		;
#endif
	}
	END_CATCH
	delete m_rdset;

	return TRUE;
}

BOOL CGSMSMS::ReadMTCodeFromDBSet(CString szMoniUnitID,int &nCnt)
{
    szMoniUnitID.TrimLeft();
	szMoniUnitID.TrimRight();
	nCnt=0;//计数清空
	CMobileTelephoneDBSet *m_rdset=new CMobileTelephoneDBSet();
	TRY
	{
	//连接数据库
		CString tt;
		tt.Format("alarm=1 AND unit_id='");
		tt=tt+szMoniUnitID+_T("'");
		m_rdset->m_strFilter =tt;

    	CString szMTCode;
    	if(!m_rdset->IsOpen())
		{
     		if(m_rdset->Open ()==0)
			{
#ifdef MY_DEBUG_MSG
			   	AfxMessageBox("资料库连接失败!");
#else
#ifdef _DEBUG
	            TRACE("资料库连接失败!");
#endif
#endif
		    	return FALSE;
			}
		}
		if(m_rdset->IsBOF())
			return FALSE;
    	if(!m_rdset->IsEOF())
    		m_rdset->MoveFirst();
  	//读取数据
    	while(!m_rdset->IsEOF())
		{
			szMTCode=m_rdset->m_phone;
			if(AddToMTCodeList(szMTCode)==TRUE) nCnt++;
 	    	m_rdset->MoveNext();
		}
    	m_rdset->Close();
	}
	CATCH(CDBException,e){
#ifdef MY_DEBUG_MSG
		AfxMessageBox(e->m_strError);
#else
		;
#endif
	}
	END_CATCH
	delete m_rdset;

	return TRUE;
}

BOOL CGSMSMS::BCSendShortMessage(CMSComm &ctrlSMSCom, CStringList &szErrorList)
{
	CString szPhoneCode,szRcvMsg,szErr,szError;
	POSITION pos;

	szErrorList.RemoveAll();

	if(m_szListMTCode.GetCount()<=0)
	{
		szError=_T("收方移动电话列表为空,请先设置维护中心的告警移动电话!");
		szErrorList.AddTail (szError);
        return FALSE;
	}
	pos=m_szListMTCode.GetHeadPosition();
	for(int i=0;i<m_szListMTCode.GetCount();i++)
	{
		szPhoneCode=m_szListMTCode.GetAt(pos);
		SetCalledPhoneCode(szPhoneCode);
		if(SendShortMessage(ctrlSMSCom,szErr)==FALSE)
		{
#ifdef MY_DEBUG_MSG
			AfxMessageBox(_T("发送短消息出错:")+szErr,MB_OK | MB_ICONWARNING);
#else
#ifdef _DEBUG
	        TRACE(_T("发送短消息出错:")+szErr);
#endif
#endif
			szError=_T("[TO")+szPhoneCode+_T("]")+_T("发送短消息出错:")+szErr;
			szErrorList.AddTail (szError);
		}
		else
		{
		//	( (CSmsComDlg*)(AfxGetApp()->GetMainWnd()) )->AddSMMsgToSndSMList(szPhoneCode,m_szSMContext.Left(160));
			( (CSmsComDlg*)(AfxGetApp()->GetMainWnd()) )->AddSMMsgToSndSMList(szPhoneCode,m_szSMContext);
		}
		Sleep(1000);
    	GetRebackMessgae(ctrlSMSCom,szRcvMsg,szErr);
		m_szListMTCode.GetNext(pos);
	}
	return TRUE;
}


int CGSMSMS::GetSMCodingType()
{
	return m_nSMCodingType;
}

void CGSMSMS::SetSMCodingType(int nType)
{
	m_nSMCodingType=nType;
	if(nType==0)//0-英文
	{
		m_szSMCodingType=_T("0000A7");//短信息编码类型,"0000A7"-英文,"000010"-中文
	}
	else//中文
	{
        m_szSMCodingType=_T("0008A7");//短信息编码类型,"0000A7"-英文,"000010??应为00(TP-PID) 08(TP_DCS) A7(TP_VP)"-中文
	}
}

⌨️ 快捷键说明

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