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

📄 u_main.pas

📁 电信短信网关平台+v3, dephi写的短信收发程序(包括PDU编解码),对于进行短信收发程序开发人员很有用!
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -