📄 gsmsms.cpp
字号:
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 + -