Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ DC-клиенты _ Клиент: LiveDC

Автор: Erty Hackward 10.9.2013, 8:36

Добрый день.

Я хотел бы представить вам мою разработку: p2p-клиент LiveDC.

Во время работы над проектом я хотел сделать что-то новое, а не еще один клон DC++. Я начал с нуля, взял самое необходимое и убрал все ненужное (на мой взгляд).

Я считал и продолжаю считать что существующие клиенты слишком сложные для не-гиков. Поэтому я свел обязательную настройку к минимуму.
В лучшем случае пользователю не потребуется вводить вообще ничего, в худшем клиент попросит ввести адрес хаба.

Клиент самостоятельно определяет режим соединения (актив/пассив). Для этого он обращается к серверу, передавая ему свой tcp порт. Сервер пытается подключиться на порт к нему и возвращает результат клиенту.

Псевдоним вида livedc(случайные буквы) генерируется автоматически.

Клиент может сам определить адреса хабов при первом запуске. Для этого он определяет город, откуда запущен клиент. Затем запрашивает список хабов с сервера для этого города. Кроме того, при наличии настроенных клиентов FlyLink или StrongDС адреса хабов могут быть взяты там.

По умолчанию, клиент выбирает самый свободный жесткий диск и загружает файл на него. Конечно же, в настройках можно указать куда именно загружать файлы. В планах добавить удаление старых загруженных файлов при недостатке свободного места.



Интерфейс клиента предельно простой - значок в области уведомлений, при нажатии на который появляются 3 последних открытых файла. При нажатии на магнет-ссылку из браузера появляется диалог, сообщающий о текущем прогрессе открытия файла. Клиент начинает загрузку и как только загружен хотя бы один сегмент - предлагает пользователю открыть файл. По опыту, видео файл начинает проигрываться у меня где-то через 10-15 секунд после нажатия на магнет ссылку (при наличии источников).
Работает это следующим образом - клиент создает виртуальный диск, на котором создает "видимость" наличия файла в системе. На самом деле все запросы к этому файлу проходят через клиент, который знает загружен ли запрашиваемый участок файла или нет. Если участок не загружен - он отмечается высоким приоритетом и будет загружен в ближайшее время. Пока сегмент не загружен отправка данных приостанавливается, плеер или любое другое системное приложение "висит" ожидая данных. Что мне особенно нравится, помимо просмотра сериалов, эта функция позволяет установить большую игру из образа к тому моменту как будет завершена закачка ее образа. Причем, если для установки не нужно загружать весь образ, она выполнится еще до окончания его загрузки.

Независимо от того запрошен ли файл целиком или частично, клиент постарается скачать весь файл. Как только файл будет скачан он становится на раздачу.

В клиенте отсутствует чат и список пользователей. Поэтому при подключении к хабу он его не запрашивает, снижая нагрузку на хаб.

Разработал я его в первую очередь для себя - люблю простые и легкие вещи.
Клиент реализован на основе моей библиотеки: http://mydc.ru/r/?https://code.google.com/p/sharpdc/
Для создания виртуального диска используется библиотека Dokan.
Программа бесплатная и чистая: нет рекламы, нет шпионских штучек.
Написано на C# в Visual Studio 2012.

При обнаружении бага
Клиент пишет лог работы в папку %temp%\livedc-дата.log
Если встретили некорректное поведение, прошу отправить лог мне на почту: hackward@gmail.com с описанием ошибки.

Сайт: http://mydc.ru/r/?http://april32.com/ru/products/livedc
Трекер: http://mydc.ru/r/?https://bitbucket.org/ErtyHackward/livedc
Скачать дистрибутив можно здесь: http://mydc.ru/r/?http://april32.com/uploads/downloads/livedc/livedc.rar

PS. Вчера я закончил внедрение поддержки торрентов на базе MonoTorrent. Так что теперь клиент работает как с DC так и с торрентами.
Очень интересно ваше мнение о проекте в целом, буду благодарен за помощь в тестировании. С удовольствием отвечу на любые вопросы.

Автор: HackFresse 10.9.2013, 10:24

Да, дистрибутов дотнета лучше выкладывать рядом с инсталляшкой.

Есть ли поддержка торрентовых магнет-ссылок?

Поддерживается ли подключение к хабу из магнет-ссылок (dc)?

Шаринг общий между торрентом и dc (скачанное через торрент раздаётся через dc)?

Автор: Erty Hackward 10.9.2013, 10:55

магнет ссылки поддерживаются как DC так и торрентов
ссылки на хабы - нет, никогда этим не пользовался, а надо?
общего шаринга на данный момент нет, хеширование само по себе еще не реализовано (нет верификации, добавления в шару), работаю над этим

Автор: HackFresse 10.9.2013, 11:35

если для совсем "для не-гиков", то нужны.
Юзер зашел на сайт с магнет-ссылками, кликнул по понравившейся, а на подключенных хабах такого файла не нашлось. "Пачиму не качаит?"

Настроек всё-таки слишком мало, должна быть возможность хотя бы список хабов отредактировать

Что имеется в виду под верификацией? Как я представляю - торрент-файл скачался полностью, контрольные суммы совпадают - на всю папку натравить готовый класс из флая/стронга/апекса/айскальта, результат просто замержить с готовой xml файл-листа.

У меня была идея по конвертации *.torrent в *.dcls на основе поиска нужных файлов, тут же сразу готовое решение с пересчетом контрольных сумм.

Еще есть грандиозная идея через DC отдавать торрентовые раздачи одним потоком, без разбивки на отдельные файлы. Т.е. есть торрент-файл с раздачей gta5, убираем из него все данные о трекерах, высчитываем контрольную сумму по tth, эту контрольную сумму шарим на сайте. другой клиент по клику на ссылке ищет tth, через хаб или dht два клиента находят друг друга, а потом обычная торрентовая передача p2p . Сложно, но вроде как реально

Автор: Erty Hackward 10.9.2013, 12:09

редактирование списка хабов есть в планах, а вот ссылки на хабы без их представления как-то странно выглядеть будут.
верификация - проверка загруженных данных на соответствие TTH во время загрузки. В MonoTorrent верфикация есть. Просто чтобы расшарить в DC нужно реализовать TTH-хеширование в библиотеке (SharpDC). Я не говорил что это сложно, просто это требует времени, которое ограничено. Плюс нет явной пользы - пользователю от этого ни холодно ни жарко.
Хеширование уже фактически готово, я обязательно это сделаю, просто чуть позже. И, естественно, это будет односторонний шаринг torrent -> dc.

Автор: HackFresse 10.9.2013, 12:24

По поводу ссылки на хаб в магнетке - popup "подключиться к хабу , Да/Нет" и чекбокс в настройках "выводить попап при обнаружении хаба в магнет-ссылке"


Если время ограничено, то лучше взять что-то готовое и с минимальными изменениями уже начать использовать, чем писать что-то своё "сразу оптимально".

>>Плюс нет явной пользы - пользователю от этого ни холодно ни жарко.
Тут проблема в файлообмене "глобальном", т. е. качание без шаринга очень многим не нравится.
Если клиент не может шарить/раздавать файлы, то его будут банить и юзеры, и админы хабов.

А с фичей "всё, что скачано с торрентов, сразу раздаётся в дц" всё будет намного лучше

Автор: Antibiotic 10.9.2013, 13:09

Всё отлично! круто, но всётаки поболтать в чате иногда хочеться... feel_good.gif


А так прикольно!!!!! молодец!















А как данные расшарить?

Автор: Erty Hackward 10.9.2013, 13:14

Цитата(Antibiotic @ 10.9.2013, 17:09) *
А как данные расшарить?

пока - никак. Можно только качать. Скачанное расшаривается само.

Автор: Damaks 10.9.2013, 14:21

За последние годы самая многообещающая разработка. Знаю ещё из http://mydc.ru/r/?http://habrahabr.ru/post/181906/. Удачи в развитии.

Автор: Ksan 10.9.2013, 14:44

Советую расположить файл программы на этом же ресурсе, и обновлять его по ходу изменений..
Тут так принято, а не давать ссылки на чужие ресурсы.

Автор: HackFresse 10.9.2013, 14:53

Самое главное, чтобы с ней не произошло то же, что и с остальными дц-клиентами..

Автор: Antibiotic 16.9.2013, 14:11

Ошибку выдает и незапускается tire.gif

Автор: Erty Hackward 16.9.2013, 16:10

Обновил до 1.1.9, ошибка скорее всего исправлена. Если нет, отправьте мне лог программы на почту.

Автор: Antibiotic 16.9.2013, 19:11

Ураа..работает!!

big_smile1.gif

Автор: HackFresse 23.9.2013, 15:03

Клиент не для локальных мини-хабов (с текущим фукционалом). После "продвижения" результаты следующие:

1) Около 20 % сидят с нулевой шарой и ждут, что скачать

2) Локальный каталог фильмов наполняется на основе файл-листов, которых стало меньше. с "обычными" клиентами новинки в папке шарились автоматом, теперь "чего бы скачать" стало еще меньше.

3) Много новинок (и просто файлов) качалось не через поиск, а через "юзер -> скачать файл-лист -> скачать файл/папку". Неудобно и тем, кто на новом клиенте, и тем, кто на старом. Поиск не особо удобен, если не знаешь, что искать

4) Некоторые выставили бан по шаре, в итоге новый клиент "почему не качает"



Т.е. шаринг произвольных файлов и папок необходим

Автор: Antibiotic 23.9.2013, 21:32

Да-аа, шаринг нужен

Автор: Angel_D 19.3.2014, 16:09

Имхо в последних версиях флайлинка отлично придумана система "синхронизации списка хабов".
(там можно почитать ===> http://mydc.ru/r/?http://flylinkdc.com/forum/viewtopic.php?f=27&t=537 )
По хорошему - её вообще можно было бы унифицировать, если бы клиент по умолчанию сначала долбился в какой-нить

Код
http://dc.local/ISP_favorites.xml"]http://dc.local/ISP_favorites.xml
, а уж если там ничего не находит - "план Б". В любой маломальской сети по DCHP рассказать кто такой dc.local и захостить один файлик - не велика проблема, не говоря уже о провайдерах...
Вы ж скорее всего по IP определяете город, так? А если чел в локальной сети без инета? Или в том городе 10 провайдеров со своими хабами и юзверю неясно куда ему надо? В общем как-то так... Вот такое пот предложение.

Автор: Erty Hackward 19.3.2014, 16:23

Имеете ввиду поле в настройках откуда подгружать список хабов?
Это скорее для сборки под какого-то провайдера. Если будут предложения я готов рассмотреть и подключить все что нужно.

Если человек в локальной сети - клиент предложит ввести адрес хаба (если не сможет его найти в настройках flylink или strongdc)
Если в городе десятки хабов - будет пробовать подключиться ко всем. Вероятно, сможет подключиться только к своему.

Автор: Angel_D 20.3.2014, 12:57

Цитата
Имеете ввиду поле в настройках откуда подгружать список хабов?
Это скорее для сборки под какого-то провайдера.

не совсем так.
попробую привести другой пример. для торрентов относительно не так придумали такую штуку. клиент по умолчанию пытается загрузить файл http: // peerpolicy.local/announce.xml , в котором расписаны IP-диапазоны провайдера, и они для торрент-клиента на пользователе становятся наиболее приоритетными источниками скачивания. а это очень хорошо для провайдера, так как экономит канал, и для клиента, так как положительно сказывается на скорости кача. если клиент не находит этот файл - черт с ним - работает, как работал.
как вы можете догадаться, каждый знающий про это и уважающий себя провайдер (или просто жадный) сделал это, ибо труд не велик. и это универсальный адрес, а не какой-то один у одного провайдера, другой у другого.
Собственно я предлагаю совместить одну хорошую идею (универсального адреса IP-подсетей провайдера) с другой не менее хорошей идеей (файлом списка хабов провайдера в флайлинке).
А теперь, после моих разъяснений, я попробую повторить алгоритм, как я его вижу...
При запуске вам DC-клиент пытается прочитать файл...
Код
http://dc.local/ISP_favorites.xml

...и если она его не находит - просто дальше работает по алгоритму добавления хабов, по которому она работает сейчас.

Провайдеры/админы сами не очень любят разъясняться с юзверями на тему адресов хабов, да и просто не любят, и, как правило, такие идеи обычно подхватывают "на ура".
Думаю резонно, чтобы у файла был формат такой-же, как и для FlylinkDC, дабы а) не плодить форматы, б) если Павел Пименов тоже поддержит идею с такими вот дефолтными настройками (по этому поводу я и сам с ним могу списаться), то учитывая популярность флайлинка, провайдеры оперативнее поддержат такую идею "общего адреса файла настроек".

Цитата
Если в городе десятки хабов - будет пробовать подключиться ко всем. Вероятно, сможет подключиться только к своему.

разумно. но тут есть серьёзный недостаток. по крайней мере для грустных белорусских интернет-реалей.
так как инет у нас всё ещё дорогой, то даже если забыть про тарифы с помегобайтной тарификацией (а у нас ещё и такая тема актуальна), очень серьёзный кусок интернет-тарифов провайдеров, это "псевдоанлимы". к примеру: на тебе 100 гиг на месяц, и пока ты их не выкачал - у тебя 25 мегабит/с, но на байт больше - скорость обрезаем до 128 килобит/с. внутри свой сети - 100 мегабит хоть сутки на пролёт выкачивай. таким образом, учитывая то, что клиент в первую очередь рассчитан на пользователя, который точно разбираться ни в этом, ни в адресах хабов не особо горит желанием, его перспективы "встрять на трафик" чрезвычайно велики, так как хз откуда он будет выкачивать - с инета или с локалки.
Согласитесь, вопрос актуальный, учитывая позиционирование данного DC-клиента, и моё предложение вполне себе решение, позволяющее избежать таких казусов.

Пожалуйста, только не примите мои слова как очередную критику очередного го##ожуя, которому никогда ничего не нравится, а особенно - что-то делать самому - просто конкретно вашим клиентом был приятно удивлён - действительно мечта "ломогрыза". Да, если ты не подключился к хабу - хз почему ты к нему не подключился, да, нужна шара, и да - вполне не помешала бы кнопка более глубоких настроек, в которую ламер и не полез бы (учитывая то, что у него и по дэфолту все работает), а человек, которых бы захотел настроить себе проброс портов (так как сидит ра WiFi-роутером) или ограничения скорости - настроил бы это. НО при всем при этом - отличная концепция, в которой как-никак решена основная проблема пользователя-новичка - стартовая настройка.

Так же из того, с чем успел поэкспериментировать и что можно пробовать - можно пробовать интегрировать VLC Player, если не в сам клиент, то хотя бы его установку на комп и последующая ассоциация его с медиафайлами. Когда доходит дело до MKV, MP4, тот же модный PotPlayer не проглотил ни то, ни то, с BD диском тоже были вопросы с воспроизведением на лету, VLC "глотал" всё и перематывал без проблем... Возможно это решается настройками медиаплеера, а возможно я попробовал на единственном плеере, который у меня кроме AVI не справился ни с чем, но опять таки - новички разбираться не будут. Конкретно эти "фантазии" и сам рассматривал бы в последнюю очередь. big_smile.gif

Автор: Erty Hackward 20.3.2014, 13:43

Спасибо за развернутый ответ. Я понимаю, согласен. Я про другое. Нет смысла делать что-то в вакууме. Нужна база пользователей, которые нуждались бы в решении какой-то проблемы. На данный момент я такого не наблюдаю. Для меня клиент достиг "равновесия". Имеющегося функционала мне достаточно для личного использования, спроса на дальнейшее развитие не наблюдаю.

Проброс портов можно настроить и сейчас, хабы можно вручную в настройках прописать.

Автор: HackFresse 20.3.2014, 13:45

не забыть про важный момент (про который я писал в личке во вконтактике)

Цитата
а можно попросить сделать возможность "кастомных сборок"? с предустановленным дц-хабом и своим сервером проверки актив/пассив ?


Если будет какой-то централизованный список хабов, то режим подключения нужно проверять для каждого хаба


Распространение клиент получит, как только юзеры узнают о нем.

У него охрененная киллерфича со стартом просмотра и перемоткой недокачанного файла, ни у кого такого нету, я на соседнем форуме распрягал, http://mydc.ru/r/?http://dchublist.ru/forum/viewtopic.php?p=22504#p22504
Если уже готов шаринг в дц скачанного с торрентов - прям сказка


Автор: Angel_D 20.3.2014, 16:15

Цитата
Если будет какой-то централизованный список хабов, то режим подключения нужно проверять для каждого хаба

от этого никуда не деться - чел может просто фаервол не настроил. или опять таки роутер поставил...

Цитата
Нет смысла делать что-то в вакууме. Нужна база пользователей, которые нуждались бы в решении какой-то проблемы. На данный момент я такого не наблюдаю.

я не могу сказать, что это проблема - это скорее оптимизация, и согласитесь - это гораздо оптимальнее, чем сборки лепить под каждого провайдера + ни капельки не идет в разрез с действующей системой определения адресов хабов, а дополняет, при этом не вводя ни единой дополнительной кнопки в интерфейс. у нас был момент, когда актуальны были 4 хаба с реально разным контингентом пользователей и дай Бог, чтоб пользователь на стадии установки программы правильно ввел адреса хотя бы двух из них. безусловно - "сборка под провайдера" решает такие проблемы, но ведь их можно исключить на ранней стадии и так гораздо проще для вас в перспективе. Тот же Пименов уже вон "фабрику сборок" сделал, абы голову не дурили, и то, что её не дурят вам, пока с большего говорит о том, что он ещё на на столько распространен.
если всетаки говорить про проблемы, то тут для себя, как администратора, вижу лишь одну - по разным причинам люди могут "попасть на трафик" а) прицепившись к инет хабу, б) зайдя на наш же локальный хаб через интерфейс VPN-подключения (как провайдер, мы через VPN раздаем инет) и начав качать/раздавать инетчикам. как обезопасить пользователей от таких вариантов в текущим виде клиента - хз. в принципе можно фаерволом на сервере, но тогда получается клиент не подключится, если полезет не через тот сетевой интерфейс... вариант (б) частность, но к сожалению тоже имеет место быть и как его избежать на LiveDC сейчас - хз.

Есть пара вопросов.
1) есть ли сейчас возможность увидеть список хабов, к которым подключился клиент?
2) как в последствии можно добавить/удалить хаб из "списка хабов", к которым подключается клиент?
3) что делает кнопка "подключить URL"?
4) для "проброса портов" настройки/сеть/соединения и порты, как я понимаю? обычно для корректной работы DC-клиента при пробросе был пункт, в котором указывался IP-адрес клиента, который оный отправляет DC-хабу (чтоб не отправлял IP, выданный домашним роутером). не знаю, на сколько это критично для LiveDC.

Вы же понимаете, что сейчас эти вопросы вам фактически задают люди, которые админят хабы и взвешивают последствия/перспективы клиента, перед тем, как его давать его конечным пользователям и переделывать инструкции на сайтай/форумах поддержки своих хабов.
Повторюсь - клиент-бомба, но есть узенькие моменты, которые меня пока стремают, чтобы вкидывать клиент в массы, и эти "проблемки" я озвучил. Хотелось бы порешать хотя бы со списком хабов, чтобы быть уверенным, что клиент точно зацепиться на хаб и это будет тот хаб, ибо если сначала у чела не получиться - всё, черта с два его уломаешь попробовать снова, а остальное - уж и обновлениями порешать можно, если это и впрямь кому-нибудь нужно.

Автор: Erty Hackward 20.3.2014, 16:45

Цитата
я на соседнем форуме распрягал, http://mydc.ru/r/?http://dchublist.ru/forum/viewtopic.php?p=22504#p22504

забавно читать такое про наш хаб, имею ввиду что кто-то не верит что пользователи настоящие
Возможность заменить сервис проверки я уже сделал.

Цитата
Есть пара вопросов.
1) есть ли сейчас возможность увидеть список хабов, к которым подключился клиент?
2) как в последствии можно добавить/удалить хаб из "списка хабов", к которым подключается клиент?
3) что делает кнопка "подключить URL"?
4) для "проброса портов" настройки/сеть/соединения и порты, как я понимаю? обычно для корректной работы DC-клиента при пробросе был пункт, в котором указывался IP-адрес клиента, который оный отправляет DC-хабу (чтоб не отправлял IP, выданный домашним роутером). не знаю, на сколько это критично для LiveDC.

1. нет, только если из лога прочитать
2. только через файл с настройками
3. она "монтирует" файл с сервера (по http) на виртуальный диск, чтобы можно было не качать а сразу использовать его
4. порты задаются в настройках клиента, ip адрес клиент получает из сервиса проверки доступности порта. Тоесть адрес будет внешний.

Цитата
Вы же понимаете, что сейчас эти вопросы вам фактически задают люди, которые админят хабы и взвешивают последствия/перспективы клиента, перед тем, как его давать его конечным пользователям и переделывать инструкции на сайтай/форумах поддержки своих хабов.

Если реально есть возможность дать его пользователям, я с удовольствием сделаю нужные для этого вещи. Давайте выделим основные моменты.
Я так понимаю, общепринятого формата нет. У флайлинка задается только список хабов. И путь к этому файлу еще нужно прописать в настройках.
Кроме списка хабов что-то еще нужно? Я так понимаю нужен запрет на подключение к другим хабам? Как быть с поддержкой торрентов?

Итак в конфигурационном файле может быть:
1. адрес скрипта проверки на пассивный режим и возвращения нужного ip адреса клиенту
2. список хабов для подключения
3. диапазоны локальных адресов
4. сетевой интерфейс для подключения

Кроме того нужно ограничить подключение к интернет хабам. Не понимаю как быть с торрентами, выходит тоже нужно отключать или использовать диапазоны. Похоже нужна специальная "локальная" версия клиента, которая не будет подключаться никуда без этого dc.local
Я что-то упустил?

Автор: Angel_D 20.3.2014, 21:03

Цитата
1. нет, только если из лога прочитать
2. только через файл с настройками

оуу... они таки есть... нашел. big_smile.gif
в принципе вполне себе вариант без лишних кнопочек настроить клиента под себя. только не понятно, зачем настройки сохранять туда, а не в папку клиента - чата в клиенте нет, чтобы потенциальные собеседники путались, да и хоть общая шара...
Цитата
3. она "монтирует" файл с сервера (по http) на виртуальный диск, чтобы можно было не качать а сразу использовать его

понял. вот что-что, а ваша реализация через виртуальный диск - это действительно интересный ход, с какой стороны не глянь. big_smile.gif
Цитата
4. порты задаются в настройках клиента, ip адрес клиент получает из сервиса проверки доступности порта. Тоесть адрес будет внешний.

я так полагаю, что клиент с локальным адресом 10.х.х.х "ломиться" на ваш сервис и естественно в ответ он получит свой инет-IP, так как внутрисетевой ему не угадать - так?
Цитата
Если реально есть возможность дать его пользователям, я с удовольствием сделаю нужные для этого вещи.

если быть откровенным до конца, то я планирую для хаба сделать 2 инструкции - первая - "если вы совсем новичек в DC и вам не нужно:
общение на DC хабе, не хотите делиться своими "кладами", "расширенный поиск", автоматическое уведомление о новых поступлениях на нашем хабе (RSS) и прямой доступ из ДЦ клиента на наши порталы" - собственно она будет вести на мануал и рекомендации к вашему клиенту, вторая инструкция, как вы понимаете, будет вести на FlyLinkDС. Онлайн у нас сейчас порядка 7к пользователей, так что если вы думаете, что заморачиваетесь на мини-хаб, то нет. big_smile.gif

Цитата
Я так понимаю, общепринятого формата нет.

да, но по факту - вам сейчас достаточно согласиться с форматом флайлинка, и это станет общепринятым форматом. big_smile.gif

Цитата
У флайлинка задается только список хабов.

в файле с указанным названием - да. но там для синхронизации с сервером клиента есть у него еще параметры, для которых в вашем клиенте и функционала нет (да и не нужен он вам) там подробно ===> http://mydc.ru/r/?http://flylinkdc.com/forum/viewtopic.php?f=27&t=537

Цитата
И путь к этому файлу еще нужно прописать в настройках.

в их случае - "укажите адрес, где вы захостили эти файлы, и мы забацаем вам сборку" - вариант с универсальным дэфолтным адресом хостинга имхо решает этот вопрос на корню.

По остальным вопросам - чуть позже отвечу, сорри, но пора лететь...

Цитата
Кроме списка хабов что-то еще нужно? Я так понимаю нужен запрет на подключение к другим хабам? Как быть с поддержкой торрентов?

Итак в конфигурационном файле может быть:
1. адрес скрипта проверки на пассивный режим и возвращения нужного ip адреса клиенту
2. список хабов для подключения
3. диапазоны локальных адресов
4. сетевой интерфейс для подключения

я сейчас попробовал представить "идеальное универсальное негромоздкое решение" данного вопроса и пока схожусь к мысли, что слишком много прилагательных... "резать" функционал - вааще не комильфо... кидать в пассивный режим всех, кто без инета запустил клиент или сидящих за разными NATами - тоже не ок...
о, а скрипт, определяющий тип подключения, он очень секретный и с какими-то особыми требованиями или как?
просто может опять таки - проще будет его выложить, админ захостит на том же http: // dc.local , клиент по дефолту будет пробовать ломиться в него и делать выводы касательно типа подключения / IP / порта, а уж если не найдет его - ломиться на ваш скрипт.
в настройку можно ввести галку "локальный режим" - если она стоит, то файлообмен любого рода лишь в диапозонах, которые указаны в только что придуманном мною файле http: // dc.local/local_ip.xml

Мне здоровые мысли приходят в мозг или мне не продолжать?

Автор: Erty Hackward 21.3.2014, 5:35

Скрипт простейший, конечно я его предоставлю. Именно для этого и будет поле - адрес скрипта для проверки режима. Он позволит определить режим работы для именно в вашей сети.
Значит будет 2 сборки - обычная и локальная. Локальная будет иметь по умолчанию опцию запрещающую соединения вне разрешенных диапазонов.

Как будет время попробую набросать систему.

Автор: Angel_D 21.3.2014, 10:17

Цитата(Erty Hackward @ 21.3.2014, 5:35) *
Скрипт простейший, конечно я его предоставлю. Именно для этого и будет поле - адрес скрипта для проверки режима. Он позволит определить режим работы для именно в вашей сети.
Значит будет 2 сборки - обычная и локальная. Локальная будет иметь по умолчанию опцию запрещающую соединения вне разрешенных диапазонов.

Как будет время попробую набросать систему.

не совсем понимаю смысл локальной и обычной сборки, когда можно сделать одну.
повторюсь:
Гражданин А. скачал ваш клиент всё равно откуда, может друг принес, может нагуглил, а может не городил огород и просто сделал все по инструкции с сайта провайдера,
начал его установку, в которой по мимо копирайтов было лишь одно предупреждение "пожалуйста, подключите ваш компьютер к сети, в которой вы собираетесь пользоваться данной программой, чтобы она смогла определить оптимальные настройки",

после софтина полезла по адресу http: //dc.local/livedc.xml и взяла там:
адрес файла с "адресами хабов", если не нашла этот параметр - задала значение http: //dc.local/ISP_favorites.xml , если в последствии не найдет и этот файл - определяет адреса хабов по тому алгоритму, который у вас сейчас, (этот файл проверяется каждый раз при запуске, чтобы если у провайдера сменились адреса хабов или выключился какой-то, то он мог поправив файлик централизовано исправить адрес всем)

"адрес скрипта", которым вы определяете тип подключения/порты, если не нашла этот параметр - наверное лучше сразу пусть лезет к вам на сервер, как сейчас, (наверное его резонно перечитывать и исполнять скрипт каждый раз - может чел нашел, как фаервол настроить или роутер где купить)

режим работы - "общий" или "локальный", и если локальный, то следующим параметром задаются разрешенные диапозоны IP. если в последствии человек захочет "общий" режим - уберет галочку "локальный режим" и наоборот. (это, видимо, актуально будет проверять только при первом запуске, дабы провайдер не мог навязать свою позицию вместо гражданского выбора гражданина А. big_smile.gif )


тут конечно не мне решать, но касательно "2ух сборок" - на сколько я вижу "развитие событий", если получиться сделать подобный "универсальный дистриб" и клиент обретёт популярность, то во второй сборке будет смысл лишь если это будет что-то вроде "LiveDС Pro" - т.е. клиент уже рассчитанный на людей, которые не боятся лазать по настройкам, жаждущих своей шары и т.д.

Автор: Angel_D 1.4.2014, 9:17

Erty Hackward, день добрый.
Не подскажите, как там дела и чего нового? big_smile.gif

Автор: Erty Hackward 1.4.2014, 14:31

Постараюсь на неделе сделать.

Набросал, но не проверял пока. http://mydc.ru/r/?https://drive.google.com/file/d/0B19NCg9w06kXd05zQnFTYkNSc2s
При запуске программа пытается загрузить http: //dc.local/ISP_favorites.xml

Файл должен быть такого вида:

Код
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Favorites>
    <Hubs>
      <Hub Name="Hub1" Server="dchub://dc.hub1.ru"/>
      <Hub Name="Hub2" Description="Большой Хаб" Server="dchub://dc.hub2.ru"/>
      <Hub Name="Hub3" Server="dchub://dc.hub3.ru:411"/>
    </Hubs>
    <Users/>
    <UserCommands/>
    <FavoriteDirs/>
    <LiveDC>
      <PortCheckUrl>http://livedc.april32.com/checkip.php</PortCheckUrl>
      <NetworkInterface>192.168</NetworkInterface>
    </LiveDC>
    <LocalIPRanges>
      <IPRange>10.0.0.0/8</IPRange>
      <IPRange>10.0.0.0-10.207.255.255</IPRange>
    </LocalIPRanges>
</Favorites>


Пока клиент использует только список хабов и путь для скрипта проверки порта.
Вот код скрипта проверки порта:
Код
<?php

    error_reporting(0);

    $ip = $_SERVER['REMOTE_ADDR'];
    echo $ip."\n";
    
    if(isset($_GET['tcp']))
    {
        $tcp = fsockopen($_SERVER['REMOTE_ADDR'], $_GET['tcp'], $errno, $errstr, 5);

        if($tcp)
            echo "true";
        else
            echo "false";
    }
    else
        echo "false";
?>

Автор: Angel_D 2.4.2014, 17:28

вроде как работает, то, что должно.
при поиске немного непонятно себя ведет - на хабе появляется ещё один клиент с сгенерированным именем... и предупреждение раз выкинула винда "необрабатываемое исключение в приложении. при нажатии кнопки "продолжить" приложение проигнорирует ошибку и попытается продолжить работу...(блаблабла)...индекс за пределами диапазона...(блаблабла)... имя параметра: index"

Раскрывающийся текст
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в LiveDc.Forms.FrmSearch.ResultsDataGridViewCellValueNeeded(Object sender, DataGridViewCellValueEventArgs e)
в System.Windows.Forms.DataGridView.OnCellValueNeeded(DataGridViewCellValueEventArgs e)
в System.Windows.Forms.DataGridView.OnCellValueNeeded(Int32 columnIndex, Int32 rowIndex)
в System.Windows.Forms.DataGridViewCell.GetValue(Int32 rowIndex)
в System.Windows.Forms.DataGridViewImageCell.GetValue(Int32 rowIndex)
в System.Windows.Forms.DataGridView.OnCellValidating(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, DataGridViewDataErrorContexts context)
в System.Windows.Forms.DataGridView.CommitEdit(DataGridViewCell& dataGridViewCurrentCell, DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave)
в System.Windows.Forms.DataGridView.EndEdit(DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave, Boolean keepFocus, Boolean resetCurrentCell, Boolean resetAnchorCell)
в System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
в System.Windows.Forms.DataGridView.set_CurrentCell(DataGridViewCell value)
в System.Windows.Forms.DataGridView.OnClearingRows()
в System.Windows.Forms.DataGridViewRowCollection.ClearInternal(Boolean recreateNewRow)
в System.Windows.Forms.DataGridViewRowCollection.Clear()
в LiveDc.Forms.FrmSearch.FillList()
в LiveDc.Forms.FrmSearch.<SearchManagerSearchStarted>b__b(Object o)


************** Загруженные сборки **************
mscorlib
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.34011 built by: FX45W81RTMGDR
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
LiveDc
Версия сборки: 1.1.13.13
Версия Win32: 1.1.13.13
CodeBase: file:///D:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/LiveDc.exe
----------------------------------------
SharpDc
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///d:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/SharpDc.DLL
----------------------------------------
System
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.34003 built by: FX45W81RTMGDR
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
MonoTorrent
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0
CodeBase: file:///d:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/MonoTorrent.DLL
----------------------------------------
NLog
Версия сборки: 2.0.0.0
Версия Win32: 2.0.0.0
CodeBase: file:///d:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/NLog.DLL
----------------------------------------
System.Configuration
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.ServiceModel
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.ServiceModel/v4.0_4.0.0.0__b77a5c561934e089/System.ServiceModel.dll
----------------------------------------
System.Data
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Runtime.Serialization
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Serialization/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll
----------------------------------------
DokanNet
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///d:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/DokanNet.DLL
----------------------------------------
System.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.resources.dll
----------------------------------------
Microsoft.GeneratedCode
Версия сборки: 1.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.xml.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Xml.resources.dll
----------------------------------------
MonoTorrent.Dht
Версия сборки: 0.70.0.0
Версия Win32: 0.70
CodeBase: file:///d:/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/LiveDC/MonoTorrent.Dht.DLL
----------------------------------------
Microsoft.GeneratedCode
Версия сборки: 1.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Microsoft.GeneratedCode
Версия сборки: 1.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.


не, что-то не так...
"второй клиент" появляется независимо от того искал ты что или нет - первые секунд 20 иконка серая (первый клиент уже на хабе), потом становится синей, появляется и второй клиент.
пока ничего скачать не вышло.
балуюсь дальше.

удалил под ноль (вручную почистив папку c:\Users\Пользователь\AppData\Roaming\LiveDC\)
установил заново.
при первом запуске второй клиент не вылезал, прицепился так же натужно (секунд через 20), поиск результаты давал, но добавив файл в очередь загрузки, иконка стала желкто-коричневой, сообщение "не удалось установить соединение ни с одним из хабов" и просит ввести хоть какой-нить адрес хаба.
при последующих запусках - уже снова два клиента на хабе и те же проблемы со скачиванием.

Автор: Angel_D 4.4.2014, 14:20

Erty Hackward, вас какого рода и в какой форме баг-репорты интересуют? Может там дебаг файл какой есть и его слать?