# Exemplos

Exemplo #1 Cancelando uma solicitação

    <?php
     /* É chamado quando eio_nop() termina */
     function my_nop_cb($data, $result) {
      echo "my_nop ", $data, "\n";
     }

    // Esta chamada eio_nop() será cancelada
    $req = eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "1");
    var_dump($req);
    eio_cancel($req);

    // Desta vez eio_nop() será processado
    eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "2");

    // Processa solicitações
    eio_event_loop();
    ?>

O exemplo acima produzirá algo semelhante a:

    resource(4) of type (EIO Request Descriptor)
    my_nop 2

Exemplo #2 Chamando eio_chmod()

    <?php
    $temp_filename = dirname(__FILE__) ."/eio-temp-file.tmp";
    touch($temp_filename);

    /* É chamado quando eio_chmod() termina */
    function my_chmod_callback($data, $result) {
        global $temp_filename;

        if ($result == 0 && !is_readable($temp_filename) && is_writable($temp_filename)) {
            echo "eio_chmod_ok";
        }

        @unlink($temp_filename);
    }

    eio_chmod($temp_filename, 0200, EIO_PRI_DEFAULT, "my_chmod_callback");
    eio_event_loop();
    ?>

O exemplo acima produzirá algo semelhante a:

    eio_chmod_ok

Exemplo #3 Fazendo uma solicitação personalizada

    <?php
    /* Retorno de chamada para o retorno de chamada personalizado */
    function my_custom_callback($data, $result) {
        var_dump($data);
        var_dump(count($result));
        var_dump($result['data_modified']);
        var_dump($result['result']);
    }

    /* A solicitação personalizada */
    function my_custom($data) {
        var_dump($data);

        $result  = array(
            'result'        => 1001,
            'data_modified' => "my custom data",
        );

        return $result;
    }

    $data = "my_custom_data";
    $req = eio_custom("my_custom", EIO_PRI_DEFAULT, "my_custom_callback", $data);
    var_dump($req);
    eio_event_loop();
    ?>

O exemplo acima produzirá algo semelhante a:

    resource(4) of type (EIO Request Descriptor)
    string(14) "my_custom_data"
    string(14) "my_custom_data"
    int(2)
    string(14) "my custom data"
    int(1001)

Exemplo #4 Agrupando solicitações

    <?php
    /*
     * Cria uma solicitação de grupo para abrir, ler e fechar um arquivo
     */

    $temp_filename = dirname(__FILE__) ."/eio-file.tmp";
    $fp = fopen($temp_filename, "w");
    fwrite($fp, "some data");
    fclose($fp);

    /* É chamado quando as solicitações do grupo são concluídas */
    function my_grp_done($data, $result) {
     global $temp_filename;
     var_dump($result == 0);
     @unlink($temp_filename);
    }

    /* É chamado quando eio_open() termina */
    function my_grp_file_opened_callback($data, $result) {
     global $my_file_fd, $grp;

     $my_file_fd = $result;

     var_dump($result > 0);

     // Cria a solicitação eio_read() e adiciona-a ao grupo
     $req = eio_read($my_file_fd, 4, 0, EIO_PRI_DEFAULT, "my_grp_file_read_callback");
     eio_grp_add($grp, $req);
    }

    /* É chamado quando eio_read() termina */
    function my_grp_file_read_callback($data, $result) {
     global $my_file_fd, $grp;

     var_dump($result);

     // Cria a solicitação eio_close() e adiciona ela ao grupo
     $req = eio_close($my_file_fd);
     eio_grp_add($grp, $req);
    }

    $grp = eio_grp("my_grp_done", "my_grp_data");

    // Cria a solicitação eio_open() e adiciona-a ao grupo
    $req = eio_open($temp_filename, EIO_O_RDWR | EIO_O_APPEND , NULL,
      EIO_PRI_DEFAULT, "my_grp_file_opened_callback", NULL);
    eio_grp_add($grp, $req);
    var_dump($grp);

    eio_event_loop();
    ?>

O exemplo acima produzirá algo semelhante a:

    resource(6) of type (EIO Group Descriptor)
    bool(true)
    string(4) "some"
    bool(true)

Exemplo #5 Usando eio com extensão libevent

    <?php
    function my_eio_poll($fd, $events, $arg) {
        /* Algum regulamento do libevent pode estar aqui.. */
        if (eio_nreqs()) {
            eio_poll();
        }
        /* .. e aqui */
    }

    function my_nop_cb($d, $r) {
        var_dump($r); var_dump($d);
    }

    $base = event_base_new();
    $event = event_new();

    $fd = eio_get_event_stream();
    var_dump($fd);

    eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "nop data");
    eio_mkdir("/tmp/abc-eio-temp", 0750, EIO_PRI_DEFAULT, "my_nop_cb", "nop data");
    /* algumas outras chamadas eio_* aqui... */

    // define opções de evento
    event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));

    // define a base de eventos
    event_base_set($event, $base);

    // habilita evento
    event_add($event);

    // inicia loop de eventos
    event_base_loop($base);

    /* O mesmo estará disponível através da interface libevent em buffer */
    ?>

O exemplo acima produzirá algo semelhante a:

    int(3)
    int(0)
    string(8) "nop data"
    int(0)
    string(10) "mkdir data"

Exemplo #6 Usando eio com extensão event

    <?php
    $base = new EventBase();

    // Recupera o fluxo de pesquisa eio.
    // Observe que esta variável deve permanecer ativa enquanto o loop de eventos estiver em execução.
    $eio_stream = eio_get_event_stream();

    // Vincula o fluxo de polling eio ao loop de eventos.
    $poll_event = new Event($base, $eio_stream, Event::READ, function () {
      if (eio_nreqs()) {
        eio_poll();
      }
    });
    $poll_event->add();

    // Adiciona trabalhos eio
    eio_nop(EIO_PRI_DEFAULT, function () {
      echo "eio_nop\n";
    });

    // Adiciona eventos
    $timer = Event::timer($base, function () {
      echo "2 segundos se passaram\n";
    });
    $timer->add(2);

    // Despacha eventos.
    $base->dispatch();
    ?>

O exemplo acima produzirá algo semelhante a:

    eio_nop
    2 segundos se passaram

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open