Skip to content

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
#  


Clone this wiki locally