-
Notifications
You must be signed in to change notification settings - Fork 3
File transfer Contract Example
tmteam edited this page Sep 27, 2014
·
3 revisions
# TT file transfer contract
# This contract is approved for distribution as a contributing cause of the Light.
# This contract is approved for distribution as a contributing cause of the Dark.
# protobuff type:
PROTOTYPE FILEINFO
(1) string Name
(2) DateTime Modified
(3) UINT32 Size // In case of file. Otherwise it should be 0
(4) bool IsDirectory
# enum:
BYTE CDResult
Succesfuly = 0
InvalidPath = 1
AccessDenied = 2
#Tcp server Contract (contracter A):
1 BOOL SendTextMessage STRING: message
<-2 BOOL SendTextMessageToB STRING: message
3 STRING GetCurrentDirrectoryPath
#Changing current directory analog of unix’s «cd» command.
#Examples of relative path in windows: «MyDocs», «MyDocs\work», «..\MyDocs», «..\», «C:\MyDocs»
4 CDResult ChangeDirrectoryTo STRING: relativePath
#return list of content in current directory. analog of unix’s «ls» command.
5 FILEINFO[] GetCurrentDirrectoryContent
# abort file transmition:
6 VOID AbortFileTransmition INT32: FileID
<-7 VOID AbortFileTransmitionToB INT32: FileID
##################################### FILE DOWNLOADING ###############################################
10 INT32 InitializeFileDownload STRING: fileName UINT32: maxPartSize
<-11 BOOL SendFilePart INT32: FileID UINT32: bytesDone UINT32:bytesLeft
12 BYTE[] DownloadFilePart STRING: fileName UINT32: startByteNumber UINT32:bytesCount
##################################### FILE UPLOADING ###############################################
20 INT32 InitializeFileUpload STRING:fileName UINT32: fileSize
<-21 BOOL AcceptFileUpload INT32: fileID UINT32: maxFilePart
<-22 VOID RejectFileUpload INT32: fileID
23 BOOL UploadFilePart INT32: fileID UINT32: bytesDone UINT32: bytesLeft
#
#
# Скачивание файла (Б скачивает файл с А):
#
# Сторона Б дёргает нить InitializeFileDownload.
# если возврат нити InitializeFileDownload является отрицательным числом
# то передача файла по какой-то причине невозможна.
# в противном случае ответом является индикатор передачи фаилов (FileID)
# после этого, сторона А начинает дёргать SendFilePart для каждого из кусочков файла. Передача файла
# заканчивается посылкой, в которой аргумент bytesLeft == 0
# Если сторона Б пожелает отменить приём - она дёргает нить AbortFileTransmition
# Если сторона А пожелает прервать передачу - она дёргает нить AbortFileTransmitionToB
# Если по какой-то неведомой причине, пакеты с файлом потерялись - то сторона Б может запросить недостающие
# пакеты дёрганьем нити DownloadFilePart
#
# В принципе - всю передачу файла можно осуществлять через DownloadFilePart
#
#
# Заливка файла (Б заливает файл на А)
#
# Б дёргает InitializeFileUpload. Аналогично загрузке - отрицательный ответ обозначает
# невозможность выполнения данной операции. Положительный же ответ обозначает, что
# сторона А думает можно ли начать заливку файла и является fileID этой операции.
# В момент, когда сторона А думает, скорее всего на экране пользователя появится сообщение
# "Вы хотите принять файл такой-то?"
#
# Затем сторона А дёргает AcceptFileUpload если готова принять файл (иначе RejectFileUpload)
# И если всё ок, то сторона Б начинает дёргать UploadFilePart для каждой части файла.
#
# Аналогично скачиванию файла - прервать операцию можно AbortFileTransmition либо AbortFileTransmitionToB
#