📄 u_main.pas
字号:
end;
if Send_Deliver then
begin
showmessage('往中间层发送短信线程没停止,不能退出'); CanClose := False; exit; end;
if SubmitRequest then
begin
showmessage('请求下行短信线程没停止,不能退出'); CanClose := False; exit; end;
if Send_Resp then
begin
showmessage('往中间层发送回馈报告线程没停止,不能退出'); CanClose := False; exit; end;
if Send_Report then
begin
showmessage('往中间层发送递送报告线程没停止,不能退出'); CanClose := False; exit; end;
if not counteList then
begin
if application.messagebox('缓冲区队列有数据未发送,如果要强行退出系统请保存数据!', '提示', mb_okCancel + MB_ICONWARNING) = 2 then
begin
CanClose := False;
exit;
end
else
begin
//把下行的短信写入数据表中
CanClose := False;
n37.Enabled:=True;
SaveMessage := TSaveMessage.create;
exit;
end;
end;
if LogList.Count = 0 then
begin
xWriteLog.Terminate;
Sleep(100);
CanClose := True;
end
else
begin
messagebox(handle, '日志没有写完,不能退出程序', '警告', mb_ok + MB_ICONWARNING);
CanClose := False;
end;
end;
{function GetSequenceID(const DestTermID, instructor: string): word;
var
i: integer;
ValueNode: IXMLNode; //根节点
NextNode: IXMLNode; //业务节点
s: string; //配置中服务代码
SpNumber: string; //用户发送的目的号码
TY: Boolean;
j: integer;
begin
Result := 0;
TY := False;
SpNumber := AnsiUpperCase(Trim(DestTermID)); //用户发送的目的号码
try
ValueNode := SMGPGateWay.XMLService.ChildNodes['Service']; //'Service节点'
for i := 0 to ValueNode.ChildNodes.Count - 1 do //业务节点数
begin
NextNode := ValueNode.ChildNodes[i]; //各业务节点
s := AnsiUpperCase(NextNode.ChildNodes['SPNumber'].Text);
if NextNode.ChildNodes['Extend'].Text = '0' then //特服号精确匹配
begin
if s = SpNumber then
begin //节点找到
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end;
end
else if NextNode.ChildNodes['Extend'].Text = '1' then
begin //特服号模糊匹配
if AnsiStartsText(s, SpNumber) then
begin
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end
end
else if NextNode.ChildNodes['Extend'].Text = '2' then
begin
if s = SpNumber then
if AnsiStartsText(NextNode.ChildNodes['Instructor'].Text, instructor) then
begin
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end
end
else if NextNode.ChildNodes['Extend'].Text = '5' then
begin
if AnsiStartsText(s, SpNumber) then //指令和特服号双重匹配(特服号,指令模糊匹配)
if AnsiStartsText(NextNode.ChildNodes['Instructor'].Text, instructor) then
begin
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end
end
else if NextNode.ChildNodes['Extend'].Text = '3' then
begin
if s = SpNumber then
begin //该节点找到特服号 指令和特服号双重匹配
if CompareText(NextNode.ChildNodes['Instructor'].Text, instructor) = 0 then
begin //定购指令
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end
else if CompareText(NextNode.ChildNodes['Enter'].Text, instructor) = 0 then
begin //二次确认指令
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end
else if CompareText(NextNode.ChildNodes['QXInstructor'].Text, instructor) = 0 then
begin //取消指令
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end;
end
end
else if NextNode.ChildNodes['Extend'].Text = '4' then //通用指令
if s = SpNumber then //特服号精确匹配
begin
if CompareText(instructor, NextNode.ChildNodes['Instructor40'].Text) = 0 then //0000
TY := True
else if CompareText(instructor, NextNode.ChildNodes['Instructor50'].Text) = 0 then //00000
TY := True
else if AnsiStartsText(NextNode.ChildNodes['InstructorQ'].Text, instructor) then //Q模糊匹配
begin
if length(instructor) >= 2 then
begin
for j := 2 to length(instructor) do
begin
if not (instructor[2] in ['1'..'9']) then //第一为必须是1..9
break;
if not (instructor[j] in ['0'..'9']) then //Q指令后带的不是是数字0..9
break;
end;
if j > length(instructor) then
TY := True;
end
else //Q指令
begin
TY := True;
end;
end
else if CompareText(instructor, NextNode.ChildNodes['InstructorNO'].Text) = 0 then //1186185
TY := True
else
begin
if ord(instructor[1]) = 163 then //中文的问号?
begin
if length(instructor) = 2 then
TY := True;
end
else if CompareText(instructor, NextNode.ChildNodes['InstructorHelp'].Text) = 0 then //?
TY := True;
end;
if TY then
begin
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
exit;
end;
end;
end;
except
on E: Exception do
SMGPGateWay.Memo3.Lines.Add(E.message);
end;
if Result = 0 then //如果没找到业务,发送到客服队列中
begin
NextNode := ValueNode.ChildNodes['KF'];
Result := strtoint(NextNode.ChildNodes['SequenceID'].Text);
end;
end; }
procedure AddDSeq;
begin
if dSequence >= 4294967200 then dSequence := 0;
dSequence := dSequence + 1;
end;
procedure TSMGPGateWay.N2Click(Sender: TObject);
begin
N2.Checked := not N2.Checked;
end;
procedure TSMGPGateWay.N3Click(Sender: TObject);
begin
N3.Checked := not N3.Checked;
end;
procedure TSMGPGateWay.N4Click(Sender: TObject);
begin
N4.Checked := N4.Checked;
end;
procedure TSMGPGateWay.ToolButton15Click(Sender: TObject);
begin
{ if ToolButton15.Tag = 0 then begin
ToolButton15.Tag := 1;
ToolButton15.Caption := 'Stop ReTry';
end
else begin
ToolButton15.Tag := 0;
ToolButton15.Caption := 'StartReTry';
end; }
end;
procedure TSMGPGateWay.ToolButton8Click(Sender: TObject);
begin
close;
end;
procedure TSMGPGateWay.ToolButton1Click(Sender: TObject);
begin
FSysConfig.ShowModal;
end;
procedure TSMGPGateWay.ToolButton17Click(Sender: TObject);
begin
GW_MT.Show;
end;
procedure TSMGPGateWay.MOExit1Click(Sender: TObject);
begin
MOExit := True; //中止上行线程
MOExit1.Enabled := False;
MOLogin1.Enabled := True;
if (not MOExit1.Enabled) and (not MTExit1.Enabled) then
AllLogin1.Enabled := True;
end;
procedure TSMGPGateWay.MTExit1Click(Sender: TObject);
begin
MTExit := True; //中止上行线程
MTExit1.Enabled := False;
MTLogin1.Enabled := True;
if (not MOExit1.Enabled) and (not MTExit1.Enabled) then
AllLogin1.Enabled := True;
end;
procedure TSMGPGateWay.AllExit1Click(Sender: TObject);
begin
MOExit := True; //中止上行线程
MTExit := True; //中止上行线程
AllExit1.Enabled := False;
MTExit1.Enabled := False;
MOExit1.Enabled := False;
AllLogin1.Enabled := True;
MTLogin1.Enabled := True;
MOLogin1.Enabled := True;
end;
procedure TSMGPGateWay.AllLogin1Click(Sender: TObject);
var
loginmode1, connectmode1: string;
loginmode2, connectmode2: string;
timeout, sleeptime, resptime, sendtimes: integer;
begin
// readLogParam(ServerIP, Port, ClientID, sharesecret);
readLogParam2(loginmode2, connectmode2);
readLogParam1(loginmode1, connectmode1);
timeout := strtoint(Trim(FSysConfig.Edit1.Text));
sleeptime := strtoint(Trim(FSysConfig.Edit6.Text));
ReadTimes(resptime, sendtimes);
try
xTCPCTDeliver := TCPCTDeliver.create(ServerIP, Port, ClientID, sharesecret, sleeptime,
timeout, strtoint(loginmode1));
except
end;
try
xCPSubmit := TCPSubmit.create(ServerIP, Port, ClientID, sharesecret, sleeptime,
timeout, resptime, sendtimes, strtoint(loginmode2));
except
end;
MOExit := False;
MTExit := False;
AllLogin1.Enabled := False;
MTLogin1.Enabled := False;
MOLogin1.Enabled := False;
AllExit1.Enabled := True;
MOExit1.Enabled := True;
MTExit1.Enabled := True;
Label8.Caption := '';
Label9.Caption := '';
end;
procedure TSMGPGateWay.MTLogin1Click(Sender: TObject);
var
loginmode2, connectmode2: string;
timeout, sleeptime, resptime, sendtimes: integer;
begin
readLogParam2(loginmode2, connectmode2);
ReadTimes(resptime, sendtimes);
timeout := strtoint(Trim(FSysConfig.Edit1.Text));
sleeptime := strtoint(Trim(FSysConfig.Edit6.Text));
try
xCPSubmit := TCPSubmit.create(ServerIP, Port, ClientID, sharesecret, sleeptime,
timeout, resptime, sendtimes, strtoint(loginmode2));
except
end;
MTLogin1.Enabled := False;
AllLogin1.Enabled := False;
MTExit1.Enabled := True;
if not MOLogin1.Enabled then
AllExit1.Enabled := True;
Label8.Caption := '';
end;
procedure TSMGPGateWay.MOLogin1Click(Sender: TObject);
var
loginmode1, connectmode1: string;
timeout, sleeptime: integer;
begin
readLogParam1(loginmode1, connectmode1);
timeout := strtoint(Trim(FSysConfig.Edit1.Text));
sleeptime := strtoint(Trim(FSysConfig.Edit6.Text));
try
xTCPCTDeliver := TCPCTDeliver.create(ServerIP, Port, ClientID, sharesecret, sleeptime,
timeout, strtoint(loginmode1));
except
end;
MOLogin1.Enabled := False;
AllLogin1.Enabled := False;
MOExit1.Enabled := True;
if not MTLogin1.Enabled then
AllExit1.Enabled := True;
Label9.Caption := '';
end;
procedure TSMGPGateWay.ToolButton6Click(Sender: TObject);
begin
if ToolButton6.Tag = 0 then
begin
try
GWMoniter := GWWarnning.create;
ToolButton6.Tag := 1;
ToolButton6.Caption := '关闭监控';
except
end;
end
else
begin
try
GWMoniter.Terminate;
ToolButton6.Tag := 0;
ToolButton6.Caption := '线程监控';
except
end;
end;
end;
procedure TSMGPGateWay.Memo11Click(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TSMGPGateWay.Memo21Click(Sender: TObject);
begin
Memo2.Clear;
end;
procedure TSMGPGateWay.Memo31Click(Sender: TObject);
begin
Memo3.Clear;
end;
procedure TSMGPGateWay.createParams(var Params: TCreateParams);
begin
inherited createParams(Params);
Params.WinClassName := WZGL_APP_NAME;
end;
procedure TSMGPGateWay.RestoreRequest(var message: TMessage);
begin
if IsIconic(application.handle) = True then
application.Restore
else
application.BringToFront;
end;
procedure TSMGPGateWay.CheckBox2Click(Sender: TObject);
begin
Memo1.WordWrap := CheckBox2.Checked;
Memo2.WordWrap := CheckBox2.Checked;
if CheckBox2.Checked then
begin
Memo1.ScrollBars := ssVertical;
Memo2.ScrollBars := ssVertical;
end
else
begin
Memo1.ScrollBars := ssBoth;
Memo2.ScrollBars := ssBoth;
end;
end;
procedure TSMGPGateWay.ToolButton16Click(Sender: TObject);
var
sleeptime, logNumber: integer;
udpsrvip: string;
udpport: integer;
autowrite: Boolean;
begin
if not WriteLog_Free then
begin
xWriteLog.Terminate;
ToolButton16.Caption := '重启日志';
end
else
begin
readlogth(udpsrvip, udpport, logNumber, sleeptime, autowrite);
xWriteLog := WriteLog.create(udpsrvip, udpport, sleeptime);
ToolButton16.Enabled := False;
ToolButton16.Caption := '停写日志';
end;
end;
procedure TSMGPGateWay.RzBitBtn1Click(Sender: TObject);
var
Cou1, cou2, cou3, cou4, Cou5, cou6: integer;
aList: Tlist;
begin
aList := DeliverList.LockList;
try
Cou1 := aList.Count;
finally
DeliverList.UnlockList;
end;
aList := SubmitList.LockList;
try
cou2 := aList.Count;
finally
SubmitList.UnlockList;
end;
aList := ResponseList.LockList;
try
cou3 := aList.Count;
finally
ResponseList.UnlockList;
end;
aList := ReportList.LockList;
try
cou4 := aList.Count;
finally
ReportList.UnlockList;
end;
Cou5 := LogList.Count;
aList := SaveSubmitList.LockList;
try
cou6 := aList.Count;
finally
SaveSubmitList.UnlockList;
end;
Edit1.Text := inttostr(Cou1);
Edit2.Text := inttostr(cou2);
Edit3.Text := inttostr(cou3);
Edit4.Text := inttostr(cou4);
Edit5.Text := inttostr(Cou5);
Edit6.Text := inttostr(cou6);
end;
procedure TSMGPGateWay.RzBitBtn2Click(Sender: TObject);
begin
Memo1.Clear;
Memo2.Clear;
if Memo3.Lines.Count > 10000 then
Memo3.Clear;
end;
procedure TSMGPGateWay.RzBitBtn3Click(Sender: TObject);
begin
CTD_cou := 0; //电信上行数
SPS_cou := 0; //网关下行数
GDToS_cou := 0; //网关上行短信数
GRespToS_cou := 0; //网关上行回馈报告数
GRepToS_cou := 0; //网关上行递送报告数
SToG_cou := 0; //中间层下发短信数
end;
procedure TSMGPGateWay.N15Click(Sender: TObject);
var
timeout, sleeptime, resptime, sendtimes: integer;
begin
ReadTimes(resptime, sendtimes);
timeout := strtoint(Trim(FSysConfig.Edit1.Text));
sleeptime := strtoint(Trim(FSysConfig.Edit6.Text));
xTransmit := TTransmit.create(ServerIP, Port, ClientID, sharesecret, sleeptime,
timeout, resptime, sendtimes, 2);
Label9.Caption:='';
Label8.Caption:='';
end;
procedure TSMGPGateWay.N17Click(Sender: TObject);
begin
if not TransmitExit then
TransmitExit := True;
end;
procedure TSMGPGateWay.N34Click(Sender: TObject);
begin
GW_MT.Show;
end;
procedure TSMGPGateWay.N37Click(Sender: TObject);
begin
SaveSubmitList.Clear;
end;
procedure TSMGPGateWay.SpeedButton1Click(Sender: TObject);
begin
AccessNoStrList.Clear;
AccessNoStrList.LoadFromFile(ExtractFilePath(application.ExeName) + 'AccessNo.txt');
end;
procedure TSMGPGateWay.SpeedButton2Click(Sender: TObject);
begin
F_DeliverTest.Show;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -