|
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
![]()
Сообщение
#1
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 7 Регистрация: 4.3.2009 Пользователь №: 2 467 Спасибо сказали: 0 раз ![]() |
Всем привет.
Пару дней назад появилось желание написать свой клиент, отличный от стронга и его клонов(в том числе визуально, по меню настроек, и даже в используемом языке программирования :-)). Немного урезанный по функциональности(в стронге достаточно функций которыми я не пользуюсь), но и со своими фишками. И в общем, дело такое, что нужен второй разработчик - дизайнер-программер на Делфе который бы хотел поучавствовать в проекте, т.к. у меня совершенно нет вкуса - нужен человек который бы сделал оформление для программы и меню настроек. Ну и прикладываю скриншот(на нем - законченная серверная часть(client<->hub)), чтобы показать, что разговор не на пустом месте, а есть определенные наработки.
Прикрепленные файлы
|
|
|
![]()
Сообщение
#2
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Нет ли желания у автора сделать консольную версию клиента? В этом случае и дизайнера не нужно будет искать, и актуальная программа получится. Хотя можно сделать и консольную версию и версию с GUI.
|
|
|
![]()
Сообщение
#3
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 7 Регистрация: 4.3.2009 Пользователь №: 2 467 Спасибо сказали: 0 раз ![]() |
Ну эм, консольную сделать так то не сложно, вот только не пойму зачем?
|
|
|
![]()
Сообщение
#4
|
|
![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз ![]() |
для работы как служба. на файловом сервенре. тут как бэ все ясно
|
|
|
![]()
Сообщение
#5
|
|
![]() InstaHub dev. ![]() ![]() ![]() Группа: Пользователи Сообщений: 91 Регистрация: 25.2.2009 Пользователь №: 2 377 Спасибо сказали: 10 раз ![]() |
Я в своё время написал на C некоторую консольную штуковину для линковки чатов двух хабов -- она подключается к двум хабам одновременно и перекидывает сообщения с одного на другой (и наоборот). В принципе, можно ее расширить и сделать полноценный консольный ДЦ-клиент.
Причем у меня она собирается и работает как под мастдаем, так и под Linux... у меня наверное времени на настоящий клиент сейчас не хватит, но все сырцы могу выдать) допиливайте )) P.S. по теме: но почему на Delphi?! это же кхм... недоязык. к тому же автоматически лишаемся кросс-платформенности. Уж тогда на C++ и на каком-нить Qt... |
|
|
![]()
Сообщение
#6
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Линковать хабы и справляться с функциями клиента - это очень разные вещи, поэтому для написания полноценного клиента не думаю, что код линковщика поможет, разве что итак известные механизмы обработки команд оттуда можно взять. Исходники выкладывай - посмотим)))
|
|
|
![]()
Сообщение
#7
|
|
![]() InstaHub dev. ![]() ![]() ![]() Группа: Пользователи Сообщений: 91 Регистрация: 25.2.2009 Пользователь №: 2 377 Спасибо сказали: 10 раз ![]() |
ну в общем да, не оригинальность тут никто и не претендует
![]() сырцы тут: там была сделана попытка написать библиотеку функций для работы с DC-хабом ( hubconn.{cpp,h} ). естественно, в ней есть только обработка команд, связанных с чатом + буферизация и разбор команд из сокета (в некотором приближении). но уж что есть то есть, может кому пригодится -- вдруг кто саму идею разовьет и дополнит... |
|
|
![]()
Сообщение
#8
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 7 Регистрация: 27.1.2009 Пользователь №: 1 995 Спасибо сказали: 0 раз ![]() |
По части дизайна могу помочь. Тебя интересует сами иконки программы?
Ну как по мне то тут надо много единомышленников задействовать, потому что как не как новый движок ДС++ и он естественно довольно сырой |
|
|
![]()
Сообщение
#9
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Самое главное, лично для меня, так это чтобы клиент был кросс-платформенным, быстрым (без всяких лишних наворотов), маленьким, консольным и с открытом С++ кодом.
Если бы данный клиент подходит по этим параметрам, то я бы посодействовал в его создании))) |
|
|
![]() ![]()
Сообщение
#10
|
|
![]() Участник ![]() ![]() Группа: Пользователи Сообщений: 46 Регистрация: 11.2.2009 Пользователь №: 2 187 Спасибо сказали: 3 раза ![]() |
Здравствуйте форучане, может мне кто-нибудь помочь?
Я хочу написать программу на С++, что-то похожее на DC++ клиента, но я не знаю как организовать процедуру "рукопожатия хаба с клиентом" ( какой посылать ответ на $lock ) . Помогите кто чем может !!! P.S не стал создавать новую тему, т.к. эта тема подходит по тематике |
|
|
![]()
Сообщение
#11
|
|
![]() AmxModx Scripter ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 302 Регистрация: 2.12.2008 Из: Королев Пользователь №: 1 283 Спасибо сказали: 127 раз ![]() |
http://mydc.ru/topic915.html
Вообще на $Lock можно отправлять любой $Key )) По крайней мере у меня это прокатывало |
|
|
![]()
Сообщение
#12
|
|
![]() InstaHub dev. ![]() ![]() ![]() Группа: Пользователи Сообщений: 91 Регистрация: 25.2.2009 Пользователь №: 2 377 Спасибо сказали: 10 раз ![]() |
Да что ты говоришь? может быть ты на таком глупом хабе проверял, который это не контролирует?
![]() вот кусочек преобразования Lock в Key. 100% работоспособен, выдран из исходников выложенного чуть выше в этой теме моего hublink. Код string HubConn::lockToKey(const string& lock) { int len = lock.length(); char *key = new char[len+1]; for(int i = 1; i < len; i++) key[i] = lock[i] ^ lock[i-1]; key[0] = lock[0] ^ lock[len-1] ^ lock[len-2] ^ 5; for(int i = 0; i < len; i++) key[i] = ((key[i]<<4) & 0xF0) | ((key[i]>>4) & 0x0F); string result; for (int i = 0; i < len; i++) { char c = key[i]; if (c == 0 || c == 5 || c == 36 || c == 96 || c == 124 || c == 126) { char buf[16]; #ifdef _WIN32 sprintf_s(buf, 16, "/%%DCN%03d%%/", key[i]); #else sprintf(buf, "/%%DCN%03d%%/", key[i]); #endif result += buf; } else result += c; } delete key; return result; } UPD: Для С++ Builder вместо sprintf_s юзаем обычный sprintf, также как и для не-win32. для MSVC очень старых версий (6.0 и ниже)-- тоже. А вообще это просто safe-вариант этой функции, в котором явно указана максимальная длина буфера, куда он будет фигачить результат. |
|
|
![]()
Сообщение
#13
|
|
![]() AmxModx Scripter ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 302 Регистрация: 2.12.2008 Из: Королев Пользователь №: 1 283 Спасибо сказали: 127 раз ![]() |
Да, PtokaX, YnHub , VerliHub - очень глупые хабы да)
|
|
|
![]()
Сообщение
#14
|
|
![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз ![]() |
ахаха, dmvn, у него внешний бот от CS есть. Заходит на хаб как клиент. ДУмаю Романов знает кое в чем толк.
|
|
|
![]() ![]()
Сообщение
#15
|
|
![]() Участник ![]() ![]() Группа: Пользователи Сообщений: 46 Регистрация: 11.2.2009 Пользователь №: 2 187 Спасибо сказали: 3 раза ![]() |
вот кусочек преобразования Lock в Key. 100% работоспособен, выдран из исходников выложенного чуть выше в этой теме моего hublink. Спасибо конечно ![]() Искал в гугле, но он ничего вразумительного про sprintf_s не сказал... Компилировал CodeGear™ C++Builder® 2009 Version 12.0.3170.16989 dmvn, вы не могли бы пояснить мне что это за функция (sprintf_s) или чем её можно заменить? Вот такая вот проблема... http://mydc.ru/topic915.html Вообще на $Lock можно отправлять любой $Key )) По крайней мере у меня это прокатывало PomanoB, я видел этот пост и там не описан алгоритм ответа на $lock. А что касается "Вообще на $Lock можно отправлять любой $Key" - это точно не вариант. |
|
|
![]()
Сообщение
#16
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
На некоторых хабах проверка ключа $lock может быть отключена, но, как говориться раз на раз не приходится. На одном хабе отключена, на другом включена, поэтому при написании клиента делать механизм отсылки хабу ключа $lock нужно обязательно!
Код void cDCProto::Lock2Key(const string &Lock, string &Key) { int count = 0, len = Lock.size(), offset = 0; char *key = 0, *tkey= 0; char * lock = new char[len+1]; UnEscapeChars(Lock, lock, len, true); key = new char[len+1]; key[0] = lock[0] ^ lock[len - 1] ^ lock[len - 2] ^ 5; while(++count < len) key[count] = lock[count] ^ lock[count - 1]; key[len]=0; count = 0; while(count++ < len) key[count - 1] = ((key[count - 1] << 4)) | ((key[count - 1] >> 4)); EscapeChars(key, len, Key, true); delete [] key; delete [] lock; } void cDCProto::UnEscapeChars(const string &src, char *dst, int &len ,bool WithDCN) { size_t pos, pos2 = 0; string start, end; unsigned char c; int i = 0; if (!WithDCN) { start = "$#"; end =";"; } else { start = "/%DCN"; end = "%/"; } pos = src.find(start); while ((pos != src.npos) && (i < src.size())) { if (pos > pos2) { memcpy(dst + i, src.c_str() + pos2, pos - pos2); i += pos - pos2; } pos2 = src.find(end, pos); if ((pos2 != src.npos) && ((pos2 - pos) <= (start.size()+3))) { c = atoi(src.substr(pos + start.size(), 3).c_str()); dst[i++] = c; pos2 += end.size(); } pos = src.find(start, pos + 1); } if (pos2 < src.size()) { memcpy(dst + i, src.c_str() + pos2, src.size() - pos2 + 1); i += src.size() - pos2; } len = i; } void cDCProto::EscapeChars(const char *buf, int len, string &dest, bool WithDCN) { dest =""; unsigned char c; ostringstream os; while(len-- > 0) { c = *(buf++); switch(c) { case 0: case 5: case 36: case 96: case 124: case 126: os.str(""); if (! WithDCN) os << "&#" << unsigned(c) << ";"; else { os.fill('0'); os << "/%DCN" << unsigned(c); os.width(0); os << "%/"; } dest += os.str(); break; default: dest += c; break; }; } } sprintf_s - это функция VS, в билдере её нету. Что делает эта функция можно догадаться, а вообще у нас тут не форум для разъяснения синтаксиса языка С++. В интернете этого добра полно, поэтому по поводу синтаксиса языка С++ спрашивай на специализированных форумах. Всё же советую перейти на VS, так как в подавляющем большинстве крупных компаний всё пишется именно на VS. |
|
|
![]()
Сообщение
#17
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 7 Регистрация: 4.3.2009 Пользователь №: 2 467 Спасибо сказали: 0 раз ![]() |
>но почему на Delphi?!
1. Потому что мне его возможностей за глаза. 2. Он не популярен в сравнении с Си, от того чувствешь себя частью небольшой, но очень гордой семьи ![]() 3. На нем удобно делать визуальные компоненты и скиновые "движочки" с необходимой функциональностью для софтины. >это же кхм... недоязык. Ну что за детсад... базовые арифметические операции(+, -, /, *, целочисленное диление, остаток целочисленного деления, булевые операции, логические поразрядные операции), классы(с поддержкой наследования и полиморфизма, разумеется) и вариации объявления их методов(public, protected, private, property, перекрытие(override), конструкторы, деструкторы, помошники класса), for-while-repeat(плюс операторы прерывания циклов: break, continue, exit, abort)/if-else/switch-case-with/процедуры-функции(а так же вариации их объявления: предварительное, интерфейсное, внешнее, типовое, "перегрузочное"(overload), встраиваемое(inline), небезопасное(unsafe), анонимное), /основные типы(порядковые, булевые, символьные, неизвестные типы, структурные типы, целые типы, действительные типы(имеющие дробную часть), встроенные типы и типы определяемые пользователем)/приведение типов/ссылки-указатели/структуры(а так же перечисления, множества)/константы-типизированные константы/использование блоков ассемблера/try..except..finally/массивы(статические, динамические, одномерные, многомерные)/интерфейсы, перегрузка операций(операторов)/шаблоны(generics). Возможно что-то забыл. Считаете, выше перечисленного вам не хватит для создания полноценного Direct Connect клиента? Лично мне - за глаза. Но если есть претензии к IDE, а не к языку, то могу согласится что официальная борландовская/кодгировская ИДЕ - багнутая и её поведение не всегда предсказуемо. >к тому же автоматически лишаемся кросс-платформенности. А мне на неё пофик - я кроме виндоуса других операционок не признаю. >на каком-нить Qt... У меня свой скиновой движок - с теми функциями, которые мне нужны, и ничего лишнего. Просто потому что мне в этом плане проще написать своё, чем капатся в чужом. >По части дизайна могу помочь. Тебя интересует сами иконки программы? Не только иконки, но и в целом само оформление программы. Например... логотип, или "окно чата будет тут, такой расцевткой, такой формы, форма табов такая, список юзеров будет тут, форма у него будет этакая, табы у него будут там-то" ![]() >Ну как по мне то тут надо много единомышленников задействовать, Совсем не зачем, я с технической частью сам легко справлюсь, разве что потом надо будет собрать народ и дружно потестить клиент в разных условиях(в частности чтобы какой-нить админ хаба его потестил с разными настройками хабов, т.к. на хабах, которые у меня установлены локально для тестинга, стоят стандартные настройки, с которыми и тестирую клиент) и на разных хабах(я тестю тока на YnHub, и иногда на Ptokax). Для проекта, и всего задуманного мною для него функционала, двух человек достаточно. Один - отвечает за всё то, что связано с технической частью клиента, второй - с интерфейсом(визуальные компоненты(типа там - окошко чата с поддержкой табов) и картинки(лого, иконки, ...)). Но у меня ещё есть два кореша, которые по надобности помогут с внутренним тестингом и какой-нить мелкой функциональностью, так что программеры как таковые есть, но нету дизайнера ![]() >потому что как не как новый движок ДС++ и он естественно довольно сырой Разработка хоть и не второй год ведётся, но на данный момент у меня клиент очень даже стабилен, хотя и умеет не так много как стронг, но я просто основательно тестю у него каждую функцию. С ним уже сейчас можно спокойно бегать по хабам и общатцо. Плюс важнейшая часть ДЦ - высчитывание TTH - у меня реализовано на уровне стронга в плане скорости, причем судя по тестам, которые мне сделали по просьбе - высчитывает наровне со стронгом. Правда, с другой стороны, мне не совсем понятны две вещи стронга - его функция сегментная закачка(а именно её технический аспект - каким образом работает эта функция), и каким образом стронг определяет пассивность/активность юзера(если только по галке на "Passive" в опциях Connection и невозможность открыть заданный порт - то вопрос отпадает). >Вообще на $Lock можно отправлять любой $Key )) >По крайней мере у меня это прокатывало Не совсем так. Такое возможно тока в случае если, на примере YnHub'a, не стоит галка на "kick user if key invalid". |
|
|
![]()
Сообщение
#18
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Исходники будут открыты?
|
|
|
![]()
Сообщение
#19
|
|
![]() Местная ТехПоддержка ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз ![]() |
Цитата >к тому же автоматически лишаемся кросс-платформенности. А мне на неё пофик - я кроме виндоуса других операционок не признаю. Тут ты ошибаешься, Брат. Не признавя другие ОСи ты страдаешь фимозом кругозора. Я, например, сисадмин (ну работаю), а значит тоже по своему программист - пишу системные скрипты и под вин и под никс (в них низя добиться кросплатформенности). Но если писать (а ты пишешь) программу и хочешь (возможно) стать давольно известным - то стоит писать на кросплатформенном языке программирования, ибо тогда (как это сделали создалели qutIM) можно добиться успеха. У меня все. |
|
|
![]()
Сообщение
#20
|
|
![]() Абсолютный новичок Группа: Пользователи Сообщений: 7 Регистрация: 4.3.2009 Пользователь №: 2 467 Спасибо сказали: 0 раз ![]() |
>Исходники будут открыты?
Кому они будут нужны? Они ж на делфе будут написаны, на недоязыке ![]() Ну а если по сути - это будет зависеть от популярности клиента. Если клиент будет не популярен - сорцы будут открыты, если популярен - то закрыты, чтобы предотвратить атаку клонов (основная причина по которой я делаю свой клиент - бесит монополия стронга и его "изменено только лого-название"-клонов). >Не признавя другие ОСи ты страдаешь фимозом кругозора. А вот тут ты ошибаешься, брат. Я начинаю разработку каждого своего проекта по принципу "меня бесит". Есть стронг и его клоны - меня бесят его клоны. Меня убогость его интерфейса и общее неудобство да и в целом дискомфорт который я получаю пользуясь им. Меня бесит что в нем есть много функций который мне нафик не нужны, и при этом нет нескольких которые мне очень нужны. Меня бесит что клоны на него основе - побольшому счету ничем не отличаются от него самого. В плане кроссплатформености - аналогично. Меня винда - абсолютно устраивает. Меня она _ничем_ не бесит, в результате чего - я не заглядываюсь на альтернативы, и как следствие - не задаюсь вопросом кроссплатформенности. >и хочешь (возможно) стать давольно известным Ну, спорить не буду - для моего самолюбия осозновать себя в какой-то мере знаменитостью, если мой дц клиент будет успешным, будет приятно. Но это не самоцель - т.к. клиент я делаю в первую очередь для себя, чтобы мне было удобно сидеть на хабе локальной сети моего провайдера. А если он понравится другим - тоже будет приятно. |
|
|
![]() ![]() |
Похожие темы
![]() |
Сейчас: 8.9.2024, 2:18 |