Help!

Discussion in 'PHP' started by kravch_v, 30 Sep 2011.

  1. kravch_v

    kravch_v Member

    Joined:
    1 Sep 2011
    Messages:
    134
    Likes Received:
    43
    Reputations:
    1
    Вот код:
    PHP:
        <?php
        set_time_limit
    (0);
        
    $irc["server"] = "irc.server.com";
        
    $irc["port"] = "6667";
        
    $irc["channel"] = "#chat";
        
    $irc["act"] = "5";
        
    $bot["good"] = "connect";
        
    $bot["user"] = "USER test";
        
    $fsock fsockopen($irc["server"], $irc["port"]);
            
    $no_connect 1;
                        {
                            
    $str fread($fsock1024);
                        }
                        {
                            
    $str fread($fsock1024);
                        }
            
    fwrite($fsock,"" .$bot["good"].$bot["user"]."\r\n");
                        {
                            
    $str fread($fsock1024);
                            
    $str fread($fsock1024);
                        }
                        
    fwrite($fsock"JOIN ".$irc["channel"]."\r\n");
                        
                        
    fwrite($fsock"ACTION ".$irc["act"]."\r\n");
            while (
    1)
            {
                if (
    $str fread($fsock1024))
                    {
                        
    fwrite($fsock"PONG ".$irc["channel"]."\r\n");
                    }
                    elseif (
    stristr($str,"PONG") && $no_connect == 1)
                    {
                    if (
    substr($str06) == "PING :"
                        unset(
    $no_connect);
                        
    fwrite($fsock"PING ".time()."\r\n");
                        while (!
    substr($str04) == "PONG")
                        {
                            
    $str fread($fsock1024);
                        } 
                    }             
                }
                        
    sleep(0);
                        
    fclose($fsock);
        
    ?>
    Сам-то код написан верно, но вот даны строки:
    PHP:
    fwrite($fsock"JOIN ".$irc["channel"]."\r\n");
                        
    fwrite($fsock"ACTION ".$irc["act"]."\r\n");
    Эти строки посылают на сервер следующее:
    JOIN #chat
    ACTION 5

    Как сделать, чтобы команда "ACTION ..." отправлялась на сервер через 3 секунды после JOIN
     
  2. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    sleep()
     
  3. kravch_v

    kravch_v Member

    Joined:
    1 Sep 2011
    Messages:
    134
    Likes Received:
    43
    Reputations:
    1
    между JOIN и ACTION? о_О
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    kravch_v да, между ними

    Вообще, ваш код будет ломаться еще во многих самых неожиданных местах. Рекомендую сейчас собраться с духом и переписать используя select'ы и очередь сообщений. http://php.net/socket_select Ну а очередь можно реализовать на массиве, правда придется его сортировать постоянно. Тогда добавление новых команд и реакций можно будет делать безболезненно и красиво
     
    _________________________
  5. kravch_v

    kravch_v Member

    Joined:
    1 Sep 2011
    Messages:
    134
    Likes Received:
    43
    Reputations:
    1
    Gifts и |qbz| - Спасибо!
    Значит в ближайшие дни полностью перепишу скрипт. Надеюсь, что всё получится.
     
  6. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    259
    Likes Received:
    596
    Reputations:
    476
    kravch_v, немного замечу по IRC-логике скрипта:

    Насколько я вижу, в приведенном коде отсутствуют команды IRC, требуемые согласно RFC1459, а именно - не посылается ник (NICK somenick). Странным образом отправляется команда USER, также отправляется несуществующая команда ACTION. Подозрительно реализован PING-PONG. Не уверен, что такой IRC-клиент способен работать с известными IRCd.
     
    _________________________
  7. kravch_v

    kravch_v Member

    Joined:
    1 Sep 2011
    Messages:
    134
    Likes Received:
    43
    Reputations:
    1
    Это не IRC :)