📄 main.pas.~1~
字号:
{
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 + -