unit TypeUnit; interface uses Windows, Messages, Forms, IdTcpServer, TypeConfig; const SM_BASE = WM_USER + 200; SM_ClientCount = SM_BASE + 1; SM_Status = SM_BASE + 2; type TOperType = (otAdd, otDelete, otModify); {客户信息记录} TInfoRecd = record IP: string; User: Integer; Action: Integer; {0: Add 1: Delete -1: check} end; PInfoRecd = ^TInfoRecd; {线程信息记录} TThrdsRecd = record Thread: TIdPeerThread; IP : string; User : Integer; end; PThrdsRecd = ^TThrdsRecd; TLinkControl = class private FV0Count: Integer; FV1Count: Integer; FV2Count: Integer; FV0MaxLinks: Integer; FV1MaxLinks: Integer; FV2MaxLinks: Integer; procedure RefreshAppCount; public procedure AddCount(AType: Integer); procedure DeleteCount(AType: Integer); function CheckIsFull(AType: Integer): Boolean; procedure InitCount; property V0MaxLinks: Integer read FV0MaxLinks write FV0MaxLinks; property V1MaxLinks: Integer read FV1MaxLinks write FV1MaxLinks; property V2MaxLinks: Integer read FV2MaxLinks write FV2MaxLinks; end; implementation { TLinkControl } procedure TLinkControl.AddCount(AType: Integer); begin case AType of Flag_Version_0: InterlockedIncrement(FV0Count); end; RefreshAppCount; end; function TLinkControl.CheckIsFull(AType: Integer): Boolean; begin Result := True; case AType of Flag_Version_0: if FV0Count < FV0MaxLinks then Result := False; end; end; procedure TLinkControl.DeleteCount(AType: Integer); begin case AType of Flag_Version_0: if FV0Count > 0 then InterlockedDecrement(FV0Count); end; RefreshAppCount; end; procedure TLinkControl.InitCount; begin FV0Count := 0; RefreshAppCount; end; procedure TLinkControl.RefreshAppCount; var wpValue, lpValue: Integer; begin wpValue := FV0Count; wpValue := wpValue shl 16; wpValue := wpValue + FV1Count; lpValue := FV2Count; SendMessage(Application.MainForm.Handle, SM_ClientCount, wpValue, lpValue); end; end.