📄 uclientthread.~pas
字号:
unit UClientThread;
interface
uses SysUtils, Classes,IdTCPServer;
TYPE
TClientInfo = Class(TCollectionItem)
private
FPeerThread: TIdPeerThread;
FPeerIP:string;
FPeerUDPPort:string;
FPackageSize:integer;
FSendCountPerSecond:integer;
FLoginTIme:TDateTime;
FWorkThread:TThread;
FState:string;
public
constructor Create(ACollection: TCollection); override;
destructor Destroy; override;
procedure Init(APeerThread:TIdPeerThread;APeerIP:string;
APeerUDPPort:string;APackageSize:integer;
ASendCountPerSecond:integer);
procedure Start;
procedure Pause;
procedure Continue;
procedure Stop;
published
property PeerThread: TIdPeerThread read FPeerThread;
property PeerIP:string read FPeerIP write FPeerIP;
property PeerUDPPort:string read FPeerUDPPort write FPeerUDPPort;
property PackageSize:integer read FPackageSize write FPackageSize;
property SendCountPerSecond:integer read FSendCountPerSecond write FSendCountPerSecond;
property LoginTIme:TDateTime read FLoginTIme write FLoginTIme;
property WorkThread:TThread read FWorkThread write FWorkThread;
end;
TClientList = class(TOwnedCollection)
protected
FServer: TIdTCPServer;
//
function GetItem(AIndex: Integer): TClientInfo;
procedure SetItem(AIndex: Integer; const AValue: TClientInfo);
public
function Add(APeerThread:TIdPeerThread;APeerIP:string;
APeerUDPPort:string;APackageSize:integer;ASendCountPerSecond:integer): TClientInfo;
constructor Create(AServer: TIdTCPServer); reintroduce;
//
property Items[AIndex: Integer]: TClientInfo read GetItem write SetItem;
property Server: TIdTCPServer read FServer;
end;
implementation
//================================================================================
{ TClientInfo }
constructor TClientInfo.Create(ACollection: TCollection);
begin
inherited Create(ACollection);
FPeerThread:=nil;
FPeerIP:='';
FPeerUDPPort:='';
FPackageSize:=0;
FSendCountPerSecond:=0;
FLoginTIme:=TDateTime(0);
FWorkThread:=nil;
FState:='登陆';
end;
destructor TClientInfo.Destroy;
begin
if Assigned(FWorkThread) then
begin
FWorkThread.Terminate;
FreeAndNil(FWorkThread);
end;
inherited;
end;
procedure TClientInfo.Init(APeerThread: TIdPeerThread; APeerIP,
APeerUDPPort: string; APackageSize, ASendCountPerSecond: integer);
begin
FPeerThread:=APeerThread;
FPeerIP:=APeerIP;
FPeerUDPPort:=APeerUDPPort;
FPackageSize:=APackageSize;
FSendCountPerSecond:=ASendCountPerSecond;
FLoginTIme:=now;
FWorkThread:=nil;
FState:='登陆';
end;
procedure TClientInfo.Start;
begin
if not Assigned(FWorkThread) then
begin
//Create the thread
end;
FWorkThread.Resume;
end;
procedure TClientInfo.Pause;
begin
if Assigned(FWorkThread) and (not FWorkThread.Suspended) then
FWorkThread.Suspend;
end;
procedure TClientInfo.Continue;
begin
if Assigned(FWorkThread) and (FWorkThread.Suspended) then
FWorkThread.Resume;
end;
procedure TClientInfo.Stop;
begin
if not Assigned(FWorkThread) then exit;
FWorkThread.Terminate;
if Assigned(FWorkThread) and (FWorkThread.Suspended) then
FWorkThread.Resume;
end;
//====================================================================================
{ TClientList }
function TClientList.Add(APeerThread: TIdPeerThread; APeerIP,
APeerUDPPort: string; APackageSize,ASendCountPerSecond: integer): TClientInfo;
begin
Result:=TClientInfo(inherited Add);
Result.PeerThread:=APeerThread;
Result.
Result:=TClientInfo.Create(self,APeerThread,APeerIP,APeerUDPPort,APackageSize,ASendCountPerSecond);
Added(Result);
end;
constructor TClientList.Create(AServer: TIdTCPServer);
begin
end;
function TClientList.GetItem(AIndex: Integer): TClientInfo;
begin
end;
procedure TClientList.SetItem(AIndex: Integer; const AValue: TClientInfo);
begin
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -