123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- unit ClientInfoService;
- interface
- uses
- SysUtils, Classes, DB, DBClient, TypeUnit, TypeConfig;
- type
- TClientInfoDM = class(TDataModule)
- cdsClientInfo: TClientDataSet;
- cdsClientInfoIP: TWideStringField;
- cdsClientInfoLinkTime: TDateTimeField;
- cdsClientInfoFlag: TIntegerField;
- cdsClientInfoAppType: TWideStringField;
- cdsCloneClientInfo: TClientDataSet;
- cdsCloneClientInfoIP: TWideStringField;
- cdsCloneClientInfoFlag: TIntegerField;
- cdsCloneClientInfoLinkTime: TDateTimeField;
- cdsModify: TClientDataSet;
- cdsModifyLinkTime: TDateTimeField;
- cdsModifyIP: TWideStringField;
- cdsModifyFlag: TIntegerField;
- procedure DataModuleCreate(Sender: TObject);
- private
- function GetAppType(const AType: Integer): string;
- procedure ClearRecords;
- function DeleteRecord(const AIP: string; AUser: Integer): Boolean;
- procedure ModifyRecord(const AIP: string; AUser: Integer);
- function GetCurIP: string;
- function GetCurUser: Integer;
- public
- procedure DeleteCurRecord;
- procedure HandlerNotify(AType: TOperType; APointer: Pointer);
- property CurIP: string read GetCurIP;
- property CurUser: Integer read GetCurUser;
- end;
- implementation
- {$R *.dfm}
- { TClientInfoDM }
- procedure TClientInfoDM.HandlerNotify(AType: TOperType;
- APointer: Pointer);
- var
- infoRec: PInfoRecd;
- begin
- if Assigned(APointer) then
- begin
- infoRec := APointer;
- if AType = otAdd then
- begin
- cdsClientInfo.Insert;
- cdsClientInfoIP.Value := infoRec.IP;
- cdsClientInfoLinkTime.Value := Now;
- cdsClientInfoFlag.Value := infoRec.User;
- cdsClientInfoAppType.Value := GetAppType(infoRec.User);
- cdsClientInfo.Post;
- end
- else if AType = otModify then
- begin
- ModifyRecord(infoRec.IP, infoRec.User);
- end
- else
- begin
- DeleteRecord(infoRec.IP, infoRec.User);
- end;
- end
- else
- ClearRecords;
- end;
- procedure TClientInfoDM.DataModuleCreate(Sender: TObject);
- begin
- cdsClientInfo.Active := True;
- cdsClientInfo.IndexFieldNames := 'Flag';
- cdsCloneClientInfo.CloneCursor(cdsClientInfo, True);
- cdsCloneClientInfo.IndexFieldNames := 'Flag';
- cdsModify.CloneCursor(cdsClientInfo, True);
- cdsModify.IndexFieldNames := 'Flag';
- end;
- function TClientInfoDM.GetAppType(const AType: Integer): string;
- begin
- Result := CfgManager.GetAppType(AType);
- end;
- function TClientInfoDM.DeleteRecord(const AIP: string;
- AUser: Integer): Boolean;
- begin
- cdsCloneClientInfo.SetRange([AUser], [AUser]);
- try
- while not cdsCloneClientInfo.Eof do
- begin
- if SameText(cdsCloneClientInfoIP.AsString, AIP) then
- begin
- cdsCloneClientInfo.Delete;
- Break;
- end;
- cdsCloneClientInfo.Next;
- end;
- finally
- cdsCloneClientInfo.CancelRange;
- end;
- end;
- procedure TClientInfoDM.ClearRecords;
- begin
- cdsClientInfo.EmptyDataSet;
- end;
- procedure TClientInfoDM.ModifyRecord(const AIP: string; AUser: Integer);
- begin
- cdsModify.SetRange([AUser], [AUser]);
- try
- while not cdsModify.Eof do
- begin
- if SameText(cdsModifyIP.AsString, AIP) then
- begin
- cdsModify.Edit;
- cdsModifyLinkTime.Value := Now;
- cdsModify.Post;
- Break;
- end;
- cdsModify.Next;
- end;
- finally
- cdsModify.CancelRange;
- end;
- end;
- procedure TClientInfoDM.DeleteCurRecord;
- begin
- cdsClientInfo.Delete;
- end;
- function TClientInfoDM.GetCurIP: string;
- begin
- Result := cdsClientInfoIP.Value;
- end;
- function TClientInfoDM.GetCurUser: Integer;
- begin
- Result := cdsClientInfoFlag.Value;
- end;
- end.
|