logintype.pas
来自「FIR引擎最新源码+注册」· PAS 代码 · 共 202 行
PAS
202 行
unit LoginType;
interface
uses
Windows, Messages, Classes, SysUtils, JSocket;
type
TIpSockaddr = record
sIPaddr: string[15];
nIPCount: Integer;
nAttackCount: Integer;
dwConnctCheckTick: LongWord;
end;
pTIpSockaddr = ^TIpSockaddr;
TIPRangeInfo = record
sIPaddr: string[15];
btSameLevel: Byte; //相似程度
end;
pTIPRangeInfo = ^TIPRangeInfo;
TIPRange = record
btIPaddr: Byte;
IpSockaddrList: TStringList;
end;
pTIPRange = ^TIPRange;
TUserSession = record
Socket: TCustomWinSocket;
SocketHandle: Integer;
sRemoteIPaddr: string[15];
nSendMsgLen: Integer;
nReviceMsgLen: Integer;
nCheckSendLength: Integer;
boSendAvailable: Boolean;
boSendCheck: Boolean;
bo0C: Boolean;
dwSendLockTimeOut: LongWord;
dwUserTimeOutTick: LongWord;
dwConnctCheckTick: LongWord;
dwReceiveTick: LongWord;
dwReceiveTimeTick: LongWord;
boReceiveAvailable: Boolean;
MsgList: TStringList;
end;
pTUserSession = ^TUserSession;
TConfig = record
GateName: string;
TitleName: string;
ServerPort: Integer;
ServerAddr: string;
GatePort: Integer;
GateAddr: string;
nMaxConnOfIPaddr: Integer;
dwKeepConnectTimeOut: LongWord;
nConnctCheckTime: Integer;
boMinimize: Boolean;
end;
TGList = class(TList)
private
GLock: TRTLCriticalSection;
public
constructor Create;
destructor Destroy; override;
procedure Lock;
procedure UnLock;
end;
{=================================TGStringList================================}
TGStringList = class(TStringList)
private
CriticalSection: TRTLCriticalSection;
public
constructor Create;
destructor Destroy; override;
procedure Lock;
procedure UnLock;
end;
TSStringList = class(TGStringList)
public
procedure QuickSort(Order: Boolean);
end;
implementation
procedure TSStringList.QuickSort(Order: Boolean); //速度更快的排行
procedure QuickSortStrListCase(List: TStringList; l, r: Integer);
var
I, J: Integer;
p: string;
begin
if List.Count <= 0 then Exit;
repeat
I := l;
J := r;
p := List[(l + r) shr 1];
repeat
if Order then begin //升序
while CompareStr(List[I], p) < 0 do Inc(I);
while CompareStr(List[J], p) > 0 do Dec(J);
end else begin //降序
while CompareStr(p, List[I]) < 0 do Inc(I);
while CompareStr(p, List[J]) > 0 do Dec(J);
end;
if I <= J then begin
List.Exchange(I, J);
Inc(I);
Dec(J);
end;
until I > J;
if l < J then QuickSortStrListCase(List, l, J);
l := I;
until I >= r;
end;
procedure AddList(TempList: TStringList; slen: string; s: string; AObject: TObject);
var
I: Integer;
List: TStringList;
boFound: Boolean;
begin
boFound := False;
for I := 0 to TempList.Count - 1 do begin
if CompareText(TempList.Strings[I], slen) = 0 then begin
List := TStringList(TempList.Objects[I]);
List.AddObject(s, AObject);
boFound := True;
Break;
end;
end;
if not boFound then begin
List := TStringList.Create;
List.AddObject(s, AObject);
TempList.AddObject(slen, List);
end;
end;
var
TempList: TStringList;
List: TStringList;
I: Integer;
nLen: Integer;
begin
TempList := TStringList.Create;
for I := 0 to Self.Count - 1 do begin
nLen := Length(Self.Strings[I]);
AddList(TempList, IntToStr(nLen), Self.Strings[I], Self.Objects[I]);
end;
QuickSortStrListCase(TempList, 0, TempList.Count - 1);
Self.Clear;
for I := 0 to TempList.Count - 1 do begin
List := TStringList(TempList.Objects[I]);
QuickSortStrListCase(List, 0, List.Count - 1);
Self.AddStrings(List);
List.Free;
end;
TempList.Free;
end;
{ TGStringList }
constructor TGStringList.Create;
begin
inherited;
InitializeCriticalSection(CriticalSection);
end;
destructor TGStringList.Destroy;
begin
DeleteCriticalSection(CriticalSection);
inherited;
end;
procedure TGStringList.Lock;
begin
EnterCriticalSection(CriticalSection);
end;
procedure TGStringList.UnLock;
begin
LeaveCriticalSection(CriticalSection);
end;
constructor TGList.Create;
begin
inherited Create;
InitializeCriticalSection(GLock);
end;
destructor TGList.Destroy;
begin
DeleteCriticalSection(GLock);
inherited;
end;
procedure TGList.Lock;
begin
EnterCriticalSection(GLock);
end;
procedure TGList.UnLock;
begin
LeaveCriticalSection(GLock);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?