forked from adaloveless/commonx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAsyncObjects.pas
108 lines (79 loc) · 2.82 KB
/
AsyncObjects.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
unit AsyncObjects;
interface
uses
DataObject, DataObjectCommonDefinitions, dataObjectServices, sysutils, stringx;
type
TdoAsyncProcessList = class (TDataObject)
public
procedure Sort(iSortIndex : integer); override;
end;
TdoSystemAsyncProcessList = class (TDataObject);
TdoAsyncProcessData = class(TDataObject)
public
constructor create(AOwner: TObject; params: variant; Cache: TObject; Extended: TExtendedDOVars); override;
end;
TdoAsyncProcess = class (TDataObject)
public
constructor create(AOwner: TObject; params: variant; Cache: TObject; Extended: TExtendedDOVars); override;
function DoNew(iSessionID: integer): boolean; override;
end;
TdoErrorMessage = class(TDataObject)
public
constructor create(AOwner: TObject; params: variant; ACache: TObject; Extended: TExtendedDOVars); override;
end;
implementation
uses ServerInterfaceInterface, DataObjectCache;
{Compare functions used for quick sorting}
//------------------------------------------------------------------------------
function CompareAsyncStartDate(item1, item2: Pointer): integer;
var
s1, s2 : string;
begin
s1 := LowerCase(TDataObject(item1)['Start'].AsString);
s2 := LowerCase(TDataObject(item2)['Start'].AsString);
// result := SortStringCompare(s1,s2);
result := SortStringCompare(s2,s1);
end;
{ TdoAsyncProcessList }
procedure TdoAsyncProcessList.Sort(iSortIndex: integer);
begin
QuickSort(@CompareAsyncStartDate);
end;
{ TdoAsyncProcess }
constructor TdoAsyncProcess.create(AOwner: TObject; params: variant;
Cache: TObject; Extended: TExtendedDOVars);
begin
inherited;
FieldCapacity := 7;
AddFieldDef('Name', TStringDAtaField, '');
AddFieldDef('State', TLongintDatafield, 0); //<0 = error; 0= finished; >0 = processing
AddFieldDef('StepNumber', TLongintDatafield, 0);
AddFieldDef('TotalSteps', TLongintDatafield, 0);
AddFieldDef('Start', TMYSQLDateTimeDatafield, TDateTime(NULL_DATETIME));
AddFieldDef('End', TMYSQLDateTimeDatafield, TDateTime(NULL_DATETIME));
AddFieldDef('LastChange', TMYSQLDateTimeDatafield, TDateTime(NULL_DATETIME));
end;
function TdoAsyncProcess.DoNew(iSessionID: integer): boolean;
begin
token.params[0] := IServerInterface(TDataObjectCache(self.cache).server).GetNextID('async_process');
result := true;
end;
{ TdoAsyncProcessData }
constructor TdoAsyncProcessData.create(AOwner: TObject; params: variant;
Cache: TObject; Extended: TExtendedDOVars);
begin
inherited;
FieldCapacity := 1;
AddFieldDef('ProcessData', TStringDAtaField, '');
end;
constructor TdoErrorMessage.create(AOwner: TObject; params: variant; ACache: TObject; Extended: TExtendedDOVars);
begin
//Keys
// ProcessID-long
// MessageID-long
inherited;
FieldCapacity := 1;
AddFieldDef('ErrorMessage', TStringDAtaField, '');
AddFieldDef('DateTime', TDateTimeDataField, '');
end;
end.