|
Summary
Marker data during event based transfer has been received as binary.
Description
The OnReceiveMarkerB event occurs during an event based transfer of a file in block mode. OnReceiveMarkerB events are interleaved with OnReceiveB events depending upon the marker frequency.
To do an event based Get call the GetFileWithRestart method with the Localfile parameter set to an empty string. To do an event based Put call the PutFileWithRestart method with the LocalFile
parameter set to an empty string. This means that you must call the BolckMode method and the EventMode method and set the Use Variant property to TRUE before initiating the file transfer.
Instead of writing incoming marker data from server directly to a local marker file, an event-based operation notifies the application with one or more OnReceiveMarkerB events. The event notifies the
application how many bytes of marker data are ready to be retrieved. It is up to the application to call the ReceiveB method to retrieve and process the marker data. The buffer could, for example, be
written to a disk file, and used in abnormal termination of file transfer. Function GetFileWithRestart or PutFileWithRestart could be used with marker to transfer the file from the termination point.
In the case of a Get, each marker should be stored together with the corresponding byte position of the block of data received in the local file immediately preceding the marker. If the file transfer
is terminated abnormally, instead of transferring the whole file again, user can position the local file to the most recent position stored and send a GetFileWithRestart command with the
corresponding stored marker.
In case of a Put operation, OnReceiveMarker delivers the local file position as well as server marker for that position. User should store this buffer in a file. The format of the buffer received is
h-l=m, where h is the high word of local file position, l is the low word of local file position and m is the server marker for the local file position. In case of abnormal file transfer termination,
user may position the local file to the most recent file position and send PutFileWithRestart function with the corresponding server marker.
If the application does not want to receive any more OnReceiveMarkerB events, then the transfer can be aborted by setting the FileAction property to FILE_ACTION_ABORT (or by calling the AbortFile
method) during the OnReceiveMarkerB event.
While handling the OnReceiveMarkerB event, an application should not perform tasks, which have the potential of requiring a lot of time to complete, such as generating a message box. A substantial
delay could cause the application to not receive subsequent OnReceiveMarkerB and OnReceiveB events.
Example
Sub FTPClient_OnReceiveMarkerB (Bytes As Long) Dim Buffer() As Byte Dim Siz As Long Dim i As Integer
Siz = FTPClient.ReceiveB (Buffer, Bytes) If Siz > 0 Then Open "c:\abc.mar" For Binary Access Write As #1 For i = 1 To Siz
Put #1, i, Buffer (i) Next i Close #1 Else MsgBox "Cannot receive binary marker data", 64, "Sample Program" End If
End Sub
|