📄 smsagentdlg.cpp
字号:
}
}
break;
default:
break;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
void CSMSAgentDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case 1:
{
SMSSearch();
}
break ;
case 2:
{
ReceiveSMS();
}
break;
default:
break ;
}
CDialog::OnTimer(nIDEvent);
}
void CSMSAgentDlg::SMSSearch()
{
CString sqlstr;
char msg[256]={0};
sqlstr.Format ("select top 1 Rowid,distsimcode,context,sendtime, sendflag from SMSSend_Task where sendflag=0 order by sendtime desc");
try
{
_variant_t v,vNull(0L);
_RecordsetPtr rs = m_cnn->Execute(_bstr_t(sqlstr), &v, adCmdText);
if(rs->ADOEOF)
{
sprintf(msg,"当前SMSSend_Task表无待发任务!");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
rs->Close();
}
else
{
while(!rs->ADOEOF)
{
vNull=rs->GetCollect ("Rowid");
int Rowid=vNull.intVal ;
vNull=rs->GetCollect ("distsimcode");
CString distsimcode=vNull.bstrVal ;
vNull=rs->GetCollect ("context");
CString context=vNull.bstrVal ;
if(strlen(distsimcode)>4)
{
typedef int(_stdcall *Sms_Send)(CString Sms_TelNum,CString Sms_Text);
Sms_Send Proc;
Proc = (Sms_Send)GetProcAddress(hinstDLL,"Sms_Send");
int iValue = Proc(distsimcode,context);
if (iValue == 1)
{
sprintf(msg,"成功发送:%s,%s",distsimcode,context);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
sprintf(msg,"%d",Rowid);
SendMessage(WM_USER+20, 0, (LPARAM)&msg[0]);
} else{
sprintf(msg,"重排待发:%s,%s",distsimcode,context);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
sprintf(msg,"%d",Rowid);
SendMessage(WM_USER+30, 0, (LPARAM)&msg[0]);
}
distsimcode="";
}
rs->MoveNext();
}
}
}
catch(_com_error& e) {
CString err(LPCSTR(e.Description()));
sprintf(msg,"执行%s遇到%s",sqlstr,err);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
}
BOOL CSMSAgentDlg::DBConnect()
{
char msg[512] = {0};
HRESULT hr = m_cnn.CreateInstance(__uuidof(Connection));
if(!SUCCEEDED(hr))
{
sprintf(msg, "数据库连接失败");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
return FALSE;
}
try {
COleVariant v(0L);
char searchdatasource[256] = {0};
char searchdatabase[256] = {0};
char searchuserid[256] = {0};
char searchpassword[256] = {0};
char searchcnnstr[256] = {0};
GetPrivateProfileString("DATABASE", "HOST", "127.0.0.1", searchdatasource, sizeof(searchdatasource), "./config.ini");
GetPrivateProfileString("DATABASE", "DB", "SMSAgent", searchdatabase, sizeof(searchdatabase), "./config.ini");
GetPrivateProfileString("DATABASE", "USR", "sa", searchuserid, sizeof(searchuserid), "./config.ini");
GetPrivateProfileString("DATABASE", "PWD", "", searchpassword, sizeof(searchpassword), "./config.ini");
sprintf(searchcnnstr, "Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=%s;Initial Catalog=%s;User Id=%s;Pwd=%s;",
searchdatasource, searchdatabase, searchuserid, searchpassword);
m_cnn->Open(_bstr_t(searchcnnstr), L"", L"", -1);
}
catch(_com_error &e)
{
CString err(LPCSTR(e.Description()));
sprintf(msg, "数据库连接错误提示:%s", err);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
return FALSE;
}
sprintf(msg,"数据库连接成功!");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
return TRUE;
}
void CSMSAgentDlg::InitSMSAgent()
{ char msg[128]={0};
char szBuf[256],szBuf1[128],szHost[128];
GetPrivateProfileString("DATABASE", "HOST","",
szBuf1, sizeof(szBuf1), "./config.ini");
GetPrivateProfileString("DATABASE", "DB","",
szHost, sizeof(szHost), "./config.ini");
sprintf(szBuf,"SMSAgent平台>串口号:【%d】 连接速率:【%d】 数据库主机:【%s】数据库:【%s】 "
,GetPrivateProfileInt("COMM","COMPORT",0,"./config.ini")
,GetPrivateProfileInt("COMM","RATE",0,"./config.ini")
,szBuf1,szHost);
SetWindowText(szBuf);
int SendTime=GetPrivateProfileInt("COMM","SendTime",0,"./config.ini");
int RevTime=GetPrivateProfileInt("COMM","RevTime",0,"./config.ini");
SetTimer(1,SendTime*1000,NULL) ;
SetTimer(2,RevTime*1000,NULL) ;
if(DBConnect())
{
sprintf(msg,"程序初始化完成,开始自动值守!");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
else
{
sprintf(msg,"数据库连接失败,线程初始化放弃,请检查数据库连接!");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
}
BOOL CSMSAgentDlg::InitWaveCom()
{
CString strText;
CString strtmp;
CString tmp[256];
char msg[256]={0};
int m_intPort=GetPrivateProfileInt("COMM", "COMPORT",4,"./config.ini");
strtmp="//上海迅赛信息技术有限公司,网址www.xunsai.com//";
typedef int(_stdcall *Sms_Connection)(CString CopyRight,int Com_Port,int Com_BaudRate,CString *Mobile_Type);
Sms_Connection Proc;
Proc = (Sms_Connection)GetProcAddress(hinstDLL,"Sms_Connection");
int iValue = Proc(strtmp,m_intPort,9600,tmp);
if (iValue == 1)
{
strText.Format("短信猫连接成功!(短信猫型号为:%s)",*tmp);
sprintf(msg,"%s",strText);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
} else if (iValue == 0) {
sprintf(msg,"短信猫连接失败!(请重新连接短信猫)...");
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
return FALSE;
}
return TRUE;
}
void CSMSAgentDlg::ReceiveSMS()
{
CString strText;
CString tmp[1024];
char msg[512]={0};
CString smsindex,orgsimcode,revtime,revcontext;
typedef int(_stdcall *Sms_Receive)(CString Sms_Type,CString *Sms_Text);
Sms_Receive Proc;
Proc = (Sms_Receive)GetProcAddress(hinstDLL,"Sms_Receive");
int iValue = Proc("4",tmp);
strText.Format("%s",*tmp);
if(strlen(strText)>10)
{
CString stra=strText.Right (strlen(strText)-5); //取所有有用的字符串
strText.Format ("%s|",stra);
int strpos=0,postmp=0;
while(!(strpos==-1))
{
strpos=strText.Find("|");//寻找短信分隔符
CString strtmp=strText.Left(strpos);//取出单个短信内容
strText=strText.Right(strlen(strText)-strpos-1);//保留剩余内容等待下一次使用
int postmp=0,i=0;
while(!(postmp==-1))
{
postmp=strtmp.Find ("#");
CString str1=strtmp.Left (postmp);
strtmp=strtmp.Right (strlen(strtmp)-postmp-1);
if(i==0) smsindex=str1;
if(i==2) orgsimcode=str1;
if(i==3) revcontext=str1;
if(i==4) revtime=strtmp;
i++;
}
if(!(strpos==-1))
{
CString sqlstr;
sqlstr.Format ("insert into smsmo_list(mosimcode,mocontext,revtime) values('%s','%s','%s') ",orgsimcode,revcontext,revtime);
sprintf(msg,"%s",sqlstr);
SendMessage(WM_USER+40, 0, (LPARAM)&msg[0]);
sprintf(msg,"接收短信:索引%s,%s,%s,%s",smsindex,orgsimcode,revcontext,revtime);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
if(DeleteSMS(smsindex))
{
sprintf(msg,"删除手机短信:索引%s成功!",smsindex);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
else
{
sprintf(msg,"删除手机短信:索引%s失败!",smsindex);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
}
}
}
else
{
sprintf(msg,"手机没有接收任何短信!",smsindex);
SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]);
}
}
BOOL CSMSAgentDlg::DeleteSMS(CString m_index)
{
CString strText;
CString tmp[256];
typedef int(_stdcall *Sms_Delete)(CString Sms_Index);
Sms_Delete Proc;
Proc = (Sms_Delete)GetProcAddress(hinstDLL,"Sms_Delete");
int iValue = Proc(m_index);
if (iValue == 1)
{
} else{
return FALSE;
}
return TRUE;
}
void CSMSAgentDlg::OnButton1()
{
UpdateData();
CString strText;
typedef int(_stdcall *Sms_Send)(CString Sms_TelNum,CString Sms_Text);
Sms_Send Proc;
Proc = (Sms_Send)GetProcAddress(hinstDLL,"Sms_Send");
int iValue = Proc(m_simcode,m_context);
if (iValue == 1)
{
AfxMessageBox("发送成功!");
} else{
AfxMessageBox("发送失败!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -