📄 dxdatabaseservercore.pas
字号:
Procedure SetOnCommandFINDFIRST(value:DatabaseTBasicEvent);
Procedure SetOnCommandFINDLAST(value:DatabaseTBasicEvent);
Procedure SetOnCommandFINDNEXT(value:DatabaseTBasicEvent);
Procedure SetOnCommandFINDPRIOR(value:DatabaseTBasicEvent);
Procedure SetOnCommandFINDFIELD(value:DatabaseTSimpleEvent);
Procedure SetOnCommandGETFIELDLIST(value:DatabaseTBasicEvent);
Procedure SetOnCommandLOCATECASEINSENSITIVE(value:DatabaseTSimpleEvent);
Procedure SetOnCommandLOCATEPARTIALKEY(value:DatabaseTSimpleEvent);
Procedure SetOnCommandLOCATENOOPTIONS(value:DatabaseTBasicEvent);
Procedure SetOnCommandLOCATEBOTHOPTIONS(value:DatabaseTBasicEvent);
Procedure SetOnCommandLOCATE(value:DatabaseTComplexEvent);
Procedure SetOnCommandAPPEND(value:DatabaseTBasicEvent);
Procedure SetOnCommandINSERT(value:DatabaseTBasicEvent);
Procedure SetOnCommandEDIT(value:DatabaseTBasicEvent);
Procedure SetOnCommandDELETE(value:DatabaseTBasicEvent);
Procedure SetOnCommandPOST(value:DatabaseTBasicEvent);
Procedure SetOnCommandCANCEL(value:DatabaseTBasicEvent);
Procedure SetOnCommandREFRESH(value:DatabaseTBasicEvent);
Procedure SetOnCommandFIELDBYNAME(value:DatabaseTComplexEvent);
public
constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF}
destructor Destroy; override;
procedure ProcessSession(ClientThread: TDXClientThread);
Procedure AddSimpleEvent(Command:String;EventProc:DatabaseTSimpleEvent);
Procedure AddBasicEvent(Command:String;EventProc:DatabaseTBasicEvent);
Procedure AddComplexEvent(Command:String;EventProc:DatabaseTComplexEvent);
published
property OnCommandUSER: DatabaseTSimpleEvent read fOnCommandUSER
write SetOnCommandUSER;
property OnCommandPASS: DatabaseTSimpleEvent read fOnCommandPASS
write SetOnCommandPASS;
property OnCommandAUTH: DatabaseTComplexEvent read fOnCommandAUTH
write SetOnCommandAUTH;
property OnCommandSETACTIVE: DatabaseTSimpleEvent read fOnCommandSETACTIVE
write SetOnCommandSETACTIVE;
property OnCommandISBOF: DatabaseTBasicEvent read fOnCommandISBOF
write SetOnCommandISBOF;
property OnCommandISEOF: DatabaseTBasicEvent read fOnCommandISEOF
write SetOnCommandISEOF;
property OnCommandISEMPTY: DatabaseTBasicEvent read fOnCommandISEMPTY
write SetOnCommandISEMPTY;
property OnCommandCANMODIFY: DatabaseTBasicEvent read fOnCommandCANMODIFY
write SetOnCommandCANMODIFY;
property OnCommandFIELDCOUNT: DatabaseTBasicEvent read fOnCommandFIELDCOUNT
write SetOnCommandFIELDCOUNT;
property OnCommandRECORDCOUNT: DatabaseTBasicEvent read fOnCommandRECORDCOUNT
write SetOnCommandRECORDCOUNT;
property OnCommandRECORDSIZE: DatabaseTBasicEvent read fOnCommandRECORDSIZE
write SetOnCommandRECORDSIZE;
property OnCommandFOUND: DatabaseTBasicEvent read fOnCommandFOUND
write SetOnCommandFOUND;
property OnCommandMODIFIED: DatabaseTBasicEvent read fOnCommandMODIFIED
write SetOnCommandMODIFIED;
property OnCommandCREATEDATASET: DatabaseTSimpleEvent read fOnCommandCREATEDATASET
write SetOnCommandCREATEDATASET;
property OnCommandDISPOSEDATASET: DatabaseTSimpleEvent read fOnCommandDISPOSEDATASET
write SetOnCommandDISPOSEDATASET;
property OnCommandOPEN: DatabaseTBasicEvent read fOnCommandOPEN
write SetOnCommandOPEN;
property OnCommandCLOSE: DatabaseTBasicEvent read fOnCommandCLOSE
write SetOnCommandCLOSE;
property OnCommandFIRST: DatabaseTBasicEvent read fOnCommandFIRST
write SetOnCommandFIRST;
property OnCommandNEXT: DatabaseTBasicEvent read fOnCommandNEXT
write SetOnCommandNEXT;
property OnCommandPRIOR: DatabaseTBasicEvent read fOnCommandPRIOR
write SetOnCommandPRIOR;
property OnCommandLAST: DatabaseTBasicEvent read fOnCommandLAST
write SetOnCommandLAST;
property OnCommandMOVEBY: DatabaseTSimpleEvent read fOnCommandMOVEBY
write SetOnCommandMOVEBY;
property OnCommandFINDFIRST: DatabaseTBasicEvent read fOnCommandFINDFIRST
write SetOnCommandFINDFIRST;
property OnCommandFINDLAST: DatabaseTBasicEvent read fOnCommandFINDLAST
write SetOnCommandFINDLAST;
property OnCommandFINDNEXT: DatabaseTBasicEvent read fOnCommandFINDNEXT
write SetOnCommandFINDNEXT;
property OnCommandFINDPRIOR: DatabaseTBasicEvent read fOnCommandFINDPRIOR
write SetOnCommandFINDPRIOR;
property OnCommandFINDFIELD: DatabaseTSimpleEvent read fOnCommandFINDFIELD
write SetOnCommandFINDFIELD;
property OnCommandGETFIELDLIST: DatabaseTBasicEvent read fOnCommandGETFIELDLIST
write SetOnCommandGETFIELDLIST;
property OnCommandLOCATECaseInsensitive: DatabaseTSimpleEvent read fOnCommandLOCATECaseInsensitive
write SetOnCommandLOCATECaseInsensitive;
property OnCommandLOCATEPartialKey: DatabaseTSimpleEvent read fOnCommandLOCATEPartialKey
write SetOnCommandLOCATEPartialKey;
property OnCommandLOCATENoOptions: DatabaseTBasicEvent read fOnCommandLOCATENoOptions
write SetOnCommandLOCATENoOptions;
property OnCommandLOCATEBothOptions: DatabaseTBasicEvent read fOnCommandLOCATEBothOptions
write SetOnCommandLOCATEBothOptions;
property OnCommandLOCATE: DatabaseTComplexEvent read fOnCommandLOCATE
write SetOnCommandLOCATE;
property OnCommandAPPEND: DatabaseTBasicEvent read fOnCommandAPPEND
write SetOnCommandAPPEND;
property OnCommandINSERT: DatabaseTBasicEvent read fOnCommandINSERT
write SetOnCommandINSERT;
property OnCommandEDIT: DatabaseTBasicEvent read fOnCommandEDIT
write SetOnCommandEDIT;
property OnCommandDELETE: DatabaseTBasicEvent read fOnCommandDELETE
write SetOnCommandDELETE;
property OnCommandPOST: DatabaseTBasicEvent read fOnCommandPOST
write SetOnCommandPOST;
property OnCommandCANCEL: DatabaseTBasicEvent read fOnCommandCANCEL
write SetOnCommandCANCEL;
property OnCommandREFRESH: DatabaseTBasicEvent read fOnCommandREFRESH
write SetOnCommandREFRESH;
property OnCommandFIELDBYNAME: DatabaseTComplexEvent read fOnCommandFIELDBYNAME
write SetOnCommandFIELDBYNAME;
property OnCommandOther: DatabaseTOtherEvent read fOnCommandOther
write fOnCommandOther;
end;
implementation
Uses
DXString,
DXSock;
Type
PDatabaseSimpleEvent=^TDatabaseSimpleEvent;
TDatabaseSimpleEvent=record
Tag:Integer;
Command:String;
EventProcedure:DatabaseTSimpleEvent;
End;
PDatabaseBasicEvent=^TDatabaseBasicEvent;
TDatabaseBasicEvent=record
Tag:Integer;
Command:String;
EventProcedure:DatabaseTBasicEvent;
End;
PDatabaseComplexEvent=^TDatabaseComplexEvent;
TDatabaseComplexEvent=record
Tag:Integer;
Command:String;
EventProcedure:DatabaseTComplexEvent;
End;
constructor TDXDatabaseServerCore.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
ServerPort:=5335;
ProtocolToBind:=wpTCPOnly; // !!!! no UDP !!!!
end;
destructor TDXDatabaseServerCore.Destroy;
Var
PSimpleEvent:PDatabaseSimpleEvent;
PBasicEvent:PDatabaseBasicEvent;
PComplexEvent:PDatabaseComplexEvent;
begin
If Assigned(fEventArray) then Begin
While fEventArray.Count>0 do Begin
Case PDatabaseSimpleEvent(fEventArray[0]).Tag of
1:Begin
PSimpleEvent:=fEventArray[0];
Dispose(PSimpleEvent);
End;
2:Begin
PBasicEvent:=fEventArray[0];
Dispose(PBasicEvent);
End;
3:Begin
PComplexEvent:=fEventArray[0];
Dispose(PComplexEvent);
End;
End;
fEventArray.Delete(0);
End;
End;
inherited Destroy;
end;
Procedure TDXDatabaseServerCore.AddSimpleEvent(Command:String;EventProc:DatabaseTSimpleEvent);
Var
PSimpleEvent:PDatabaseSimpleEvent;
Loop:Integer;
Begin
Command:=Uppercase(Command);
Loop:=0;
While Loop<fEventArray.Count do Begin
If PDatabaseSimpleEvent(fEventArray[Loop]).Command=Command then Begin
PDatabaseSimpleEvent(fEventArray[Loop]).EventProcedure:=EventProc;
Exit;
End
Else Inc(Loop);
End;
New(PSimpleEvent);
PSimpleEvent.Tag:=1; // Denotes Event in fEventArray is a TSimpleEvent!
PSimpleEvent.Command:=Command;
PSimpleEvent.EventProcedure:=EventProc;
fEventArray.Add(PSimpleEvent);
End;
Procedure TDXDatabaseServerCore.AddBasicEvent(Command:String;EventProc:DatabaseTBasicEvent);
Var
PBasicEvent:PDatabaseBasicEvent;
Loop:Integer;
Begin
Command:=Uppercase(Command);
Loop:=0;
While Loop<fEventArray.Count do Begin
If PDatabaseBasicEvent(fEventArray[Loop]).Command=Command then Begin
PDatabaseBasicEvent(fEventArray[Loop]).EventProcedure:=EventProc;
Exit;
End
Else Inc(Loop);
End;
New(PBasicEvent);
PBasicEvent.Tag:=2; // Denotes Event in fEventArray is a TBasicEvent!
PBasicEvent.Command:=Command;
PBasicEvent.EventProcedure:=EventProc;
fEventArray.Add(PBasicEvent);
End;
Procedure TDXDatabaseServerCore.AddComplexEvent(Command:String;EventProc:DatabaseTComplexEvent);
Var
PComplexEvent:PDatabaseComplexEvent;
Loop:Integer;
Begin
Command:=Uppercase(Command);
Loop:=0;
While Loop<fEventArray.Count do Begin
If PDatabaseComplexEvent(fEventArray[Loop]).Command=Command then Begin
PDatabaseComplexEvent(fEventArray[Loop]).EventProcedure:=EventProc;
Exit;
End
Else Inc(Loop);
End;
New(PComplexEvent);
PComplexEvent.Tag:=2; // Denotes Event in fEventArray is a TComplexEvent!
PComplexEvent.Command:=Command;
PComplexEvent.EventProcedure:=EventProc;
fEventArray.Add(PComplexEvent);
End;
Procedure TDXDatabaseServerCore.SetOnCommandUSER(value:DatabaseTSimpleEvent);
Begin
fOnCommandUSER:=Value;
AddSimpleEvent('USER',Value);
End;
Procedure TDXDatabaseServerCore.SetOnCommandPASS(value:DatabaseTSimpleEvent);
Begin
fOnCommandPASS:=Value;
AddSimpleEvent('PASS',Value);
End;
Procedure TDXDatabaseServerCore.SetOnCommandAUTH(value:DatabaseTComplexEvent);
Begin
fOnCommandAUTH:=Value;
AddComplexEvent('AUTH',Value);
End;
Procedure TDXDatabaseServerCore.SetOnCommandSETACTIVE(value:DatabaseTSimpleEvent);
Begin
fOnCommandSETACTIVE:=Value;
AddSimpleEvent('SETACTIVE',Value);
End;
Procedure TDXDatabaseServerCore.SetOnCommandISBOF(value:DatabaseTBasicEvent);
Begin
fOnCommandISBOF:=Value;
AddBasicEvent('ISBOF',Value);
End;
Procedure TDXDatabaseServerCore.SetOnCommandISEOF(value:DatabaseTBasicEvent);
Begin
fOnCommandISEOF:=Value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -