nhcnetbase.pas

来自「NetHook API 对战平台内核库是一套实现时下流行的网络对战平台[如浩方、」· PAS 代码 · 共 567 行 · 第 1/2 页

PAS
567
字号
  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 + =
减小字号Ctrl + -
显示快捷键?