📄 nhcnetbase.pas
字号:
FNetHandlerList := TList.Create;
FNetIO.RegisterNetDriver(Self);
end;
destructor TNetDriver.Destroy;
begin
FNetIO.UnregisterNetDriver(Self);
FNetHandlerList.Free;
inherited;
end;
//-----------------------------------------------------------------------------
// 描述: UDP数据包过滤器
// 返回:
// True - 有效包
// False - 无效包
//-----------------------------------------------------------------------------
function TNetDriver.FilterUdpPacket(const PacketBuffer; PacketSize: Integer): Boolean;
begin
Result := True;
end;
//-----------------------------------------------------------------------------
// 描述: TCP数据包过滤器
// 返回:
// True - 有效包
// False - 无效包
//-----------------------------------------------------------------------------
function TNetDriver.FilterTcpPacket(Connection: TTcpConnection; const PacketBuffer;
PacketSize: Integer): Boolean;
begin
Result := True;
end;
//-----------------------------------------------------------------------------
// 描述: UDP数据分派 (可供覆写)
//-----------------------------------------------------------------------------
procedure TNetDriver.DispatchUdpPacket(const PacketBuffer; PacketSize: Integer;
const PeerAddr: TPeerAddress);
begin
DeliverUdpPacket(PacketBuffer, PacketSize, PeerAddr);
end;
//-----------------------------------------------------------------------------
// 描述: TCP数据分派 (可供覆写)
//-----------------------------------------------------------------------------
procedure TNetDriver.DispatchTcpPacket(Connection: TTcpConnection;
const PacketBuffer; PacketSize: Integer);
begin
DeliverTcpPacket(Connection, PacketBuffer, PacketSize);
end;
//-----------------------------------------------------------------------------
// 描述: 把UDP数据直接递送给 NetHandler
//-----------------------------------------------------------------------------
procedure TNetDriver.DeliverUdpPacket(const PacketBuffer; PacketSize: Integer;
const PeerAddr: TPeerAddress);
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DispatchUdpPacket(PacketBuffer, PacketSize, PeerAddr);
end;
//-----------------------------------------------------------------------------
// 描述: 把TCP数据直接递送给 NetHandler
//-----------------------------------------------------------------------------
procedure TNetDriver.DeliverTcpPacket(Connection: TTcpConnection;
const PacketBuffer; PacketSize: Integer);
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DispatchTcpPacket(Connection, PacketBuffer, PacketSize);
end;
//-----------------------------------------------------------------------------
// 描述: 初始化工作(对象创建之后、开始工作之前)
// 备注: 若无法初始化,必须抛出异常。
//-----------------------------------------------------------------------------
procedure TNetDriver.Initialize;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).Initialize;
end;
//-----------------------------------------------------------------------------
// 描述: 结束化工作
//-----------------------------------------------------------------------------
procedure TNetDriver.Finalize;
var
I: Integer;
begin
for I := FNetHandlerList.Count - 1 downto 0 do
TNetHandler(FNetHandlerList[I]).Finalize;
end;
//-----------------------------------------------------------------------------
// 描述: 登录之前的处理
//-----------------------------------------------------------------------------
procedure TNetDriver.DoBeforeLogin;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DoBeforeLogin;
end;
//-----------------------------------------------------------------------------
// 描述: 注销之前的处理
//-----------------------------------------------------------------------------
procedure TNetDriver.DoBeforeLogout;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DoBeforeLogout;
end;
//-----------------------------------------------------------------------------
// 描述: 登录成功之后的处理
//-----------------------------------------------------------------------------
procedure TNetDriver.DoAfterLogin;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DoAfterLogin;
end;
//-----------------------------------------------------------------------------
// 描述: 注销之后的处理
//-----------------------------------------------------------------------------
procedure TNetDriver.DoAfterLogout;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).DoAfterLogout;
end;
//-----------------------------------------------------------------------------
// 描述: 垃圾收集
//-----------------------------------------------------------------------------
procedure TNetDriver.CollectGarbage;
var
I: Integer;
begin
for I := 0 to FNetHandlerList.Count - 1 do
TNetHandler(FNetHandlerList[I]).CollectGarbage;
end;
//-----------------------------------------------------------------------------
// 描述: NetIO 收到 UDP 包后,分派给 NetDriver.
//-----------------------------------------------------------------------------
procedure TNetDriver.ProcessRecvedUdpPacket(const PacketBuffer;
PacketSize: Integer; const PeerAddr: TPeerAddress);
begin
if FilterUdpPacket(PacketBuffer, PacketSize) then
DispatchUdpPacket(PacketBuffer, PacketSize, PeerAddr);
end;
//-----------------------------------------------------------------------------
// 描述: 注册 NetHandler
//-----------------------------------------------------------------------------
procedure TNetDriver.RegisterNetHandler(const NetHandler: TNetHandler);
begin
if FNetHandlerList.IndexOf(Pointer(NetHandler)) = -1 then
FNetHandlerList.Add(NetHandler);
end;
//-----------------------------------------------------------------------------
// 描述: 注销 NetHandler
//-----------------------------------------------------------------------------
procedure TNetDriver.UnregisterNetHandler(const NetHandler: TNetHandler);
begin
FNetHandlerList.Remove(NetHandler);
end;
{ TNetHandler }
constructor TNetHandler.Create;
begin
inherited;
end;
destructor TNetHandler.Destroy;
begin
SetNetDriver(nil);
inherited;
end;
procedure TNetHandler.SetNetDriver(Value: TNetDriver);
begin
if FNetDriver <> Value then
begin
if FNetDriver <> nil then
FNetDriver.UnregisterNetHandler(Self);
if Value <> nil then
Value.RegisterNetHandler(Self);
FNetDriver := Value;
end;
end;
//-----------------------------------------------------------------------------
// 描述: 收到 NetDriver 分派过来的UDP数据
//-----------------------------------------------------------------------------
procedure TNetHandler.DispatchUdpPacket(const PacketBuffer; PacketSize: Integer;
const PeerAddr: TPeerAddress);
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 收到 NetDriver 分派过来的TCP数据
//-----------------------------------------------------------------------------
procedure TNetHandler.DispatchTcpPacket(Connection: TTcpConnection;
const PacketBuffer; PacketSize: Integer);
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 初始化工作(对象创建之后、开始工作之前)
// 备注: 若无法初始化,必须抛出异常。
//-----------------------------------------------------------------------------
procedure TNetHandler.Initialize;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 结束化工作
//-----------------------------------------------------------------------------
procedure TNetHandler.Finalize;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 登录之前的处理
//-----------------------------------------------------------------------------
procedure TNetHandler.DoBeforeLogin;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 注销之前的处理
//-----------------------------------------------------------------------------
procedure TNetHandler.DoBeforeLogout;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 登录成功之后的处理
//-----------------------------------------------------------------------------
procedure TNetHandler.DoAfterLogin;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 注销之后的处理
//-----------------------------------------------------------------------------
procedure TNetHandler.DoAfterLogout;
begin
// nothing
end;
//-----------------------------------------------------------------------------
// 描述: 垃圾收集
//-----------------------------------------------------------------------------
procedure TNetHandler.CollectGarbage;
begin
// nothing
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -