onlinehum.pas

来自「飘飘的传奇服务端院代码 能编译的 要控件 老大就让我传上去吧」· PAS 代码 · 共 173 行

PAS
173
字号
unit OnLineHum;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Main, ExtCtrls;

type
  TFrmOnLineHum = class(TForm)
    GroupBox1: TGroupBox;
    ButtonRef: TButton;
    ButtonKick: TButton;
    ButtonAddTempList: TButton;
    ButtonAddBlockList: TButton;
    ListViewOnLine: TListView;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure ButtonRefClick(Sender: TObject);
    procedure ListViewOnLineClick(Sender: TObject);
    procedure ButtonKickClick(Sender: TObject);
    procedure ButtonAddTempListClick(Sender: TObject);
    procedure ButtonAddBlockListClick(Sender: TObject);
  private
    { Private declarations }
    procedure RefOnlineHum();
    procedure RefReceiveLength();
  public
    { Public declarations }
    procedure Open();
  end;

var
  FrmOnLineHum: TFrmOnLineHum;
  sSelIPaddr: string;
implementation
uses GateShare;
{$R *.dfm}

function GetReceiveLength(SocketHandle: THandle): Integer;
var
  i: Integer;
  UserSession: pTSessionInfo;
begin
  Result := 0;
  for i := 0 to GATEMAXSESSION - 1 do begin
    UserSession := @SessionArray[i];
    if UserSession.Socket <> nil then begin
      if UserSession.nSckHandle = SocketHandle then begin
        Result := UserSession.nReceiveLength;
        Break;
      end;
    end;
  end;
end;

procedure TFrmOnLineHum.RefReceiveLength();
var
  ListItem: TListItem;
  nIndex: Integer;
  nSckHandle: Integer;
  sIPaddr: string;
begin
  for nIndex := 0 to ListViewOnLine.Items.Count - 1 do begin
    ListItem := ListViewOnLine.Items.Item[nIndex];
    sIPaddr := ListItem.SubItems.Strings[0];
    nSckHandle := StrToInt(ListItem.SubItems.Strings[1]);
    ListItem.SubItems.Strings[2] := IntToStr(GetReceiveLength(nSckHandle));
    ListItem.SubItems.Strings[3] := Format('%d/%d', [FrmMain.GetAttackIPCount(sIPaddr), FrmMain.GetConnectCountOfIP(sIPaddr)]);
  end;
end;

procedure TFrmOnLineHum.RefOnlineHum();
var
  i: Integer;
  sIPaddr: string;
  ListItem: TListItem;
  nIndex: Integer;
  nSckHandle: Integer;
begin
  if FrmMain.ServerSocket.Active then begin
    nIndex := 0;
    ListViewOnLine.Items.Clear;
    for i := 0 to FrmMain.ServerSocket.Socket.ActiveConnections - 1 do begin
      sIPaddr := FrmMain.ServerSocket.Socket.Connections[i].RemoteAddress;
      nSckHandle := FrmMain.ServerSocket.Socket.Connections[i].SocketHandle;
      if sIPaddr <> '' then begin
        ListViewOnLine.Items.BeginUpdate;
        try
          ListItem := ListViewOnLine.Items.Add;
          ListItem.Caption := IntToStr(nIndex);
          ListItem.SubItems.Add(sIPaddr);
          ListItem.SubItems.Add(IntToStr(nSckHandle));
          ListItem.SubItems.Add(IntToStr(GetReceiveLength(nSckHandle)));
          ListItem.SubItems.Add(Format('%d/%d', [FrmMain.GetAttackIPCount(sIPaddr), FrmMain.GetConnectCountOfIP(sIPaddr)]));
          Inc(nIndex);
        finally
          ListViewOnLine.Items.EndUpdate;
        end;
      end;
    end;
  end;
end;

procedure TFrmOnLineHum.Open();
begin
  RefOnlineHum();
  ButtonAddTempList.Enabled := False;
  ButtonAddBlockList.Enabled := False;
  Caption := Caption + ' [' + IntToStr(ListViewOnLine.Items.Count) + ']';
  ShowModal;
end;

procedure TFrmOnLineHum.Timer1Timer(Sender: TObject);
begin
  RefReceiveLength();
end;

procedure TFrmOnLineHum.ButtonRefClick(Sender: TObject);
begin
  RefOnlineHum();
end;

procedure TFrmOnLineHum.ListViewOnLineClick(Sender: TObject);
var
  ListItem: TListItem;
begin
  try
    ListItem := ListViewOnLine.Selected;
    sSelIPaddr := ListItem.SubItems.Strings[0];
    ButtonKick.Enabled := True;
    ButtonAddTempList.Enabled := True;
    ButtonAddBlockList.Enabled := True;
  except
    sSelIPaddr := '';
    ButtonKick.Enabled := False;
    ButtonAddTempList.Enabled := False;
    ButtonAddBlockList.Enabled := False;
  end;
end;

procedure TFrmOnLineHum.ButtonKickClick(Sender: TObject);
begin
  if Application.MessageBox(PChar('是否确认将此连接断开?'),
    PChar('确认信息 - ' + sSelIPaddr), MB_OKCANCEL + MB_ICONQUESTION) <> IDOK then Exit;

  ButtonKick.Enabled := False;
  FrmMain.CloseConnect(sSelIPaddr);
  RefOnlineHum();
  ButtonKick.Enabled := True;
end;

procedure TFrmOnLineHum.ButtonAddTempListClick(Sender: TObject);
begin
  if Application.MessageBox(PChar('是否确认将此IP加入动态过滤列表中?加入过滤列表后,此IP建立的所有连接将被强行中断。'),
    PChar('确认信息 - ' + sSelIPaddr),
    MB_OKCANCEL + MB_ICONQUESTION
    ) <> IDOK then Exit;
  FrmMain.AddTempBlockIP(sSelIPaddr);
end;

procedure TFrmOnLineHum.ButtonAddBlockListClick(Sender: TObject);
begin
  if Application.MessageBox(PChar('是否确认将此IP加入永久过滤列表中?加入过滤列表后,此IP建立的所有连接将被强行中断。'),
    PChar('确认信息 - ' + sSelIPaddr),
    MB_OKCANCEL + MB_ICONQUESTION
    ) <> IDOK then Exit;
  FrmMain.AddBlockIP(sSelIPaddr);
end;

end.

⌨️ 快捷键说明

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