Giter Club home page Giter Club logo

sfn-d's People

Contributors

m1kc avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

sfn-d's Issues

Сделать прогресс

Прогресс передачи файла в псевдографическом виде, как в pacman.
Прикольно было бы, если на экране отображалась вся очередь.

Соединение через socks proxy

(15:08:15) Skynet: А ещё было бы просто супер офигенно сделать возможность соединяться через прокси.
(15:08:56) Skynet: Потому что бывают случаи, когда ни у одного, ни у другого нет возможности соединиться напрямую.
(15:08:45) m1kc: Socks proxy имеешь в виду?
(15:09:01) Skynet: Да.

Параллельная передача файлов

У меня возникает всё больший и больший диссонанс от того, что sfn передаёт файлы между клиентом и сервером параллельно, если оба решили передать файлы. Во-первых, это сильно уменьшает скорость передачи в отличие от последовательной (лично замерил) и не даёт никакого профита, кроме того, увеличивает нагрузку. Я считаю, что от неё надо избавиться и предоставить приоритет передачи файла серверу. Сначала передаёт файл сервер, затем, когда сервер закончил, передаёт клиент. Эту задачу лучше всего будет реализовать вместе с задачей по модернизации протокола.

Модернизация протокола

После отправки блока 0x01 с названием и размером файла отправляемой стороной, принимающая сторона должна убедиться в наличии такого количества свободного пространства и проверить, нет ли случайно уже такого файла (на предмет докачки). Если объём позволяет, принимающая сторона отправляет блок 0x04 с отступом в байтах или нулём, если нужно качать полностью. После этого отправляющая сторона шлёт начинку файла с того места, откуда её попросили. Если файл на принимаемой стороне уже есть в полном объёме, шлётся блок 0x02, который всегда шлётся с успешным окончанием. Если места не оказалось, шлётся блок 0x03, который всегда сообщает об ошибках на удалённой стороне. В том числе, когда произошла ошибка чтения файла при отправке - на принимающую сторону должен прийти не блок 0x02 об успехе, а 0x03 с возможным описанием или индексом ошибки.
Кроме того, предлагаю ввести начальный блок 0x00, в котором присутствует версия протокола (целое число) и строка - название клиента. Этот пакет шлётся сразу после установки соединения обоими сторонами. Таким образом, если протокол несовместим (а только тогда меняется число), то дальше и разговаривать программам не о чем и с уведомлением соединение закрывается (в таком случае, правда, можно запускать передачу данных по версии протокола 1, то есть текущей, чтобы файл передать можно было в любом случае). Если всё успешно, программы показывают строчку, составленную из информации удалённой стороны, вроде: "Вас обслуживает sfn версии 1.3".

Progress bar looks like shit

Fukken shit:

Sending a file: /data/m1kc/Видео/PSY - GANGNAM STYLE (강남스타일) M-V.mp4
93076756 bytes
43076756 bytes sent

Fukken awesome:

Sending a file: /data/m1kc/Видео/PSY - GANGNAM STYLE (강남스타일) M-V.mp4
93076756 bytes
[|||||     ] 45.1% sent (43076756 bytes), 950 KB/s

Command line syntax sucks hard

Fukken shit:

sfn -s -f file1 -f file2 -f file3 -f file4 -f file5 -f file6 -f file7

Fukken awesome:

sfn -s file1 file2 file3 file4 file5 file6 file7
sfn -s file*

Session keys

Specified in command line. If two clients have different session keys, they refuse to transfer anything. This saves us from data steal.

Encryption

Let's encrypt any data between clients using session keys. Why not?

Requires: #3

Докачка файлов

Необходима возможность докачки. Если файл на принимаемой стороне есть, она обязана сообщить размер скачанный.

Draft #666

Почему бы нам не поменять протокол, да.

Суть: обмен информацией состоит из сообщений. Сообщение содержит тип и поля. Если какие-то поля клиенту неизвестны, он их игнорирует. Сообщение может содержать один или несколько потоков. Передача файла - сообщение с одним потоком. Поток имеет длину. Его можно направить в файл или обработать как-то ещё. Поток кончился - читаем сообщение дальше. Поток можно не обрабатывать, но принять нужно.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.