<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.eventlistener.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'eventlistener.construct.php',
    1 => 'EventListener::__construct',
    2 => 'Cr&eacute;e un nouvel &eacute;couteur de connexion associ&eacute; avec la base d\'&eacute;v&eacute;nement',
  ),
  'up' => 
  array (
    0 => 'class.eventlistener.php',
    1 => 'EventListener',
  ),
  'prev' => 
  array (
    0 => 'class.eventlistener.php',
    1 => 'EventListener',
  ),
  'next' => 
  array (
    0 => 'eventlistener.disable.php',
    1 => 'EventListener::disable',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/event/eventlistener/construct.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="eventlistener.construct" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">EventListener::__construct</h1>
  <p class="verinfo">(PECL event &gt;= 1.2.6-beta)</p><p class="refpurpose"><span class="refname">EventListener::__construct</span> &mdash; <span class="dc-title">Crée un nouvel écouteur de connexion associé avec la base d&#039;événement</span></p>

 </div>
 <div class="refsect1 description" id="refsect1-eventlistener.construct-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span>
   <span class="methodname"><strong>EventListener::__construct</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="class.eventbase.php" class="type EventBase">EventBase</a></span> <code class="parameter">$base</code>
   </span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$cb</code>
   </span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$data</code>
   </span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$flags</code>
   </span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$backlog</code>
   </span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam">
    
    <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$target</code>
   </span><br>)</div>

  <p class="para rdfs-comment">
   Crée un nouvel écouteur de connexion associé avec la base d&#039;événement.
  </p>
 </div>

 <div class="refsect1 parameters" id="refsect1-eventlistener.construct-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <dl>
   
    <dt>
     <code class="parameter">base</code>
    </dt>
    <dd>
     <p class="para">
      Base d&#039;événement associée.
     </p>
    </dd>
   
   
    <dt>
     <code class="parameter">cb</code>
    </dt>
    <dd>
     <p class="para">
      Un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> qui sera invoqué lorsqu&#039;une
      nouvelle connexion sera reçue.
     </p>
    </dd>
   
   
    <dt>
     <code class="parameter">data</code>
    </dt>
    <dd>
     <p class="para">
      Données utilisateur personnalisées attachées au paramètre
      <code class="parameter">cb</code>.
     </p>
    </dd>
   
   
    <dt>
     <code class="parameter">flags</code>
    </dt>
    <dd>
     <p class="para">
      Un masque de constantes
      <code class="literal">EventListener::OPT_*</code>. Voir les
      <a href="class.eventlistener.php#eventlistener.constants" class="link">constantes EventListener</a>.
     </p>
    </dd>
   
   
    <dt>
     <code class="parameter">backlog</code>
    </dt>
    <dd>
     <p class="para">
      Contrôle le nombre maximal de connexions en attente que la pile réseau
      autorise à patienter dans un statut &quot;non encore accepté&quot; ; voir la documentation
      de la fonction <code class="literal">listen</code> du système pour plus
      de détails. Si le paramètre <code class="parameter">backlog</code> est négatif,
      Libevent tente de récupérer une bonne valeur pour ce paramètre ;
      s&#039;il vaut zéro, Event présume que la fonction système <code class="literal">listen</code>
      a déjà été appelée sur le socket (<code class="parameter">target</code>).
     </p>
    </dd>
   
   
    <dt>
     <code class="parameter">target</code>
    </dt>
    <dd>
     <p class="para">
      Peut être une chaîne de caractères, une ressource de socket, ou un
      flux associé avec un socket. Dans le cas où ce paramètre est une
      chaîne de caractères, elle sera analysée comme adresse IP.
      Elle sera analysée comme socket de domaine UNIX si elle est préfixée
      par <code class="literal">&#039;unix:&#039;</code>, par exemple, <code class="literal">&#039;unix:/tmp/my.sock&#039;</code>.
     </p>
    </dd>
   
  </dl>
 </div>

 <div class="refsect1 changelog" id="refsect1-eventlistener.construct-changelog">
  <h3 class="title">Historique</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Version</th>
      <th>Description</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>PECL event 1.5.0</td>
      <td>
       Le support des sockets de domaine UNIX a été ajouté.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>

 <div class="refsect1 examples" id="refsect1-eventlistener.construct-examples">
  <h3 class="title">Exemples</h3>
  <div class="example" id="example-1">
   <p><strong>Exemple #1 
    Exemple avec <span class="function"><strong>EventListener::__construct()</strong></span></strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/*<br /> * Un simple serveur d'écho, basé sur un écouteur de connexion libevent.<br /> *<br /> * Utilisation :<br /> * 1) Dans un terminal Windows, exécutez :<br /> *<br /> * $ php listener.php 9881<br /> *<br /> * 2) Dans un autre terminal Windows, ouvrez la connexion suivante :<br /> *<br /> * $ nc 127.0.0.1 9881<br /> *<br /> * 3) Commencez à taper. Le serveur devrait répéter les entrées.<br /> */<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyListenerConnection </span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$bev</span><span style="color: #007700">, </span><span style="color: #0000BB">$base</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__destruct</span><span style="color: #007700">() {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">free</span><span style="color: #007700">();<br />    }<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">, </span><span style="color: #0000BB">$fd</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base </span><span style="color: #007700">= </span><span style="color: #0000BB">$base</span><span style="color: #007700">;<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bev </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventBufferEvent</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">, </span><span style="color: #0000BB">$fd</span><span style="color: #007700">, </span><span style="color: #0000BB">EventBufferEvent</span><span style="color: #007700">::</span><span style="color: #0000BB">OPT_CLOSE_ON_FREE</span><span style="color: #007700">);<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setCallbacks</span><span style="color: #007700">(array(</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"echoReadCallback"</span><span style="color: #007700">), </span><span style="color: #0000BB">NULL</span><span style="color: #007700">,<br />            array(</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"echoEventCallback"</span><span style="color: #007700">), </span><span style="color: #0000BB">NULL</span><span style="color: #007700">);<br /><br />        if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">enable</span><span style="color: #007700">(</span><span style="color: #0000BB">Event</span><span style="color: #007700">::</span><span style="color: #0000BB">READ</span><span style="color: #007700">)) {<br />            echo </span><span style="color: #DD0000">"Impossible d'activer READ\n"</span><span style="color: #007700">;<br />            return;<br />        }<br />    }<br /><br />    public function </span><span style="color: #0000BB">echoReadCallback</span><span style="color: #007700">(</span><span style="color: #0000BB">$bev</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">) {<br />        </span><span style="color: #FF8000">// Copie toutes les données depuis le buffer d'entrée vers le buffer de sortie<br /><br />        // Variant #1<br />        </span><span style="color: #0000BB">$bev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">output</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addBuffer</span><span style="color: #007700">(</span><span style="color: #0000BB">$bev</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">input</span><span style="color: #007700">);<br /><br />        </span><span style="color: #FF8000">/* Variant #2 */<br />        /*<br />        $input    = $bev-&gt;getInput();<br />        $output = $bev-&gt;getOutput();<br />        $output-&gt;addBuffer($input);<br />        */<br />    </span><span style="color: #007700">}<br /><br />    public function </span><span style="color: #0000BB">echoEventCallback</span><span style="color: #007700">(</span><span style="color: #0000BB">$bev</span><span style="color: #007700">, </span><span style="color: #0000BB">$events</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">) {<br />        if (</span><span style="color: #0000BB">$events </span><span style="color: #007700">&amp; </span><span style="color: #0000BB">EventBufferEvent</span><span style="color: #007700">::</span><span style="color: #0000BB">ERROR</span><span style="color: #007700">) {<br />            echo </span><span style="color: #DD0000">"Erreur depuis bufferevent\n"</span><span style="color: #007700">;<br />        }<br /><br />        if (</span><span style="color: #0000BB">$events </span><span style="color: #007700">&amp; (</span><span style="color: #0000BB">EventBufferEvent</span><span style="color: #007700">::</span><span style="color: #0000BB">EOF </span><span style="color: #007700">| </span><span style="color: #0000BB">EventBufferEvent</span><span style="color: #007700">::</span><span style="color: #0000BB">ERROR</span><span style="color: #007700">)) {<br />            </span><span style="color: #FF8000">//$bev-&gt;free();<br />            </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">__destruct</span><span style="color: #007700">();<br />        }<br />    }<br />}<br /><br />class </span><span style="color: #0000BB">MyListener </span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$base</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">$listener</span><span style="color: #007700">,<br />        </span><span style="color: #0000BB">$socket</span><span style="color: #007700">;<br />    private </span><span style="color: #0000BB">$conn </span><span style="color: #007700">= array();<br /><br />    public function </span><span style="color: #0000BB">__destruct</span><span style="color: #007700">() {<br />        foreach (</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">conn </span><span style="color: #007700">as &amp;</span><span style="color: #0000BB">$c</span><span style="color: #007700">) </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">NULL</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$port</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventBase</span><span style="color: #007700">();<br />        if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">) {<br />            echo </span><span style="color: #DD0000">"Impossible d'ouvrir la base de l'événement"</span><span style="color: #007700">;<br />            exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />        }<br /><br />        </span><span style="color: #FF8000">// Variant #1<br />        /*<br />        $this-&gt;socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);<br />        if (!socket_bind($this-&gt;socket, '0.0.0.0', $port)) {<br />            echo "Impossible de lier le socket\n";<br />            exit(1);<br />        }<br />        $this-&gt;listener = new EventListener($this-&gt;base,<br />            array($this, "acceptConnCallback"), $this-&gt;base,<br />            EventListener::OPT_CLOSE_ON_FREE | EventListener::OPT_REUSEABLE,<br />            -1, $this-&gt;socket);<br />         */<br /><br />        // Variant #2<br />         </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">listener </span><span style="color: #007700">= new </span><span style="color: #0000BB">EventListener</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">,<br />             array(</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"acceptConnCallback"</span><span style="color: #007700">), </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">,<br />             </span><span style="color: #0000BB">EventListener</span><span style="color: #007700">::</span><span style="color: #0000BB">OPT_CLOSE_ON_FREE </span><span style="color: #007700">| </span><span style="color: #0000BB">EventListener</span><span style="color: #007700">::</span><span style="color: #0000BB">OPT_REUSEABLE</span><span style="color: #007700">, -</span><span style="color: #0000BB">1</span><span style="color: #007700">,<br />             </span><span style="color: #DD0000">"0.0.0.0:</span><span style="color: #0000BB">$port</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br /><br />        if (!</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">listener</span><span style="color: #007700">) {<br />            echo </span><span style="color: #DD0000">"Couldn't create listener"</span><span style="color: #007700">;<br />            exit(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />        }<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">listener</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setErrorCallback</span><span style="color: #007700">(array(</span><span style="color: #0000BB">$this</span><span style="color: #007700">, </span><span style="color: #DD0000">"accept_error_cb"</span><span style="color: #007700">));<br />    }<br /><br />    public function </span><span style="color: #0000BB">dispatch</span><span style="color: #007700">() {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dispatch</span><span style="color: #007700">();<br />    }<br /><br />    </span><span style="color: #FF8000">// Cette fonction de rappel est appelée lorsqu'il y a des données à lire depuis $bev<br />    </span><span style="color: #007700">public function </span><span style="color: #0000BB">acceptConnCallback</span><span style="color: #007700">(</span><span style="color: #0000BB">$listener</span><span style="color: #007700">, </span><span style="color: #0000BB">$fd</span><span style="color: #007700">, </span><span style="color: #0000BB">$address</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">) {<br />        </span><span style="color: #FF8000">// Nous avons une nouvelle connexion ! On lui définit un bufferevent. */<br />        </span><span style="color: #0000BB">$base </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">conn</span><span style="color: #007700">[] = new </span><span style="color: #0000BB">MyListenerConnection</span><span style="color: #007700">(</span><span style="color: #0000BB">$base</span><span style="color: #007700">, </span><span style="color: #0000BB">$fd</span><span style="color: #007700">);<br />    }<br /><br />    public function </span><span style="color: #0000BB">accept_error_cb</span><span style="color: #007700">(</span><span style="color: #0000BB">$listener</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$base </span><span style="color: #007700">= </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">base</span><span style="color: #007700">;<br /><br />        </span><span style="color: #0000BB">fprintf</span><span style="color: #007700">(</span><span style="color: #0000BB">STDERR</span><span style="color: #007700">, </span><span style="color: #DD0000">"Erreur reçue %d (%s) sur l'écouteur. "<br />            </span><span style="color: #007700">.</span><span style="color: #DD0000">"Shutting down.\n"</span><span style="color: #007700">,<br />            </span><span style="color: #0000BB">EventUtil</span><span style="color: #007700">::</span><span style="color: #0000BB">getLastSocketErrno</span><span style="color: #007700">(),<br />            </span><span style="color: #0000BB">EventUtil</span><span style="color: #007700">::</span><span style="color: #0000BB">getLastSocketError</span><span style="color: #007700">());<br /><br />        </span><span style="color: #0000BB">$base</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exit</span><span style="color: #007700">(</span><span style="color: #0000BB">NULL</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$port </span><span style="color: #007700">= </span><span style="color: #0000BB">9808</span><span style="color: #007700">;<br /><br />if (</span><span style="color: #0000BB">$argc </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$port </span><span style="color: #007700">= (int) </span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />}<br />if (</span><span style="color: #0000BB">$port </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">0 </span><span style="color: #007700">|| </span><span style="color: #0000BB">$port </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">65535</span><span style="color: #007700">) {<br />    exit(</span><span style="color: #DD0000">"Port invalide"</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">$l </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyListener</span><span style="color: #007700">(</span><span style="color: #0000BB">$port</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$l</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">dispatch</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

</div><?php manual_footer($setup); ?>