|
@@ -240,6 +240,7 @@ Type
|
|
Property ArgumentCount : Integer Read FArgumentCount Write FArgumentCount;
|
|
Property ArgumentCount : Integer Read FArgumentCount Write FArgumentCount;
|
|
Property ParamDefs : TJSONParamDefs Read GetParamDefs Write SetParamDefs;
|
|
Property ParamDefs : TJSONParamDefs Read GetParamDefs Write SetParamDefs;
|
|
end;
|
|
end;
|
|
|
|
+ TJSONRPCHandlerDefClass = Class of TJSONRPCHandlerDef;
|
|
|
|
|
|
{ TJSONRPCHandlerDefs }
|
|
{ TJSONRPCHandlerDefs }
|
|
|
|
|
|
@@ -261,6 +262,7 @@ Type
|
|
FRegistering: Boolean;
|
|
FRegistering: Boolean;
|
|
Protected
|
|
Protected
|
|
procedure Initialize; virtual;
|
|
procedure Initialize; virtual;
|
|
|
|
+ procedure DoClear; virtual;
|
|
// Handler support
|
|
// Handler support
|
|
Procedure RemoveHandlerDef(Const Index : Integer); virtual; abstract;
|
|
Procedure RemoveHandlerDef(Const Index : Integer); virtual; abstract;
|
|
function AddHandlerDef(Const AClassName,AMethodName : TJSONStringType) : TJSONRPCHandlerDef; 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;
|
|
Function GetHandler(Const AClassName,AMethodName : TJSONStringType; AOwner : TComponent; Out AContainer : TComponent): TCustomJSONRPCHandler;
|
|
Procedure GetClassNames (List : TStrings); // Should be a stringlist of TJSONStringType
|
|
Procedure GetClassNames (List : TStrings); // Should be a stringlist of TJSONStringType
|
|
Procedure GetMethodsOfClass(Const AClassName : TJSONStringType; List : TStrings); // Should be a stringlist of TJSONStringType
|
|
Procedure GetMethodsOfClass(Const AClassName : TJSONStringType; List : TStrings); // Should be a stringlist of TJSONStringType
|
|
|
|
+ Procedure Clear;
|
|
// properties
|
|
// properties
|
|
Property Registering : Boolean Read FRegistering;
|
|
Property Registering : Boolean Read FRegistering;
|
|
Property HandlerCount : Integer Read GetHandlerDefCount;
|
|
Property HandlerCount : Integer Read GetHandlerDefCount;
|
|
@@ -292,6 +295,8 @@ Type
|
|
Private
|
|
Private
|
|
FHandlerDefs : TJSONRPCHandlerDefs;
|
|
FHandlerDefs : TJSONRPCHandlerDefs;
|
|
Protected
|
|
Protected
|
|
|
|
+ procedure DoClear; override;
|
|
|
|
+ Function CreateDefs : TJSONRPCHandlerDefs; virtual;
|
|
Procedure RemoveHandlerDef(Const Index : Integer); override;
|
|
Procedure RemoveHandlerDef(Const Index : Integer); override;
|
|
function AddHandlerDef(Const AClassName,AMethodName : TJSONStringType) : TJSONRPCHandlerDef; override;
|
|
function AddHandlerDef(Const AClassName,AMethodName : TJSONStringType) : TJSONRPCHandlerDef; override;
|
|
function IndexOfHandlerDef(Const AClassName,AMethodName : TJSONStringType) : Integer; override;
|
|
function IndexOfHandlerDef(Const AClassName,AMethodName : TJSONStringType) : Integer; override;
|
|
@@ -329,10 +334,11 @@ Function CreateErrorForRequest(Const Req,Error : TJSONData) : TJSONData;
|
|
|
|
|
|
Function JSONRPCHandlerManager : TCustomJSONRPCHandlerManager;
|
|
Function JSONRPCHandlerManager : TCustomJSONRPCHandlerManager;
|
|
|
|
|
|
-// Class that will be created. Must be set before first call to JSONRPCHandlerManager.
|
|
|
|
Var
|
|
Var
|
|
|
|
+ // Class that will be created. Must be set before first call to JSONRPCHandlerManager.
|
|
JSONRPCHandlerManagerClass : TCustomJSONRPCHandlerManagerClass = TJSONRPCHandlerManager;
|
|
JSONRPCHandlerManagerClass : TCustomJSONRPCHandlerManagerClass = TJSONRPCHandlerManager;
|
|
-
|
|
|
|
|
|
+ // Class of Defs that will be created by TJSONRPCHandlerManager. Must be set before first call to JSONRPCHandlerManager.
|
|
|
|
+ DefaultJSONRPCHandlerDefClass : TJSONRPCHandlerDefClass = TJSONRPCHandlerDef;
|
|
|
|
|
|
Const
|
|
Const
|
|
// JSON RPC 2.0 error codes
|
|
// JSON RPC 2.0 error codes
|
|
@@ -1167,7 +1173,22 @@ begin
|
|
// Do nothing
|
|
// Do nothing
|
|
end;
|
|
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);
|
|
AMethodName: TJSONStringType);
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -1184,8 +1205,8 @@ begin
|
|
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
|
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TCustomJSONRPCHandlerManager.RegisterDatamodule(
|
|
|
|
- const AClass: TDatamoduleClass; const AHandlerClassName: TJSONStringType);
|
|
|
|
|
|
+Procedure TCustomJSONRPCHandlerManager.RegisterDatamodule(
|
|
|
|
+ Const AClass: TDatamoduleClass; Const AHandlerClassName: TJSONStringType);
|
|
|
|
|
|
Var
|
|
Var
|
|
DM : TDatamodule;
|
|
DM : TDatamodule;
|
|
@@ -1228,19 +1249,17 @@ begin
|
|
end;
|
|
end;
|
|
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
|
|
begin
|
|
Result:=RegisterHandler('',AMethodName,AClass,AArgumentCount);
|
|
Result:=RegisterHandler('',AMethodName,AClass,AArgumentCount);
|
|
end;
|
|
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
|
|
Var
|
|
I : Integer;
|
|
I : Integer;
|
|
@@ -1264,7 +1283,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TCustomJSONRPCHandlerManager.FindHandlerDefByName(const AClassName,
|
|
|
|
|
|
+Function TCustomJSONRPCHandlerManager.FindHandlerDefByName(Const AClassName,
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -1278,7 +1297,7 @@ begin
|
|
Result:=GetHandlerDef(I);
|
|
Result:=GetHandlerDef(I);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TCustomJSONRPCHandlerManager.GetHandlerDefByName(const AClassName,
|
|
|
|
|
|
+Function TCustomJSONRPCHandlerManager.GetHandlerDefByName(Const AClassName,
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
begin
|
|
begin
|
|
Result:=FindHandlerDefByName(AClassName,AMethodName);
|
|
Result:=FindHandlerDefByName(AClassName,AMethodName);
|
|
@@ -1289,8 +1308,8 @@ begin
|
|
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
|
JSONRPCError(SErrUnknownJSONRPCMethodHandler,[AMethodName]);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TCustomJSONRPCHandlerManager.GetHandler(
|
|
|
|
- const ADef: TJSONRPCHandlerDef; AOwner: TComponent; out AContainer: TComponent
|
|
|
|
|
|
+Function TCustomJSONRPCHandlerManager.GetHandler(
|
|
|
|
+ Const ADef: TJSONRPCHandlerDef; AOwner: TComponent; Out AContainer: TComponent
|
|
): TCustomJSONRPCHandler;
|
|
): TCustomJSONRPCHandler;
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -1304,8 +1323,8 @@ begin
|
|
Result:=ADef.CreateInstance(O,AContainer);
|
|
Result:=ADef.CreateInstance(O,AContainer);
|
|
end;
|
|
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;
|
|
): TCustomJSONRPCHandler;
|
|
|
|
|
|
Var
|
|
Var
|
|
@@ -1316,31 +1335,65 @@ begin
|
|
Result:=GetHandler(D,AOwner,AContainer);
|
|
Result:=GetHandler(D,AOwner,AContainer);
|
|
end;
|
|
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;
|
|
end;
|
|
|
|
|
|
-procedure TCustomJSONRPCHandlerManager.GetMethodsOfClass(
|
|
|
|
- const AClassName: TJSONStringType; List: TStrings);
|
|
|
|
|
|
+Procedure TCustomJSONRPCHandlerManager.GetMethodsOfClass(
|
|
|
|
+ Const AClassName: TJSONStringType; List: TStrings);
|
|
|
|
+Var
|
|
|
|
+ D : TJSONRPCHandlerDef;
|
|
|
|
+ I : Integer;
|
|
|
|
+
|
|
begin
|
|
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;
|
|
end;
|
|
|
|
|
|
{ TJSONRPCHandlerManager }
|
|
{ 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
|
|
begin
|
|
FHandlerDefs.Delete(Index);
|
|
FHandlerDefs.Delete(Index);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TJSONRPCHandlerManager.AddHandlerDef(const AClassName,
|
|
|
|
|
|
+function TJSONRPCHandlerManager.AddHandlerDef(Const AClassName,
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
AMethodName: TJSONStringType): TJSONRPCHandlerDef;
|
|
begin
|
|
begin
|
|
Result:=FHandlerDefs.AddHandler(AClassName,AMethodName);
|
|
Result:=FHandlerDefs.AddHandler(AClassName,AMethodName);
|
|
end;
|
|
end;
|
|
|
|
|
|
-function TJSONRPCHandlerManager.IndexOfHandlerDef(const AClassName,
|
|
|
|
|
|
+function TJSONRPCHandlerManager.IndexOfHandlerDef(Const AClassName,
|
|
AMethodName: TJSONStringType): Integer;
|
|
AMethodName: TJSONStringType): Integer;
|
|
begin
|
|
begin
|
|
Result:=FHandlerDefs.IndexOfHandler(AClassName,AMethodName);
|
|
Result:=FHandlerDefs.IndexOfHandler(AClassName,AMethodName);
|
|
@@ -1357,13 +1410,13 @@ begin
|
|
Result:=FHandlerDefs.Count;
|
|
Result:=FHandlerDefs.Count;
|
|
end;
|
|
end;
|
|
|
|
|
|
-constructor TJSONRPCHandlerManager.Create(AOwner: TComponent);
|
|
|
|
|
|
+Constructor TJSONRPCHandlerManager.Create(AOwner: TComponent);
|
|
begin
|
|
begin
|
|
inherited Create(AOwner);
|
|
inherited Create(AOwner);
|
|
- FHandlerDefs:=TJSONRPCHandlerDefs.Create(TJSONRPCHandlerDef);
|
|
|
|
|
|
+ FHandlerDefs:=CreateDefs;
|
|
end;
|
|
end;
|
|
|
|
|
|
-destructor TJSONRPCHandlerManager.Destroy;
|
|
|
|
|
|
+Destructor TJSONRPCHandlerManager.Destroy;
|
|
begin
|
|
begin
|
|
FreeAndNil(FHandlerDefs);
|
|
FreeAndNil(FHandlerDefs);
|
|
inherited Destroy;
|
|
inherited Destroy;
|