📄 smsrv.bss
字号:
// SmSrv.bss
// 短信收发服务模块
// 使用蓝星际短信外部动态模块 GsmModem.dll
// 硬件支持红外手机、数据线连接的手机或无线Modem
// bluesen@sina.com.cn
// 2003.10, 2005.3
// 数据结构:
// 1. 表TSys_SmsSendTB 发送队列
// 2. 表TSys_SmsReciTB 接收队列
// 基本功能: 循环处理下面两步:
// 1. 扫描发送队列, 取出未发送的记录, 逐条发送;
// 2. 询问设备, 取出已经到达的短信, 写入接收队列
// 在测试开发平台多次测试时要使用这条语句
DbCloseAll();
DllFreeAll();
#include "GsmModem.h"
#include "DataBase.cfg" // DataBase.cfg里面包含数据库连接的参数项
// 全局变量定义
smsCom = ""; // 连接设备的COM口, 如为""表示自动检测
smsBaund = "19200"; // 连接设备的波特率
// 函数定义
// 显示信号强度
function DispSq()
{
iSq = 0;
GsmSq(iSq);
sSq = "信号: " + iSq + "%";
DispInfo(1, sSq);
}
smsHd = -1; // 初始化短信句柄
GsmOpen(smsCom, smsBaund, "", smsHd); // 打开
if( smsHd<0 )
{
DispInfo(0, "打不开Sms短信设备");
DllFreeAll();
DbCloseAll();
return(-2);
}
// 打开数据库
dbHd = -1;
InitDb(dbHd);
if(dbHd<0)
{
DispInfo(0, "打开数据库不成功");
GsmClose();
DllFreeAll();
return(-1);
}
while(true) // 主循环
{
isBusy = false;
sCmd = "select FSmsID, FReciPhone, FSmsContent from TSys_SmsSendTB where FSendStatus=0";
DbExec(dbHd,sCmd);
num = 0;
DbRows(dbHd, num);
if(num>0)
{
isBusy = true;
cmdList = 0; // 数组,用来存放更新标志的SQL
for(i=1; i<=num; i++)
{
code = "";
phone = "";
info = ""
DbGetField(dbHd, "FSmsID", i, code);
Trim(code);
DbGetField(dbHd, "FReciPhone", i, phone);
Trim(phone);
DbGetField(dbHd, "FSmsContent", i, info);
Trim(info);
DispInfo(0, "");
DispInfo(1, phone);
DispInfo(2, "发送...");
ret = -1;
SMSSend(phone, info, ret); // 发送
if( ret>=0 )
{
flag = "1"; // OK
}
else
{
flag = "2"; // 不成功
}
sCmd = "update TSys_SmsSendTB set FSendTime=" + NowFun \
+ ", FSendStatus=" + flag + " where FSmsID=" + code;
cmdList[i] = sCmd;
}
// 更新发送标志
for(i=1; i<=num; i++)
{
sCmd = cmdList[i];
DbExec(dbHd, sCmd);
}
cmdList = 0;
Sleep(1.00);
}
n = 0;
SMSTest(n); // SMS测试, 1个参数
for(i=0; i<n; i++)
{
isBusy = true;
addr = "";
info = "";
time = "";
ret = -1;
// 注意: 接收信息缓冲区必须要有足够的空间!
Repeatstr(addr, " ", 20);
Repeatstr(info, " ", 200);
Repeatstr(time, " ", 30);
SMSRecv(addr, info, time, ret); // 接收
if( ret>0 )
{
DispInfo(0, "");
DispInfo(1, addr);
DispInfo(2, "接收...");
// pTime = "";
// GetFmtTime(pTime);
sCmd = "insert into TSys_SmsReciTB (FSendPhone, FSmsContent, FFlag, FReciTime) values ('" \
+ addr + "', '" + info + "', 0, " + NowFun + ")";
DbExec(dbHd, sCmd);
}
}
if( !isBusy )
{
DispSq();
}
Sleep(1.75);
}
// 系统退出
OnSysQuit();
GsmClose();
DllFreeAll();
DbCloseAll();
return(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -