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

📄 main.pas.~1~

📁 此程序支持多个网关同时部署. 要注意:移动为两个 端口 配置也较简单了
💻 ~1~
📖 第 1 页 / 共 5 页
字号:
{
2005/12/25
圣诞节,把所有的程序再整理一次,公布,不过此代码还属于半成品,SGIP没有开发完,因
为没有实际的网关可以用 CMPP也有2.0,CMPP3.0同样原因没有开发。
如果谁采用此代码,并有修改成功的代码,请发扬共享精神,也为了DLEPHI更好的发展,公
布成果。如果不公布代码:请看此结果,根据51JOB搜索,非DELPHI工作机会>2000;DELPHI
的<10;哥们,您说呢?我将公布更多的代码,都是实际运用企业级的,一套代码的价值都在
20万以上,这些都是市场的回报,很有潜力。共同延续一下DELPHI的生命。

请访问:www.cnrenwy.com 也许您看到的时候,还没有建设
特别注意:www.cnrenwy.com 我将着力建设 请随时留意 不定期放出 代码;特别是这些代
码在某些收费网站需要 一定金额才可以获得。(争取1月挂出)
注:此份代码部分参考网络 上寻得的部分代码 采用时 提供方未申诉权益
 }
unit main;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, IdBaseComponent, IdComponent, IdTCPConnection, md5, IdTCPClient,
  ComCtrls, StdCtrls, ExtCtrls, IdUDPBase, IdUDPClient, Buffer, DB, ADODB,
  IdAntiFreezeBase, IdAntiFreeze, SPPO10,global,  SMGP13, cmpp20, SGIP12, Activex;

type
  //电信,小灵通
  TOutPacket = class
  public
    pac: TSMGP13_PACKET;
    constructor Create(p: TSMGP13_PACKET);
    destructor destroy; override;
  end;

  //移动
  TOutcmppPacket = class
  public
    pac: TCMPP20_PACKET;
    constructor Create(p: TCMPP20_PACKET);
    destructor destroy; override;
  end;

  //联通
  TOutSgipPacket = class
  public
    pac: TSGIP12_PACKET;
    constructor Create(p: TSGIP12_PACKET);
    destructor destroy; override;
  end;

  //MT群发线程
  TMtQfThread = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
    AdoConnection: TADOConnection;
    AdoQuery: TAdoQuery;
    HaveMc: boolean;
  private
    Seqid: integer;
    function GetSeqid: integer;
    function GetInMsgId: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ConnectDB;

    //话单优先级最高,高优先级是指优先级为9的群发数据,低优先级是指9以下的群发数据
    procedure LowPriorityQf; //低优先级群发
    procedure HighPriovityQf; //高优先级群发
    procedure McQf; //话单群发
  end;

  //监控线程
  TMonitorThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    OutListview: TListView;
    InListview: TListView;
    InMonitorBuffer: TMonitorInBufferObj;
    OutMonitorBuffer: TMonitorOutBufferObj;
    OutMonitorcmppBuffer: TMonitorOutcmppBufferObj;
    OutMonitorSgipBuffer: TMonitorOutSgipBufferObj;
    ErrMsg: string;
    LastPrcExpireTime: TDateTime;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ShowOutPac(pac: TSMGP13_PACKET);
    procedure ShowOutcmppPac(pac: TCMPP20_PACKET);
    procedure ShowOutSgipPac(pac: TSGIP12_PACKET);
  end;

  //MT消息预处理线程
  TMtPrePrcThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure MtPrePrc;
  end;

  //日志记录线程
  TLogThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
    AdoConnection: TADOConnection;
    AdoQuery: TAdoQuery;
  private
    procedure LogMt;
    procedure LogMo;
    procedure LogRpt;
  protected
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ConnectDB;
    procedure CreateRpt(Buffer: TMtBuffer);
  end;

  //SMGP MT消息发送线程
  TMtSendSMGPThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure MtPrc;
  end;

  //外部网关消息接收线程   (到运营商SMGP主要线程)
  TOutReadSMGPThreadObj = class(TThread)
    FTCPClient: TIdTCPClient;
    FRecBuffer: TCOMMBuffer;
    FlocPacketIn: TSMGP13_PACKET;
    FnetPacketIn: TSMGP13_PACKET;
    FLogined: boolean; //是否已登录成功
    FMoCount: Cardinal; //Mo计数器
    FMtCount: Cardinal; //Mt计数器
    FMtRespCount: Cardinal; //Mt应答计数哭
    FMtRefuseCount: Cardinal; //Mt拒绝计数哭
    FRptCount: Cardinal; //状态报告计数器
    FLastActiveTime: TDateTime; //最后活动时间
    LastSendActiveTime: TDateTime; //最后发送活动测试包的时间
    LastLoginTime: TDateTime; //最后发送登录包的时间
    ErrMsg: string; //错误消息
    MtMessage: string;
    MtNumber: string;
    MtUnsend: integer;
    MtHasUnsendMessage: boolean;
    WindowSize: integer; //滑动窗口大小
    Seqid: Cardinal; //序号
    log_smgp_time: integer;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ClientRead;
    function CreatePacket(const RequestID: Cardinal): TSMGP13_PACKET;
    function CreateRespPacket(const recpac: TSMGP13_PACKET): TSMGP13_PACKET;
    function GetSeqid: Cardinal;
    procedure SendPacket(pac: TSMGP13_PACKET);
    procedure SendMt(i: integer);
    procedure PrcMt;
  end;

  //CMPP MT消息发送线程
  TMtSendCMPPThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure MtPrc;
  end;

  //外部网关消息接收线程   (到运营商cmpp主要线程)
  TOutReadCMPPThreadObj = class(TThread)
    FTCPCmppClient: TIdTCPClient; //下行
    FRecCmppBuffer: TCOMMBuffer;
    FlocCmppPacketIn: TCMPP20_PACKET;
    FnetCmppPacketIn: TCMPP20_PACKET;
    FLogined: boolean; //是否已登录成功
    FMoCount: Cardinal; //Mo计数器
    FMtCount: Cardinal; //Mt计数器
    FMtRespCount: Cardinal; //Mt应答计数哭
    FMtRefuseCount: Cardinal; //Mt拒绝计数哭
    FRptCount: Cardinal; //状态报告计数器
    FLastActiveTime: TDateTime; //最后活动时间
    LastSendActiveTime: TDateTime; //最后发送活动测试包的时间
    LastLoginTime: TDateTime; //最后发送登录包的时间
    ErrMsg: string; //错误消息
    MtMessage: string;
    MtNumber: string;
    MtUnsend: integer;
    MtHasUnsendMessage: boolean;
    WindowSize: integer; //滑动窗口大小
    Seqid: Cardinal; //序号
    log_cmpp_time: integer;
    log_port: integer; //尝试同时 一个端口 两个 端口号同时登陆 ????
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ClientRead;
    function CreatePacket(const RequestID: Cardinal): TCMPP20_PACKET; //构建CMPP包
    function CreateRespPacket(const recpac: TCMPP20_PACKET): TCMPP20_PACKET;
    function GetSeqid: Cardinal;
    procedure SendPacket(pac: TCMPP20_PACKET); //构建CMPP包
    procedure SendMt(i: integer);
    procedure PrcMt;
  end;

  //CMPP0 MT消息发送线程
  TMtSendCMPP0ThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure MtPrc;
  end;

  //外部网关消息接收线程   (到运营商cmpp0主要线程)
  TOutReadCMPP0ThreadObj = class(TThread)
    FTCPCmppClient: TIdTCPClient; //下行
    FRecCmppBuffer: TCOMMBuffer;
    FlocCmppPacketIn: TCMPP20_PACKET;
    FnetCmppPacketIn: TCMPP20_PACKET;
    FLogined: boolean; //是否已登录成功
    FMoCount: Cardinal; //Mo计数器
    FMtCount: Cardinal; //Mt计数器
    FMtRespCount: Cardinal; //Mt应答计数哭
    FMtRefuseCount: Cardinal; //Mt拒绝计数哭
    FRptCount: Cardinal; //状态报告计数器
    FLastActiveTime: TDateTime; //最后活动时间
    LastSendActiveTime: TDateTime; //最后发送活动测试包的时间
    LastLoginTime: TDateTime; //最后发送登录包的时间
    ErrMsg: string; //错误消息
    MtMessage: string;
    MtNumber: string;
    MtUnsend: integer;
    MtHasUnsendMessage: boolean;
    WindowSize: integer; //滑动窗口大小
    Seqid: Cardinal; //序号
    log_cmpp_time: integer;
    log_port: integer; //尝试同时 一个端口 两个 端口号同时登陆 ????
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ClientRead;
    function CreatePacket(const RequestID: Cardinal): TCMPP20_PACKET; //构建CMPP包
    function CreateRespPacket(const recpac: TCMPP20_PACKET): TCMPP20_PACKET;
    function GetSeqid: Cardinal;
    procedure SendPacket(pac: TCMPP20_PACKET); //构建CMPP包
    procedure PrcMt;
  end;

  //Sgip MT消息发送线程
  TMtSendSgipThreadObj = class(TThread)
    LastActiveTime: TDateTime;
    ErrMsg: string;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure MtPrc;
  end;

  //外部网关消息接收线程   (到运营商SGIP主要线程)
  TOutReadSgipThreadObj = class(TThread)
    FTCPClient: TIdTCPClient;
    FRecBuffer: TCOMMBuffer;
    FlocPacketIn: TSGIP12_PACKET;
    FnetPacketIn: TSGIP12_PACKET;
    FLogined: boolean; //是否已登录成功
    FMoCount: Cardinal; //Mo计数器
    FMtCount: Cardinal; //Mt计数器
    FMtRespCount: Cardinal; //Mt应答计数哭
    FMtRefuseCount: Cardinal; //Mt拒绝计数哭
    FRptCount: Cardinal; //状态报告计数器
    FLastActiveTime: TDateTime; //最后活动时间
    LastSendActiveTime: TDateTime; //最后发送活动测试包的时间
    LastLoginTime: TDateTime; //最后发送登录包的时间
    ErrMsg: string; //错误消息
    MtMessage: string;
    MtNumber: string;
    MtUnsend: integer;
    MtHasUnsendMessage: boolean;
    WindowSize: integer; //滑动窗口大小
    Seqid: Cardinal; //序号
    log_smgp_time: integer;
  protected
    procedure Execute; override;
    procedure AddMsgToMemo(const Msg: string);
    procedure ThAddMsgToMemo;
  public
    constructor Create(CreateSuspended: boolean); overload;
    destructor destroy; override;
    procedure ClientRead;
    function CreatePacket(const RequestID: Cardinal): TSGIP12_PACKET;
    function CreateRespPacket(const recpac: TSGIP12_PACKET): TSGIP12_PACKET;
    function GetSeqid: Cardinal;
    procedure SendPacket(pac: TSGIP12_PACKET);
    procedure SendMt(i: integer); //发送线程
    procedure PrcMt;
  end;

  TMainForm = class(TForm)
    SMGPTCPClient: TIdTCPClient;
    CmppTCPClient: TIdTCPClient;
    Cmpp0TCPClient: TIdTCPClient;
    SgipTCPClient: TIdTCPClient;
    PageControl1: TPageControl;
    StatusBar1: TStatusBar;
    TabSheet1: TTabSheet;
    TabSheet3: TTabSheet;
    Panel1: TPanel;
    OutListview: TListView;
    Splitter2: TSplitter;
    OutPMemo: TMemo;
    MonitorMemo: TMemo;
    IdAntiFreeze1: TIdAntiFreeze;
    AdoConnection: TADOConnection;
    AdoQuery: TAdoQuery;
    OutPopupMenu: TPopupMenu;
    OutMonitor: TMenuItem;
    N11: TMenuItem;
    MonitorTimer: TTimer;
    Timer1: TTimer;
    Label3: TLabel;
    Splitter1: TSplitter;
    MOMemo: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SMGPTCPClientConnected(Sender: TObject);
    procedure SMGPTCPClientDisconnected(Sender: TObject);
    procedure CmppTCPClientConnected(Sender: TObject);
    procedure CmppTCPClientDisconnected(Sender: TObject);
    procedure Cmpp0TCPClientConnected(Sender: TObject);
    procedure Cmpp0TCPClientDisconnected(Sender: TObject);
    procedure SgipTCPClientConnected(Sender: TObject);
    procedure SgipTCPClientDisconnected(Sender: TObject);
    procedure OutListViewAdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: boolean);
    procedure OutListViewDblClick(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure InListViewAdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: boolean);
    procedure N9Click(Sender: TObject);
    procedure MonitorTimerTimer(Sender: TObject);
    procedure MonitorMemoChange(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure N3Click(Sender: TObject);
  private
    { Private declarations }
    OutLastConnectTime: TDateTime; //SMGP 最后连接时间
    OutLastCMPPConnectTime: TDateTime; //cmpp 最后连接时间
    OutLastCMPP0ConnectTime: TDateTime; //cmpp0 最后连接时间
    OutLastSgipConnectTime: TDateTime; //SGiP 最后连接时间
  public
    procedure ShowToMemo(s: string; m: TMemo);
    function ReadConfig: boolean; //读取备至文件
    procedure ConnectDB(AdoConnection: TADOConnection); //连接到数据库
    procedure LoadServiceCode; //暂时不使用 自己研究吧
    procedure LoadProtocol; //暂时不使用 自己研究吧

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -