myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> Вопросы по протоколу NMDC, Делаю программу

Теги
Нет тегов для показа
Master255
сообщение 14.12.2014, 4:56
Сообщение #1


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Делаю программу, работающую по этому протоколу.
Нужен поиск по TTH и скачивание найденного файла.

Помогите разобраться с протоколом.

Я уже научился авторизовываться на хабе. Т.е. посылаю вычисленный ключ и $MyInfo. Тут всё хорошо пока что.

Теперь мне нужен поиск по TTH.

Для этого посылаю:

$Search Hub:Master256 F?T?0?9?TTH:7FZEBBKAWID5QSOX5DQFDZS6CXPCBV63RPNUCTA|

Вопрос вот в чём:
Вот я послал это хабу. И что дальше??? Как мне принять ответ???
На мой сокет поступает огромное количество данных.
Т.е. я правильно понимаю, что нужно парсить эти данные???
Но что в них искать?
Я никак не могу победить кодировку данных.

Соединяюсь с хабом dc.filimania.com:411.
Код на Java у меня.

Преобразую так key=new String(p2preq, "windows-1251");
В ответе изредка появляется текст на русском и английском. А остальное - это кракозябры.
Регулярно парсится мой ник. Как я понял это передаётся список ников постоянно.


Вот весь код
Код
String key="";
            Socket sckServer1 = new Socket();
            try
            {
                sckServer1.connect(p2padrr);
                sckServer1.getInputStream().read(p2preq);
                key=new String(p2preq);
                key=key.substring(key.indexOf("$Lock ")+6, key.indexOf(" Pk="));
                sckServer1.getOutputStream().write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch ZPipe0|"+lockToKey(key)+"$ValidateNick Master256|").getBytes());
                sckServer1.getOutputStream().flush();
                sckServer1.getOutputStream().write(("$MyINFO $ALL Master256 <FlylinkDC++ V:17958,M:P,H:1/2/3,S:20>$ $1A$123@321.ru$50000000000$|").getBytes());
                sckServer1.getOutputStream().flush();
                sckServer1.getOutputStream().write(("$Search Hub:Master256 F?T?0?9?TTH:7FZEBBKAWID5QSOX5DQFDZS6CXPCBV63RPNUCTA|").getBytes());
                sckServer1.getOutputStream().flush();

Разобрался с кодировкой. Ошибочно использовал ZPipe0. Из за этого всё приходило в сжатом виде.

Со всем разобрался.
В описании протокола много проелов и не ясностей.
Долго не мог понять где ловить поисковой ответ от сервера. Как соединятся с пользователями для скачивания файлов...но всё решилось.
Вот код, если кому-то интересно. Это грубый черновик конечно же. Тут чтение первых скольки-то байт фильма Неудержимые 3 с хаба филимания у одного из пользователей. Проверено. Работает.
Код
p2padrr=new InetSocketAddress("dc.filimania.com", 411);
            
            String key="";
            Socket sckServer1 = new Socket();
            Socket sckServer2 = new Socket();
            try
            {
                sckServer1.connect(p2padrr);
                sckServer1.getInputStream().read(p2preq);
                key=new String(p2preq);
                key=key.substring(key.indexOf("$Lock ")+6, key.indexOf(" Pk="));
                sckServer1.getOutputStream().write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch|"+lockToKey(key)+"$ValidateNick Master256|").getBytes());
                sckServer1.getOutputStream().flush();
                sckServer1.getOutputStream().write(("$Version 1,0091|$MyINFO $ALL Master256 <FlylinkDC++ V:r502-x64,M:P,H:1/0/0,S:15>$ $100 $$500000000000$|").getBytes());
                sckServer1.getOutputStream().flush();
                p2preq=new byte[1024*100];

                int i8=10;
                while ((bytes_read = sckServer1.getInputStream().read(
                        p2preq)) != -1)
                        {
                key=new String(p2preq, "windows-1251");
                if ((key.contains("YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI")==true) || (key.contains("$SR")==true)
                         || (key.contains("Master255")==true) || (key.contains("Master256")==true)
                         || (key.contains("77.241.32.197")==true)) {
                    Log.d("999", key.substring(0, bytes_read));
                } else {
                Log.d("999", key.substring(0, bytes_read));}
                
                if (i8==0){
                sckServer1.getOutputStream().write(("$Search Hub:Master256 F?T?0?9?TTH:YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI|").getBytes());
                sckServer1.getOutputStream().flush();
                p2preq=new byte[1024*100];
                while ((bytes_read = sckServer1.getInputStream().read(
                        p2preq)) != -1)
                        {
                    key=new String(p2preq, "windows-1251");
                    Log.d("999", key.substring(0, bytes_read));
                    if (key.contains("$SR")) {break;}
                    p2preq=new byte[1024*100];
                        }
                sckServer1.getOutputStream().write(("$RevConnectToMe Master256 serpentarium1377|").getBytes());
                sckServer1.getOutputStream().flush();
                p2preq=new byte[1024*100];
                while ((bytes_read = sckServer1.getInputStream().read(
                        p2preq)) != -1)
                        {
                    key=new String(p2preq, "windows-1251");
                    Log.d("999", key.substring(0, bytes_read));
                    if (key.contains("$ConnectToMe Master256")) {
                        String hgf=key.substring(key.indexOf("$ConnectToMe Master256")+23, key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23));
                        int u=Integer.parseInt(key.substring(key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23)+1, key.indexOf("|", key.indexOf(":", key.indexOf("$ConnectToMe Master256")+23))));
                        InetSocketAddress p2padrr1=new InetSocketAddress(hgf, u);
                        sckServer2.connect(p2padrr1);
                        break;}
                    p2preq=new byte[1024*100];
                        }
                    sckServer2.getOutputStream().write(("$MyNick Master256|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.785ABCABCRef=dchub://dc.dcmagnets.ru|").getBytes());
                    sckServer2.getOutputStream().flush();
                    p2preq=new byte[1024*100];
                    bytes_read = sckServer2.getInputStream().read(p2preq);
                    
                        key=new String(p2preq, "windows-1251");
                        Log.d("999", key.substring(0, bytes_read));
                        p2preq=new byte[1024*100];
                    
                    sckServer2.getOutputStream().write(("$Supports MiniSlots XmlBZList ADCGet TTHL TTHF ZLIG|$Direction Download 2436|$Key СА° A С±±АА0Р0 0 0 0 0 0|").getBytes());
                    sckServer2.getOutputStream().flush();
                    p2preq=new byte[1024*100];
                    sckServer2.getOutputStream().write(("$ADCGET tthl TTH/YQOU7P77AXP7FMKY6R5XJKCNYBHC46LZ2BXTZNI 0 -1 ZL1|").getBytes());
                    sckServer2.getOutputStream().flush();
                    while ((bytes_read = sckServer2.getInputStream().read(
                            p2preq)) != -1)
                            {
                        key=new String(p2preq, "windows-1251");
                        Log.d("999", key.substring(0, bytes_read));
                        p2preq=new byte[1024*100];
                            }
                    i8=30000;
                }
                i8=i8-1;
                p2preq=new byte[1024*100];
                }
                
            } catch (IOException e3)
            {
                e3.printStackTrace();
            }
Go to the top of the page
+Quote Post
HackFresse
сообщение 15.12.2014, 11:04
Сообщение #2


Продвинутый участник
****

Группа: Пользователи
Сообщений: 155
Регистрация: 11.1.2009
Пользователь №: 1 772
Спасибо сказали: 29 раз




заходи на местный хаб dchub://hub.mydc.ru и спрашивай в чате (или у меня там в личке, чем смогу - помогу)

Go to the top of the page
+Quote Post
PPA
сообщение 15.12.2014, 15:06
Сообщение #3


Участник
**

Группа: Пользователи
Сообщений: 36
Регистрация: 6.2.2009
Из: Липецк
Пользователь №: 2 131
Спасибо сказали: 8 раз




Цитата(Master255 @ 14.12.2014, 4:56) *
Делаю программу, работающую по этому протоколу.
Нужен поиск по TTH и скачивание найденного файла.

А это у тебя будет робот? или ты просто изучаешь как оно внутри работает
что заметил
1. Ты используешь пассивный поиск специально? думаю при нагрузке от бота админы вычислят это и забанят
2. У тебя в тэге закос под FlylinkDC++ предлагаю поменять на свой )
3. Код заливай на github )
Go to the top of the page
+Quote Post
Master255
сообщение 16.12.2014, 21:12
Сообщение #4


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Во первых! Вот http://nmdc.sourceforge.net/NMDC.html нормальная инструкция по протоколу, а не то что на этом сайте-форуме и в ссылках. Надо обновить ссылки

Цитата(PPA @ 15.12.2014, 15:06) *
А это у тебя будет робот? или ты просто изучаешь как оно внутри работает
что заметил
1. Ты используешь пассивный поиск специально? думаю при нагрузке от бота админы вычислят это и забанят
2. У тебя в тэге закос под FlylinkDC++ предлагаю поменять на свой )
3. Код заливай на github )

Я делаю медиа плеер, а в будущем гибридное облако для обмена данными. Ничего противозаконного.
Код залью на гит хаб. Вот здесь будет код https://github.com/master255/ImmortalPlayer
Это моё приложение для андройд программистов, что бы они тоже могли писать свои программы с использованием моих технологий.
Код принял уже рабочий вид.

Скорей всего будет ничего не понятно. Так как тут не полный код. Но суть понять можно.
Вот процедура подключения
Код
private boolean connectDC()
        {
            p2padrr = new InetSocketAddress(Hub, dcPort);
            p2pServer = new Socket();
            p2preq = new byte[1024 * 10];
            try
            {
                p2pServer.connect(p2padrr);
                p2pServer.getInputStream().read(p2preq);
                str = new String(p2preq, CHARENCODING);
                str = str.substring(str.indexOf("$Lock ") + 6,
                        str.indexOf(" Pk="));
                p2pServer
                        .getOutputStream()
                        .write(("$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch|"
                                + lockToKey(str)
                                + "$ValidateNick "
                                + nick
                                + "|" + "$Version 1,0091|$MyINFO $ALL " + nick + " <FlylinkDC++ V:r502-x64,M:P,H:1/0/0,S:15>$ $100 $$600000000000$|")
                                .getBytes());
                p2pServer.getOutputStream().flush();
                p2preq = new byte[1024 * 10];
                while ((bytes_read = p2pServer.getInputStream().read(p2preq)) != -1)
                {
                    str = new String(p2preq, CHARENCODING);
                    if (str.contains("$ValidateDenide"))
                    {
                        nick = nick + Integer.toString(postFix);
                        postFix = postFix + 1;
                        if (postFix > 100)
                        {
                            errorDC = true;
                            return false;
                        } else
                        {
                            connectDC();
                        }
                    }
                    if (str.contains("$Search"))
                    {
                        errorDC = false;
                        return true;
                    }
                }
            } catch (Exception e)
            {}
            errorDC = true;
            return false;
        }


Этот кусок ищет, запрашивает, подключается и качает.

Код
// Read from DC++ peering network!
            if ((useDC == true) && (errorDC == false))
            {
                try
                {
                    if ((p2pServer == null)
                            || (p2pServer.isConnected() != true))
                    {
                        if (connectDC() == false)
                        {
                            errorDC = true;
                            throw new NullPointerException("No connect");
                        }
                    }
                    try
                    {
                        os = new RandomAccessFile(file1, "rwd");
                        os.seek(request._rangePosition);
                    } catch (FileNotFoundException e2)
                    {
                        e2.printStackTrace();
                    }
                    if (nickUser.length() < 1)
                    {// then get nick user
                        p2pServer.getOutputStream()
                                .write(("$Search Hub:" + nick + " F?T?0?9?TTH:"
                                        + TTH + "|").getBytes());
                        p2pServer.getOutputStream().flush();
                        p2preq = new byte[1024 * 10];
                        retr = 40;// number of answers to searches
                        while ((bytes_read = p2pServer.getInputStream().read(
                                p2preq)) != -1)
                        {
                            str = new String(p2preq, CHARENCODING);
                            Log.d("999", str.substring(0, bytes_read));
                            if (str.contains("$SR"))
                            {
                                nickUser = str.substring(
                                        str.indexOf("$SR") + 4, str.indexOf(
                                                " ", str.indexOf("$SR") + 4));
                                urlsize = Integer
                                        .parseInt(str.substring(
                                                str.indexOf("",
                                                        str.indexOf("$SR")) + 1,
                                                str.indexOf(
                                                        " ",
                                                        str.indexOf("", str
                                                                .indexOf("$SR")) + 1)));
                                break;
                            }
                            retr = retr - 1;
                            if (retr == 0) { throw new NullPointerException(
                                    "No search result"); }
                            p2preq = new byte[1024 * 10];
                        }
                    }
                    p2pServer.getOutputStream().write(
                            ("$RevConnectToMe " + nick + " " + nickUser + "|")
                                    .getBytes());
                    p2pServer.getOutputStream().flush();
                    p2preq = new byte[1024 * 10];
                    retr = 40;// number of answers (user) to searches
                    while ((bytes_read = p2pServer.getInputStream()
                            .read(p2preq)) != -1)
                    {
                        str = new String(p2preq, CHARENCODING);
                        Log.d("999", str.substring(0, bytes_read));
                        if (str.contains("$ConnectToMe " + nick))
                        {
                            ipUser = str.substring(str.indexOf("$ConnectToMe "
                                    + nick) + ("$ConnectToMe "+ nick).length()+1, str.indexOf(":",
                                    str.indexOf("$ConnectToMe " + nick) + ("$ConnectToMe "+ nick).length()+1));
                            portUser = Integer
                                    .parseInt(str.substring(str
                                            .indexOf(
                                                    ":",
                                                    str.indexOf("$ConnectToMe "
                                                            + nick) + ("$ConnectToMe "+ nick).length()+1) + 1,
                                            str.indexOf("|", str.indexOf(
                                                    ":",
                                                    str.indexOf("$ConnectToMe "
                                                            + nick) + ("$ConnectToMe "+ nick).length()+1))));
                            break;
                        }
                        p2preq = new byte[1024 * 10];
                        retr = retr - 1;
                        if (retr == 0) { throw new NullPointerException(
                                "No answer from User"); }
                    }
                    sckUser = new Socket();
                    sckUser.setSoTimeout(1500);
                    InetSocketAddress p2padrr1 = new InetSocketAddress(ipUser,
                            portUser);
                    sckUser.connect(p2padrr1);
                    sckUser.getOutputStream()
                            .write(("$MyNick "
                                    + nick
                                    + "|$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.785ABCABCRef=dchub://"
                                    + Hub
                                    + "|$Supports MiniSlots ADCGet TTHL TTHF|$Direction Download 7777|$Key СА° A С±±АА0Р0 0 0 0 0 0|"
                                    + "$ADCGET file TTH/" + TTH + " "
                                    + request._rangePosition + " -1|")
                                    .getBytes());
                    sckUser.getOutputStream().flush();
                    // header
                    if ((request._rangePosition > 0)
                            || (request._overRange == true))
                    {
                        header = "HTTP/1.1 206 Partial Content\r\nAccept-Ranges: bytes\r\nContent-Length: "
                                + Long.toString(urlsize
                                        - request._rangePosition)
                                + "\r\nContent-Range: bytes "
                                + Long.toString(request._rangePosition)
                                + "-"
                                + Long.toString(urlsize - 1)
                                + "/"
                                + urlsize
                                + "\r\nContent-Type: application/octet-stream\r\n\r\n";
                    } else
                    {
                        header = "HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nContent-Length: "
                                + Long.toString(urlsize)
                                + "\r\nContent-Disposition: attachment\r\nContent-Type: application/octet-stream\r\n\r\n";
                    }
                    sckPlayer.getOutputStream().write(header.getBytes(), 0,
                            header.length());
                    // removes $ADCSND
                    p2preq = new byte[1024 * 10];
                    bytes_read = sckUser.getInputStream().read(p2preq);
                    str = new String(p2preq, CHARENCODING);
                    if (str.contains("$ADCSND"))
                    {
                        str = str.substring(str.indexOf("$MyNick"),
                                str.indexOf("|", str.indexOf("$ADCSND")) + 1);
                        bytes_read = bytes_read - str.length();
                    } else
                    {
                        str = "";
                    }
                    sendByte = sendByte + bytes_read;
                    os.write(p2preq, str.length(), bytes_read);
                    sckPlayer.getOutputStream().write(p2preq, str.length(),
                            bytes_read);
                    while ((bytes_read = sckUser.getInputStream().read(p2preq)) != -1)
                    {
                        os.write(p2preq, 0, bytes_read);
                        sendByte = sendByte + bytes_read;
                        sckPlayer.getOutputStream()
                                .write(p2preq, 0, bytes_read);
                    }
                    sckPlayer.getOutputStream().flush();
                } catch (Exception e3)
                {
                    e3.printStackTrace();
                }
            }

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

А программа будет вот эта https://play.google.com/store/apps/details?...ry.mycollection
http://4pda.ru/forum/index.php?showtopic=580001
Go to the top of the page
+Quote Post
alex82
сообщение 17.12.2014, 1:44
Сообщение #5


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Master255, и в чем же заключается ненормальность нашего описания протокола? Нашли ошибки? Покажите, и мы исправим их.

P. S. Полагаю, многим юзерам и админам хабов не понравится Ваша личерская программа, и они начнут яростно с ней бороться.
Go to the top of the page
+Quote Post
Master255
сообщение 17.12.2014, 1:59
Сообщение #6


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(alex82 @ 17.12.2014, 1:44) *
Master255, и в чем же заключается ненормальность нашего описания протокола? Нашли ошибки? Покажите, и мы исправим их.

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

А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места.

Читайте внимательно. В моей программе нет ничего противозаконного. То что она не раздаёт - это временный факт. Который не выгоден не только хабам, но и пользователям этой программы. Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить.
Go to the top of the page
+Quote Post
alex82
сообщение 17.12.2014, 3:20
Сообщение #7


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Master255 @ 17.12.2014, 0:59) *
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места.
Дело в том, что Ваше мнение без ссылок на конкретные ошибки выглядит как пук в лужу. С таким же успехом я могу сказать, что Ваша программа хуже чем вон та, и выдолжны немедленно заменить ее на другую.

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

Конкретных примеров навалом - как минимум 4 опенсорсных хаба, и целая куча опенсорсных клиентов. Качайте и ковыряйте на здоровье. Или Вы хотите, чтобы Вам разжевали и в рот положили?

Цитата
Пишу по частям...как могу. И так должны спасибо говорить.
Спасибо за что? За конструктивную критику? Ну так я пока что не вижу конструктива.
Go to the top of the page
+Quote Post
Setuper
сообщение 17.12.2014, 10:12
Сообщение #8


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Цитата(Master255 @ 17.12.2014, 2:59) *
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места.

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


Могу сказать Вам как java программист java программисту, что Ваш код просто ужасен. Макаронный код, похожий на код студента.

По поводу каких-то ошибок в описании могу сказать, что возможно Вы сами еще не до конца разобрались в протоколе и путаете механизмы активного и пассивного поиска.
Go to the top of the page
+Quote Post
HackFresse
сообщение 17.12.2014, 10:53
Сообщение #9


Продвинутый участник
****

Группа: Пользователи
Сообщений: 155
Регистрация: 11.1.2009
Пользователь №: 1 772
Спасибо сказали: 29 раз




Цитата(Master255 @ 17.12.2014, 1:59) *
А может мне за вас ещё всё исправить? Что вы несёте! Я программист! Высказал своё мнение о том что та инструкция лучше чем все ваши вместе взятые. Вы и сами должны знать о том что у вас там не так. У вас многие теги вообще не описаны. Мало конкретных примеров. Пишите что данные идут через udp, а они идут через TCP. По вашей инструкции программу не написать. Мне приходилось много гуглить. И после того как я нашёл эту инструкцию всё встало на свои места.

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

Сколько много пафоса, однако!

Цитата
Я же не могу сразу написать звездолёт. Пишу по частям...как могу. И так должны спасибо говорить.

Это кто кому должен говорить спасибо? За что? За "абы как написанные части звездолёта"? Спасибо, чо уж там


Цитата
Мне приходилось много гуглить.

Аргументный аргумент.

Цитата
Пишите что данные идут через udp, а они идут через TCP.

Это повод еще раз открыть "нормальную инструкция по протоколу" и увидеть, что и там ТОЖЕ написано про UDP. и ВНЕЗАПНО протоколы зависят от режима подключения.
Гуглилось хоть и много, но плохо, да и "нормальную инструкцию" нормально прочитать тоже не получилось.. пичалька


Цитата
Я программист!

Преклоняемся, о великий! Как посмели мы сомневаться, как сразу не признали.. Прости нас, ничтожных!
Go to the top of the page
+Quote Post
Master255
сообщение 17.12.2014, 13:22
Сообщение #10


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(Setuper @ 17.12.2014, 10:12) *
Могу сказать Вам как java программист java программисту, что Ваш код просто ужасен. Макаронный код, похожий на код студента.

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

Вы андройд разработчик? в чём ужас?? Хотя бы один пример где просто ужасно???

Ничего я не путаю. Про все механизмы знаю. Уже наизусть помню половину команд протокола и их синтаксис.

Цитата(alex82 @ 17.12.2014, 3:20) *
Дело в том, что Ваше мнение без ссылок на конкретные ошибки выглядит как пук в лужу. С таким же успехом я могу сказать, что Ваша программа хуже чем вон та, и выдолжны немедленно заменить ее на другую.

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

Конкретных примеров навалом - как минимум 4 опенсорсных хаба, и целая куча опенсорсных клиентов. Качайте и ковыряйте на здоровье. Или Вы хотите, чтобы Вам разжевали и в рот положили?

Спасибо за что? За конструктивную критику? Ну так я пока что не вижу конструктива.


Я пишу для программистов. Код открытый! Другие будут брать мой код и кодить вам программы о которых вы сейчас только мечтаете. За это и спасибо.
Go to the top of the page
+Quote Post
Ksan
сообщение 17.12.2014, 15:18
Сообщение #11


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Считаю, что нужно всем умерить пыл и снизить тон разговора!
Человек делает нечто полезное, сгоряча, от незнания специфики этого форума, говорит некоторые нелицеприятные слова, но всё же остальным не стоит сразу же закусывать удила, ибо это идёт не на пользу общему делу! Человек закроется и начнёт что-то очень нужное выдавать на гора в других местах...а зачем? Нужно найти компромисс, показывать друг другу ошибки, признавать ошибки, если поняли, что они присутствуют... И в любом случае следить за словами! Обидеть художника может каждый.. но если вы сами художники, тем более должны понимать, что обидно слышать неприятные слова вместо помощи и понимания..
Учитесь терпению у министра иностранных дел России С. Лаврова, ребята! И у В.Чуркина, нашего представителя в ООН. big_smile.gif
Надеюсь на понимание!


Спасибо сказали:
Go to the top of the page
+Quote Post
alex82
сообщение 17.12.2014, 21:15
Сообщение #12


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата
Вы андройд разработчик? в чём ужас?? Хотя бы один пример где просто ужасно???

Я ни разу не android-разработчик, и совсем не знаю java но даже я вижу ужас, от которого стынет кровь в жилах.
Код
str.contains("$ValidateDenide")

Т.е. если строка содержит $ValidateDenide в любом месте, то эта строка считается указанной командой. В таком случае отфильтровать Ваш клиент будет не то что просто, а очень просто. Для этого достаточно отправить ему чушь вроде этой:
Код
$oZshb6243dss34 $ValidateDenide|
Нормальные клиенты проигнорируют это, ибо оно не является командой протокола, а Ваш клиент отключится, посчитав, что ник занят.

И так по всему коду. Однако, в результате минутного гугления мы выходим на эту страницу, где мы находим эту функцию:
Код
public boolean startsWith(String prefix)
И логика подсказывает нам, что для проверки команд протокола следует использовать именно ее.

Так что Вы не знаете не только протокол DC, но даже тот язык, на котором пытаетесь писать программы. А посему умерьте пафос, и учитесь, учитесь, и еще раз учитесь.
Go to the top of the page
+Quote Post
Master255
сообщение 18.12.2014, 15:08
Сообщение #13


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(alex82 @ 17.12.2014, 21:15) *
Я ни разу не android-разработчик, и совсем не знаю java но даже я вижу ужас, от которого стынет кровь в жилах.
Код
str.contains("$ValidateDenide")

Т.е. если строка содержит $ValidateDenide в любом месте, то эта строка считается указанной командой. В таком случае отфильтровать Ваш клиент будет не то что просто, а очень просто. Для этого достаточно отправить ему чушь вроде этой:
Код
$oZshb6243dss34 $ValidateDenide|
Нормальные клиенты проигнорируют это, ибо оно не является командой протокола, а Ваш клиент отключится, посчитав, что ник занят.

И так по всему коду. Однако, в результате минутного гугления мы выходим на эту страницу, где мы находим эту функцию:
Код
public boolean startsWith(String prefix)
И логика подсказывает нам, что для проверки команд протокола следует использовать именно ее.

Так что Вы не знаете не только протокол DC, но даже тот язык, на котором пытаетесь писать программы. А посему умерьте пафос, и учитесь, учитесь, и еще раз учитесь.

У вас явный эффект Даннинга-Крюгера. Пафоса тут никакого нет. Есть недопонимание происходящего с вашей стороны.
То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете давать советы, если не разработчик??? Что это за новости вообще? Если вы пользователь, то вы можете лишь спрашивать когда заработает то или другое и желать каких-то новых функций. Зачем вы лезите туда где ничего не понимаете и пытаетесь нагуглить?
Гуглить полезно и критику к коду я тоже люблю. Особенно когда она по делу.
Ну я не знаю, с чего начать даже. Ваш коммент ни в какие ворота.
Проверка наличия $ValidateDenide происходит только при регистрации на хабе. В этот момент моему клиенту ничего нельзя послать, кроме стандартных команд автоответов хаба. На хабе тысячи пользователей. Зачем вообще кому-то что-то слать??? Я уже повторял, что моя программа не будет нарушать никаких законов хабов. Проверка contains делается потому что ответы через сокет поступают не предсказуемо. Я поставил буфер в 10к\байт. И чем закончатся предыдущие 10к.байт и начнутся следующие непонятно. Это всё сделано потому что сначала хаб присылает список ников. Который заканчивается началом команды $Search. И между командой $Search и началом авторизации никто ничего не может мне послать, если хаб не блокирует меня по ipадресу и тогда у меня даже коннекта не получится. И отсутствие коннекта тоже продумано. А если брать ещё то что разные хабы работают по разному и отсылают вместо ников ещё какую-то ерунду...а в спецификации чётко прописано, что просто в чат невозможно скинуть символы $, |, то команда contains именно то что нужно. А команда startsWith может ошибаться даже если на один бит будет сдвиг. А это опасно продолжением отсылки команд и отключением от сервера. Это предусмотрено. Но в таком случае программа будет делать много циклов что бы просто авторизоваться. А это много времени...что крайне не допустимо по условию задачи.

Можно ещё много рассказывать почему вы не правы, но я думаю можно сказать коротко - вы не программист!

Цитата(Ksan @ 17.12.2014, 15:18) *
Считаю, что нужно всем умерить пыл и снизить тон разговора!
Человек делает нечто полезное, сгоряча, от незнания специфики этого форума, говорит некоторые нелицеприятные слова, но всё же остальным не стоит сразу же закусывать удила, ибо это идёт не на пользу общему делу! Человек закроется и начнёт что-то очень нужное выдавать на гора в других местах...а зачем? Нужно найти компромисс, показывать друг другу ошибки, признавать ошибки, если поняли, что они присутствуют... И в любом случае следить за словами! Обидеть художника может каждый.. но если вы сами художники, тем более должны понимать, что обидно слышать неприятные слова вместо помощи и понимания..
Учитесь терпению у министра иностранных дел России С. Лаврова, ребята! И у В.Чуркина, нашего представителя в ООН. big_smile.gif
Надеюсь на понимание!

Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Ссылки я все указал. Код уже на гитхабе. Кому надо найдёт.
Go to the top of the page
+Quote Post
PPA
сообщение 18.12.2014, 16:15
Сообщение #14


Участник
**

Группа: Пользователи
Сообщений: 36
Регистрация: 6.2.2009
Из: Липецк
Пользователь №: 2 131
Спасибо сказали: 8 раз




Цитата(Master255 @ 18.12.2014, 15:08) *
Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Ссылки я все указал. Код уже на гитхабе. Кому надо найдёт.


Хорошо что продвигаешь nmdc на мобилки и код открытый
то что у тебя он не идеальный - так у всех есть говнокод
но если это работает - то уже победа big_smile.gif отрефакторишь потом.
p.s.
Если не сложно замени сразу тэг клиента FlylinkDC на ImmortalPlayer
https://github.com/master255/ImmortalPlayer...Proxy.java#L337
на хабах будет сразу видно кто пользуется твоей программкой.




Спасибо сказали:
Go to the top of the page
+Quote Post
Master255
сообщение 18.12.2014, 16:27
Сообщение #15


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(PPA @ 18.12.2014, 16:15) *
Хорошо что продвигаешь nmdc на мобилки и код открытый
то что у тебя он не идеальный - так у всех есть говнокод
но если это работает - то уже победа big_smile.gif отрефакторишь потом.
p.s.
Если не сложно замени сразу тэг клиента FlylinkDC на ImmortalPlayer
https://github.com/master255/ImmortalPlayer...Proxy.java#L337
на хабах будет сразу видно кто пользуется твоей программкой.

Ок
Go to the top of the page
+Quote Post
alex82
сообщение 19.12.2014, 3:08
Сообщение #16


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата
Есть недопонимание происходящего с вашей стороны.
Тут имеестя некоторое недопонимание с вашей стороны. Мне по большому счету насрать, как будет работать Ваша программа. Того говнокода, что вы выкладывали, вполне достаточно для того, чтобы составить о ней представление. Нет, я не пользователь, и мне все равно, когда там появятся какие-то свистопределки. Я вообще достаточно негативно отношусь к операционной системе, под которую вы пытаетесь написать программу, поскольку видел, как она работает.

Я предложил Вам указать на конкретые ошибки лишь потому, что имею некоторые права на этом форуме, и, как результат, могу эти самые ошибки исправить. И тут понеслось...

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

Цитата
По вашей инструкции программу не написать. Мне приходилось много гуглить.
А может мне за вас ещё всё написать??? Что вы несёте!!! Я модератор!!!11 Высказал своё мнение о том что неплохо бы дать ссылки на ошибки!!! И где они, ссылки-то???

Цитата
Проверка contains делается потому что ответы через сокет поступают не предсказуемо. Я поставил буфер в 10к\байт. И чем закончатся предыдущие 10к.байт и начнутся следующие непонятно.
У вас явный эффект быдлокодера. Непредсказуемости тут никакой нет. Есть недопонимание происходящего с вашей стороны.
То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете писать программы, если не разработчик??? Что это за новости вообще???77 Если вы пользователь, то вы можете лишь спрашивать когда появится та или иная программа и желать каких-то новых программ. Зачем вы лезите туда где ничего не понимаете и пытаетесь написать программу?
Гуглить полезно и критику к форуму я тоже люблю. Особенно когда она по делу.
Ну я не знаю, с чего начать даже. Ваша программа ни в какие ворота.
Судя по Вашим же словам, она работает как предсказательница Ванга - пытается угадать, что же произойдет, а когда у нее это не получается, перезаходит на хаб. Но мы-то знаем, что тот самый символ |, который, как Вы сами сказали, запрещен в чате, запрещен там не просто так. Это символ окончания команды. Проще говоря в DC, который вы уже знаете наизусть, команды выглядят следующим образом:
Код
$SomeCommand|$OtherCommand command_parameters|$OtherCommand command_parameters|$OtherCommand command_parameters|
Из этого следует, что никакой непредсказуемости и неопределенности в протоколе DC нет и не может быть. Каждая команда заканчивается символом |, и после этого сразу же следует другая команда.

Можно ещё много рассказывать почему вы не правы, но я думаю можно сказать коротко - вы не программист!

Цитата
команда contains
Что вы несёте! В языках программирования есть функции и методы, а команды - в футболе.

Цитата
Во первых! Вот http://nmdc.sourceforge.net/NMDC.html нормальная инструкция по протоколу, а не то что на этом сайте-форуме и в ссылках. Надо обновить ссылки
Я вообще не знаю о чём тут разговаривать. Тема вроде бы исчерпана. Протокол описан хорошо. По данному описанию написана не одна реализация DC-клиента. Под каждым постом есть кнопка [!], с помощью которой можно сообщить администрации о найденных ошибках. Кому надо разберется.

P.S. Орфографические и пунктуационные ошибки в данном посте - результат копирования стиля речи автора темы, и они добавлены умышленно. Следовательно, не нужно пинать меня за них.


Спасибо сказали:
Go to the top of the page
+Quote Post
Master255
сообщение 19.12.2014, 4:04
Сообщение #17


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(alex82 @ 19.12.2014, 3:08) *
Тут имеестя некоторое недопонимание с вашей стороны. Мне по большому счету насрать, как будет работать Ваша программа. Того говнокода, что вы выкладывали, вполне достаточно для того, чтобы составить о ней представление. Нет, я не пользователь, и мне все равно, когда там появятся какие-то свистопределки. Я вообще достаточно негативно отношусь к операционной системе, под которую вы пытаетесь написать программу, поскольку видел, как она работает.

Я предложил Вам указать на конкретые ошибки лишь потому, что имею некоторые права на этом форуме, и, как результат, могу эти самые ошибки исправить. И тут понеслось...

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

А может мне за вас ещё всё написать??? Что вы несёте!!! Я модератор!!!11 Высказал своё мнение о том что неплохо бы дать ссылки на ошибки!!! И где они, ссылки-то???

У вас явный эффект быдлокодера. Непредсказуемости тут никакой нет. Есть недопонимание происходящего с вашей стороны.
То что вы ниразу не разработчик мне ясно понятно. Не понятно одно - как вы смеете писать программы, если не разработчик??? Что это за новости вообще???77 Если вы пользователь, то вы можете лишь спрашивать когда появится та или иная программа и желать каких-то новых программ. Зачем вы лезите туда где ничего не понимаете и пытаетесь написать программу?
Гуглить полезно и критику к форуму я тоже люблю. Особенно когда она по делу.
Ну я не знаю, с чего начать даже. Ваша программа ни в какие ворота.
Судя по Вашим же словам, она работает как предсказательница Ванга - пытается угадать, что же произойдет, а когда у нее это не получается, перезаходит на хаб. Но мы-то знаем, что тот самый символ |, который, как Вы сами сказали, запрещен в чате, запрещен там не просто так. Это символ окончания команды.


Ответить нечего. Вы просто троль. Посмеялся над вашими изречениями))).
Go to the top of the page
+Quote Post
Ksan
сообщение 19.12.2014, 12:00
Сообщение #18


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Пора на форуме добавить опцию минусования комментов..
Я серьёзно!
Go to the top of the page
+Quote Post
Nickolya
сообщение 19.12.2014, 13:39
Сообщение #19


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




1. Ну а смысл минусования комментов? Заминусуете вы коммент, и что?
Полезность комментов получается из количества "Спасибо". Если их 0, то значит и коммент никому полезен не был, отсюда можно уже судить о его содержании big_smile.gif

2. Форум чтобы общаться и помогать друг-другу. Не хотите помогать, потролльте/покритикуйте в другом месте. choler.gif

3. Помнится писал я на луа свой клиент для хаба, и тоже сначала ломал голову над протоколом, но потом все встало на места. Надо просто немного терпения.
Писал я кстати по инструкции Сетапера ака Ильи, и все очень замечательно получалось.

Выкладывать сначала весь код нет смысла, пока он не работает полноценно, это ошибка №1.
Спрашивать стоит именно про те части программы, что не получаются/не работают. Спрашивать конструктивно и с уважением, тогда и ответ будет соответствующий.

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

И конкретный конструктив по логике: вы в буфер получаете какую-то "кашу". Эту кашу вы дробите по символу конца команы протокола, т.е. |
И если у вас последняя команда не заканчивается этим символом, значит она не влезла в буфер. Вы этот кусок команды сохраняете, и приклеиваете к началу следующего буфера, который так же дробится по |.
И так до бесконечности. Вот тогда никакой непредсказуемости в протоколе не будет. Он достаточно простой и понятный на самом деле.
Go to the top of the page
+Quote Post
Master255
сообщение 19.12.2014, 15:08
Сообщение #20


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 13.12.2014
Пользователь №: 12 606
Спасибо сказали: 1 раз




Цитата(Ksan @ 19.12.2014, 12:00) *
Пора на форуме добавить опцию минусования комментов..
Я серьёзно!

не надо никаких репрессий. И так в жизни дерьма хватает)))


Спасибо сказали:
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts ВАЖНО: Topic has attachmentsВопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
1 049 Wariner 984 964 3.2.2019, 12:51 Посл. сообщение: MIKHAIL
No new ВАЖНО: Topic has attachmentsВаши Вопросы И Предложения По Поводу Форума
447 Svyat 319 069 20.10.2015, 19:39 Посл. сообщение: Ksan
No New Posts От: Вопросы Разработчикам Скриптов
От темы с ID: 173
0 MIKHAIL 4 296 23.1.2015, 0:56 Посл. сообщение: MIKHAIL
No New Posts Вопросы к Phazeus по Экзекутору
Мастер может забанить мастера, как решить в Экзекуторе?
1 AndreiDC 5 325 31.10.2014, 19:20 Посл. сообщение: Ksan
No new От: Вопросы Разработчикам Скриптов
От темы с ID: 173
29 Wariner 25 807 28.1.2014, 13:11 Посл. сообщение: Alexey
No new Topic has attachmentsВопросы по RusHub
Технические вопросы
316 Jaska 267 185 19.12.2013, 13:59 Посл. сообщение: mod
No new Topic has attachmentsМелкие вопросы
44 Wariner 50 594 19.9.2013, 12:34 Посл. сообщение: Alexey
No New Posts От: Ваши Вопросы И Предложения По Поводу Форума
От темы с ID: 753
3 anila 9 016 28.3.2013, 16:02 Посл. сообщение: настя
No New Posts От: вопрос по NMDC.
От темы с ID: 4932
0 MIKHAIL 5 501 25.1.2013, 19:48 Посл. сообщение: MIKHAIL
No New Posts вопрос по NMDC.
.
6 Lamo 13 260 29.5.2012, 19:35 Посл. сообщение: Lamo
No new Topic has attachmentsПротокол IPv6 в протоколе NMDC
Спецификация и тестирование IPv6 в NMDC
109 gif-t 94 915 26.2.2012, 10:12 Посл. сообщение: AMD
No New Posts NMDC Extensions
Расширения и новые команды NMDC протокола
10 Meloun 18 273 19.2.2012, 16:39 Посл. сообщение: gif-t
No New Posts От: NMDC Extensions
От темы с ID: 5095
0 Артём 5 558 4.1.2012, 18:56 Посл. сообщение: Артём
No new Topic has attachmentsВопросы Разработчикам Скриптов с SQL
вопросы по скриптам (мелкие вопросы)
101 Wariner 61 634 6.12.2011, 0:34 Посл. сообщение: Enyby
No New Posts От: Вопросы по RusHub
От темы с ID: 2902
4 Otshelnik-Fm 8 396 19.10.2011, 9:23 Посл. сообщение: Mangust

 



RSS Сейчас: 8.11.2024, 22:13