Файлы хранятся на удаленном сервере, и я показываю клиенту поддельную файловую систему.
Когда клиент хочет загрузить файл с помощью запроса ssh_fxp_open, я запускаю новую задачу для загрузки файла в фоновом режиме.
Пока загрузка не завершена, я отправляю на запрос ssh_fxp_read каждого клиента пустые данные.
/>Пример кода:
Код: Выделить всё
HandleOpenRequest(SshData request)
{
.
.
Task.Run(()=>{ /*download the file; add the file path to concurrentDictionary*/ });
.
.
Send handle
}
HandleReadRequest(SshData request)
{
SshData writer = new SshData();
var requestId request.ReadInt();
var handle = request.ReadString();
if(download complete)
{
fs = get fileStream from dictionary;
var offset = request.ReadInt64();
var length = request.ReadInt();
var buffer = new byte[length];
writer.write(messageType.data);
writer.write(requestId);
.
.
// Handle eof buffer
.
.
fs.Seek(offset, SeekOrigin.Begin);
fs.Read(buffer, 0, buffer.length);
writer.write(buffer);
SendPacket(writer);
}
else
{
// Sleep 1 second;
writer.write(messageType.data);
writer.write(requestId);
writer.write(new byte[0]);
SendPacket(writer);
}
}
Я использую WinSCP в качестве SFTP-клиента.
Что я делаю неправильно и как это исправить?
Я пытался изменить размер пакета, но это не помогло.>
Подробнее здесь: https://stackoverflow.com/questions/765 ... file-store
Мобильная версия