📄 nhcnetmanager.pas
字号:
{*************************************************************************}
{ 单元说明: 网络对象管理 }
{*************************************************************************}
unit NhcNetManager;
interface
uses
Windows, SysUtils, Classes, NhContainers, NhSocketObj, NhcNetBase,
NhcBizNetDriver, NhcNetClasses, NhcNetBusiness;
const
ClientUdpPortStart = 5225; // 客户端UDP起始端口
CheckPortTimes = 1000; // 客户端绑定端口的重试次数
type
{ TBcNetManager }
TBcNetManager = class(TObject)
private
FServerAddr: TPeerAddress; // ServerAddrMgr
FNetIO: TNetIO; // NetIO
FBizNetDriver: TBizNetDriver; // BizNetDriver
FNetBusiness: TBcNetBusiness; // NetBusiness
FInitialized: Boolean;
FTerminated: Boolean;
private
procedure CreateObjects;
procedure DestroyObjects;
procedure InitNetIO;
procedure DoFinalize;
procedure SetServerAddr(const Value: TPeerAddress);
public
constructor Create;
destructor Destroy; override;
// 初始化、结束化工作
procedure Initialize;
procedure Finalize;
// 登录、注销处理
procedure DoBeforeLogin;
procedure DoBeforeLogout;
procedure DoAfterLogin;
procedure DoAfterLogout;
// 垃圾收集
procedure CollectGarbage;
property ServerAddr: TPeerAddress read FServerAddr write SetServerAddr;
property NetIO: TNetIO read FNetIO;
property BizNetDriver: TBizNetDriver read FBizNetDriver;
property NetBusiness: TBcNetBusiness read FNetBusiness;
property Terminated: Boolean read FTerminated;
end;
var
NetMgr: TBcNetManager;
implementation
uses NhcConfig;
{ TBcNetManager }
constructor TBcNetManager.Create;
begin
inherited Create;
NetMgr := Self;
CreateObjects;
end;
destructor TBcNetManager.Destroy;
begin
Finalize;
DestroyObjects;
inherited;
end;
//-----------------------------------------------------------------------------
// 描述: 创建各个全局对象
// 注意: 全局对象的创建必须成功!
//-----------------------------------------------------------------------------
procedure TBcNetManager.CreateObjects;
begin
FNetIO := TNetIO.Create;
FBizNetDriver := TBizNetDriver.Create(FNetIO);
FNetBusiness := TBcNetBusiness.Create;
FNetBusiness.NetDriver := FBizNetDriver;
end;
//-----------------------------------------------------------------------------
// 描述: 销毁所有全局对象
//-----------------------------------------------------------------------------
procedure TBcNetManager.DestroyObjects;
begin
FNetBusiness.Free;
FBizNetDriver.Free;
FNetIO.Free;
end;
//-----------------------------------------------------------------------------
// 描述: 初始化 NetIO
// 备注: 若无法初始化,必须抛出异常。
//-----------------------------------------------------------------------------
procedure TBcNetManager.InitNetIO;
var
Success: Boolean;
begin
Success := FNetIO.InitServer(ClientUdpPortStart, CheckPortTimes);
if not Success then
raise Exception.Create('无法初始化UDP服务器。');
end;
procedure TBcNetManager.SetServerAddr(const Value: TPeerAddress);
begin
FServerAddr := Value;
end;
//-----------------------------------------------------------------------------
// 描述: 结束化 (不检查 FInitialized 状态)
//-----------------------------------------------------------------------------
procedure TBcNetManager.DoFinalize;
begin
FTerminated := True;
try FBizNetDriver.Finalize; except end;
try FNetIO.StopServer; except end;
try NetworkFinalize; except end;
end;
//-----------------------------------------------------------------------------
// 描述: 初始化工作(对象创建之后、开始工作之前)
// 备注: 若无法初始化,必须抛出异常。
//-----------------------------------------------------------------------------
procedure TBcNetManager.Initialize;
begin
if not FInitialized then
begin
try
FTerminated := False;
NetworkInitialize;
FServerAddr.Ip := 0;
FServerAddr.Port := 0;
InitNetIO;
FBizNetDriver.Initialize;
FInitialized := True;
except
DoFinalize;
raise;
end;
end;
end;
//-----------------------------------------------------------------------------
// 描述: 结束化工作
//-----------------------------------------------------------------------------
procedure TBcNetManager.Finalize;
begin
FTerminated := True;
if FInitialized then
begin
DoFinalize;
FInitialized := False;
end;
end;
//-----------------------------------------------------------------------------
// 描述: 登录之前的处理
//-----------------------------------------------------------------------------
procedure TBcNetManager.DoBeforeLogin;
begin
FBizNetDriver.DoBeforeLogin;
end;
//-----------------------------------------------------------------------------
// 描述: 注销之前的处理
//-----------------------------------------------------------------------------
procedure TBcNetManager.DoBeforeLogout;
begin
FBizNetDriver.DoBeforeLogout;
end;
//-----------------------------------------------------------------------------
// 描述: 登录成功之后的处理
//-----------------------------------------------------------------------------
procedure TBcNetManager.DoAfterLogin;
begin
FBizNetDriver.DoAfterLogin;
end;
//-----------------------------------------------------------------------------
// 描述: 注销之后的处理
//-----------------------------------------------------------------------------
procedure TBcNetManager.DoAfterLogout;
begin
FBizNetDriver.DoAfterLogout;
end;
//-----------------------------------------------------------------------------
// 描述: 垃圾收集
//-----------------------------------------------------------------------------
procedure TBcNetManager.CollectGarbage;
begin
FBizNetDriver.CollectGarbage;
end;
initialization
TBcNetManager.Create;
finalization
NetMgr.Free;
NetMgr := nil;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -