mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-03 13:30:55 +02:00
* Added small improvement to JSONRPCHandlermanager to ease creating descendents with customized behaviour:
moved creation of defs to virtual procedure. Uses a global classvar to determine default item type. * Implemented GetClassNames and GetMethodsOfClass * Added Clear. git-svn-id: trunk@28190 -
This commit is contained in:
parent
e65c4e13e0
commit
c3f24cc775
@ -240,6 +240,7 @@ Type
|
||||
Property ArgumentCount : Integer Read FArgumentCount Write FArgumentCount;
|
||||
Property ParamDefs : TJSONParamDefs Read GetParamDefs Write SetParamDefs;
|
||||
end;
|
||||
TJSONRPCHandlerDefClass = Class of TJSONRPCHandlerDef;
|
||||
|
||||
{ TJSONRPCHandlerDefs }
|
||||
|
||||
@ -261,6 +262,7 @@ Type
|
||||
FRegistering: Boolean;
|
||||
Protected
|
||||
procedure Initialize; virtual;
|
||||
procedure DoClear; virtual;
|
||||
// Handler support
|
||||
Procedure RemoveHandlerDef(Const Index : Integer); virtual; abstract;
|
||||
function AddHandlerDef(Const AClassName,AMethodName : TJSONStringType) : TJSONRPCHandlerDef; virtual; abstract;
|
||||
@ -279,6 +281,7 @@ Type
|
||||
Function GetHandler(Const AClassName,AMethodName : TJSONStringType; AOwner : TComponent; Out AContainer : TComponent): TCustomJSONRPCHandler;
|
||||
Procedure GetClassNames (List : TStrings); // Should be a stringlist of TJSONStringType
|
||||
Procedure GetMethodsOfClass(Const AClassName : TJSONStringType; List : TStrings); // Should be a stringlist of TJSONStringType
|
||||
Procedure Clear;
|
||||
// properties
|
||||
Property Registering : Boolean Read FRegistering;
|
||||
Property HandlerCount : Integer Read GetHandlerDefCount;
|
||||
@ -292,6 +295,8 @@ Type
|
||||
Private
|
||||
FHandlerDefs : TJSONRPCHandlerDefs;
|
||||
Protected
|
||||
procedure DoClear; override;
|
||||
Function CreateDefs : TJSONRPCHandlerDefs; virtual;
|
||||
Procedure RemoveHandlerDef(Const Index : Integer); override;
|
||||
function AddHandlerDef(Const AClassName,AMethodName : TJSONStringType) : TJSONRPCHandlerDef; override;
|
||||
function IndexOfHandlerDef(Const AClassName,AMethodName : TJSONStringType) : Integer; override;
|
||||
@ -329,10 +334,11 @@ Function CreateErrorForRequest(Const Req,Error : TJSONData) : TJSONData;
|
||||
|
||||
Function JSONRPCHandlerManager : TCustomJSONRPCHandlerManager;
|
||||
|
||||
// Class that will be created. Must be set before first call to JSONRPCHandlerManager.
|
||||
Var
|
||||
// Class that will be created. Must be set before first call to JSONRPCHandlerManager.
|
||||
JSONRPCHandlerManagerClass : TCustomJSONRPCHandlerManagerClass = TJSONRPCHandlerManager;
|
||||
|
||||
// Class of Defs that will be created by TJSONRPCHandlerManager. Must be set before first call to JSONRPCHandlerManager.
|
||||
DefaultJSONRPCHandlerDefClass : TJSONRPCHandlerDefClass = TJSONRPCHandlerDef;
|
||||
|
||||
Const
|
||||
// JSON RPC 2.0 error codes
|
||||
@ -1167,7 +1173,22 @@ begin
|
||||
// Do nothing
|
||||
end;
|
||||
|
||||
procedure TCustomJSONRPCHandlerManager.UnregisterHandler(const AClassName,
|
||||
procedure TCustomJSONRPCHandlerManager.DoClear;
|
||||
Var
|
||||
I : Integer;
|
||||
D : TJSONRPCHandlerDef;
|
||||
C,M : String;
|
||||
begin
|
||||
For I:=HandlerCount-1 downto 0 do
|
||||
begin
|
||||
D:=HandlerDefs[i];
|
||||
C:=D.HandlerClassName;
|
||||
M:=D.HandlerMethodName;
|
||||
UnregisterHandler(C,M);
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TCustomJSONRPCHandlerManager.UnregisterHandler(Const AClassName,
|
||||
AMethodName: TJSONStringType);
|
||||
|
||||
Var
|
||||
@ -1184,8 +1205,8 @@ begin
|
||||
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
||||
end;
|
||||
|
||||
procedure TCustomJSONRPCHandlerManager.RegisterDatamodule(
|
||||
const AClass: TDatamoduleClass; const AHandlerClassName: TJSONStringType);
|
||||
Procedure TCustomJSONRPCHandlerManager.RegisterDatamodule(
|
||||
Const AClass: TDatamoduleClass; Const AHandlerClassName: TJSONStringType);
|
||||
|
||||
Var
|
||||
DM : TDatamodule;
|
||||
@ -1228,19 +1249,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.RegisterHandler(
|
||||
const AMethodName: TJSONStringType;
|
||||
AClass: TCustomJSONRPCHandlerClass;
|
||||
AArgumentCount : Integer = 0): TJSONRPCHandlerDef;
|
||||
Function TCustomJSONRPCHandlerManager.RegisterHandler(
|
||||
Const AMethodName: TJSONStringType; AClass: TCustomJSONRPCHandlerClass;
|
||||
AArgumentCount: Integer): TJSONRPCHandlerDef;
|
||||
|
||||
begin
|
||||
Result:=RegisterHandler('',AMethodName,AClass,AArgumentCount);
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.RegisterHandler(
|
||||
const AClassName,AMethodName: String;
|
||||
AClass: TCustomJSONRPCHandlerClass;
|
||||
AArgumentCount : Integer = 0): TJSONRPCHandlerDef;
|
||||
Function TCustomJSONRPCHandlerManager.RegisterHandler(Const AClassName,
|
||||
AMethodName: TJSONStringType; AClass: TCustomJSONRPCHandlerClass;
|
||||
AArgumentCount: Integer): TJSONRPCHandlerDef;
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
@ -1264,7 +1283,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.FindHandlerDefByName(const AClassName,
|
||||
Function TCustomJSONRPCHandlerManager.FindHandlerDefByName(Const AClassName,
|
||||
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
||||
|
||||
Var
|
||||
@ -1278,7 +1297,7 @@ begin
|
||||
Result:=GetHandlerDef(I);
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.GetHandlerDefByName(const AClassName,
|
||||
Function TCustomJSONRPCHandlerManager.GetHandlerDefByName(Const AClassName,
|
||||
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
||||
begin
|
||||
Result:=FindHandlerDefByName(AClassName,AMethodName);
|
||||
@ -1289,8 +1308,8 @@ begin
|
||||
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.GetHandler(
|
||||
const ADef: TJSONRPCHandlerDef; AOwner: TComponent; out AContainer: TComponent
|
||||
Function TCustomJSONRPCHandlerManager.GetHandler(
|
||||
Const ADef: TJSONRPCHandlerDef; AOwner: TComponent; Out AContainer: TComponent
|
||||
): TCustomJSONRPCHandler;
|
||||
|
||||
Var
|
||||
@ -1304,8 +1323,8 @@ begin
|
||||
Result:=ADef.CreateInstance(O,AContainer);
|
||||
end;
|
||||
|
||||
function TCustomJSONRPCHandlerManager.GetHandler(const AClassName,
|
||||
AMethodName: TJSONStringType; AOwner: TComponent; out AContainer: TComponent
|
||||
Function TCustomJSONRPCHandlerManager.GetHandler(Const AClassName,
|
||||
AMethodName: TJSONStringType; AOwner: TComponent; Out AContainer: TComponent
|
||||
): TCustomJSONRPCHandler;
|
||||
|
||||
Var
|
||||
@ -1316,31 +1335,65 @@ begin
|
||||
Result:=GetHandler(D,AOwner,AContainer);
|
||||
end;
|
||||
|
||||
procedure TCustomJSONRPCHandlerManager.GetClassNames(List: TStrings);
|
||||
begin
|
||||
Procedure TCustomJSONRPCHandlerManager.GetClassNames(List: TStrings);
|
||||
|
||||
Var
|
||||
D : TJSONRPCHandlerDef;
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
For I:=0 to HandlerCount-1 do
|
||||
begin
|
||||
D:=HandlerDefs[i];
|
||||
If List.IndexOf(D.HandlerClassName)=-1 then
|
||||
List.Add(D.HandlerClassName);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomJSONRPCHandlerManager.GetMethodsOfClass(
|
||||
const AClassName: TJSONStringType; List: TStrings);
|
||||
begin
|
||||
Procedure TCustomJSONRPCHandlerManager.GetMethodsOfClass(
|
||||
Const AClassName: TJSONStringType; List: TStrings);
|
||||
Var
|
||||
D : TJSONRPCHandlerDef;
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
For I:=0 to HandlerCount-1 do
|
||||
begin
|
||||
D:=HandlerDefs[i];
|
||||
If AClassName=D.HandlerClassName then
|
||||
List.Add(D.HandlerMethodName);
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TCustomJSONRPCHandlerManager.Clear;
|
||||
begin
|
||||
DoClear;
|
||||
end;
|
||||
|
||||
{ TJSONRPCHandlerManager }
|
||||
|
||||
procedure TJSONRPCHandlerManager.RemoveHandlerDef(const Index: Integer);
|
||||
procedure TJSONRPCHandlerManager.DoClear;
|
||||
begin
|
||||
FHandlerDefs.Clear;
|
||||
end;
|
||||
|
||||
Function TJSONRPCHandlerManager.CreateDefs: TJSONRPCHandlerDefs;
|
||||
begin
|
||||
Result:=TJSONRPCHandlerDefs.Create(DefaultJSONRPCHandlerDefClass);
|
||||
end;
|
||||
|
||||
Procedure TJSONRPCHandlerManager.RemoveHandlerDef(Const Index: Integer);
|
||||
begin
|
||||
FHandlerDefs.Delete(Index);
|
||||
end;
|
||||
|
||||
function TJSONRPCHandlerManager.AddHandlerDef(const AClassName,
|
||||
function TJSONRPCHandlerManager.AddHandlerDef(Const AClassName,
|
||||
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
||||
begin
|
||||
Result:=FHandlerDefs.AddHandler(AClassName,AMethodName);
|
||||
end;
|
||||
|
||||
function TJSONRPCHandlerManager.IndexOfHandlerDef(const AClassName,
|
||||
function TJSONRPCHandlerManager.IndexOfHandlerDef(Const AClassName,
|
||||
AMethodName: TJSONStringType): Integer;
|
||||
begin
|
||||
Result:=FHandlerDefs.IndexOfHandler(AClassName,AMethodName);
|
||||
@ -1357,13 +1410,13 @@ begin
|
||||
Result:=FHandlerDefs.Count;
|
||||
end;
|
||||
|
||||
constructor TJSONRPCHandlerManager.Create(AOwner: TComponent);
|
||||
Constructor TJSONRPCHandlerManager.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FHandlerDefs:=TJSONRPCHandlerDefs.Create(TJSONRPCHandlerDef);
|
||||
FHandlerDefs:=CreateDefs;
|
||||
end;
|
||||
|
||||
destructor TJSONRPCHandlerManager.Destroy;
|
||||
Destructor TJSONRPCHandlerManager.Destroy;
|
||||
begin
|
||||
FreeAndNil(FHandlerDefs);
|
||||
inherited Destroy;
|
||||
|
Loading…
Reference in New Issue
Block a user