Initial import
This commit is contained in:
parent
92eefe9981
commit
5fd16fd8fb
|
@ -0,0 +1,129 @@
|
|||
Unit m_Protocol_Queue;
|
||||
|
||||
{$I M_OPS.PAS}
|
||||
|
||||
Interface
|
||||
|
||||
Const
|
||||
QueueMaxSize = 100;
|
||||
QueueMaxPathSize = 120;
|
||||
QueueMaxNameSize = 120;
|
||||
QueuePending = 0;
|
||||
QueueSuccess = 1;
|
||||
QueueFailed = 2;
|
||||
QueueInTransit = 3;
|
||||
QueueSkipped = 4;
|
||||
QueueNoFile = 5;
|
||||
|
||||
Type
|
||||
TProtocolQueuePTR = ^TProtocolQueueRec;
|
||||
TProtocolQueueRec = Record
|
||||
FilePath : String[QueueMaxPathSize];
|
||||
FileName : String[QueueMaxNameSize];
|
||||
FileSize : Int64;
|
||||
Status : Byte;
|
||||
End;
|
||||
|
||||
TProtocolQueue = Class
|
||||
QSize : Word;
|
||||
QPos : Word;
|
||||
QData : Array[1..QueueMaxSize] of TProtocolQueuePTR;
|
||||
|
||||
Constructor Create;
|
||||
Destructor Destroy; Override;
|
||||
|
||||
Function Add (fPath, fName: String) : Boolean;
|
||||
Procedure Delete (Idx: Word);
|
||||
Procedure Clear;
|
||||
Function Next : Boolean;
|
||||
End;
|
||||
|
||||
Implementation
|
||||
|
||||
Constructor TProtocolQueue.Create;
|
||||
Begin
|
||||
Inherited Create;
|
||||
|
||||
QSize := 0;
|
||||
QPos := 0;
|
||||
End;
|
||||
|
||||
Destructor TProtocolQueue.Destroy;
|
||||
Begin
|
||||
Clear;
|
||||
End;
|
||||
|
||||
Function TProtocolQueue.Add (fPath, fName: String) : Boolean;
|
||||
Var
|
||||
F : File;
|
||||
Begin
|
||||
Add := False;
|
||||
|
||||
If (QSize = QueueMaxSize) Then Exit;
|
||||
|
||||
Inc (QSize);
|
||||
|
||||
New (QData[QSize]);
|
||||
|
||||
QData[QSize]^.FilePath := fPath;
|
||||
QData[QSize]^.FileName := fName;
|
||||
QData[Qsize]^.FileSize := 0;
|
||||
|
||||
Assign (F, fPath + fName);
|
||||
|
||||
{$I-} Reset(F, 1); {$I+}
|
||||
If IoResult = 0 Then Begin
|
||||
QData[QSize]^.FileSize := FileSize(F);
|
||||
QData[QSize]^.Status := QueuePending;
|
||||
Close(F);
|
||||
End Else
|
||||
QData[QSize]^.Status := QueueNoFile;
|
||||
|
||||
Add := True;
|
||||
End;
|
||||
|
||||
Procedure TProtocolQueue.Delete (Idx: Word);
|
||||
Var
|
||||
Count : Word;
|
||||
Begin
|
||||
If QData[Idx] <> NIL Then Begin
|
||||
Dispose (QData[Idx]);
|
||||
|
||||
For Count := Idx To QueueMaxSize - 1 Do
|
||||
QData[Count] := QData[Count + 1];
|
||||
|
||||
Dec (QSize);
|
||||
|
||||
If QPos >= Idx Then Dec(QPos);
|
||||
End;
|
||||
End;
|
||||
|
||||
Function TProtocolQueue.Next : Boolean;
|
||||
Begin
|
||||
Next := False;
|
||||
|
||||
If QPos < QSize Then
|
||||
Repeat
|
||||
Inc (QPos);
|
||||
|
||||
If QData[QPos]^.Status <> QueueNoFile Then Begin
|
||||
Next := True;
|
||||
Break;
|
||||
End;
|
||||
Until (QPos = QSize);
|
||||
End;
|
||||
|
||||
Procedure TProtocolQueue.Clear;
|
||||
Var
|
||||
Count : Word;
|
||||
Begin
|
||||
For Count := 1 to QSize Do Begin
|
||||
Dispose (QData[Count]);
|
||||
QData[Count] := NIL;
|
||||
End;
|
||||
|
||||
QSize := 0;
|
||||
QPos := 0;
|
||||
End;
|
||||
|
||||
End.
|
Loading…
Reference in New Issue