tmud-2.10.1/benchmark/
tmud-2.10.1/cmd/
tmud-2.10.1/cmd/objects/
tmud-2.10.1/cmd/tiny/
tmud-2.10.1/doc/classes/SQLite/
tmud-2.10.1/doc/classes/SQLite3/
tmud-2.10.1/doc/classes/TernaryTrie/
tmud-2.10.1/doc/files/cmd/objects/
tmud-2.10.1/doc/files/cmd/tiny/
tmud-2.10.1/doc/files/lib/
tmud-2.10.1/doc/files/lib/engine/
tmud-2.10.1/doc/files/lib/farts/
tmud-2.10.1/farts/
tmud-2.10.1/lib/
tmud-2.10.1/lib/core/
tmud-2.10.1/lib/engine/
tmud-2.10.1/lib/farts/
tmud-2.10.1/logs/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Class: Connection</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
  <script type="text/javascript">
  // <![CDATA[

  function popupCode( url ) {
    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
  }

  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;
    
    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }
  
  // Make codeblocks hidden by default
  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
  
  // ]]>
  </script>

</head>
<body>



    <div id="classHeader">
        <table class="header-table">
        <tr class="top-aligned-row">
          <td><strong>Class</strong></td>
          <td class="class-name-in-header">Connection</td>
        </tr>
        <tr class="top-aligned-row">
            <td><strong>In:</strong></td>
            <td>
                <a href="../files/lib/network/connection_rb.html">
                lib/network/connection.rb
                </a>
        <br />
            </td>
        </tr>

        <tr class="top-aligned-row">
            <td><strong>Parent:</strong></td>
            <td>
                <a href="Session.html">
                Session
               </a>
            </td>
        </tr>
        </table>
    </div>
  <!-- banner header -->

  <div id="bodyContent">



  <div id="contextContent">
    <div id="diagram">
      <map id="map" name="map">
  <area shape="rect" coords="5,101,93,149"      href="Connection.html" alt="Connection
" />
  <area shape="rect" coords="13,5,85,53"      href="Session.html" alt="Session
" />
</map>
<img src="../dot/f_25.png" usemap="#map" border="0" alt="dot/f_25.png">
    </div>

    <div id="description">
      <p>
The connection class maintains a socket connection with a reactor and
handles all events dispatched by the reactor.
</p>

    </div>


   </div>

    <div id="method-list">
      <h3 class="section-bar">Methods</h3>

      <div class="name-list">
      <a href="#M000310">handle_close</a>&nbsp;&nbsp;
      <a href="#M000308">handle_input</a>&nbsp;&nbsp;
      <a href="#M000311">handle_oob</a>&nbsp;&nbsp;
      <a href="#M000309">handle_output</a>&nbsp;&nbsp;
      <a href="#M000307">init</a>&nbsp;&nbsp;
      <a href="#M000306">new</a>&nbsp;&nbsp;
      <a href="#M000314">query</a>&nbsp;&nbsp;
      <a href="#M000316">sendmsg</a>&nbsp;&nbsp;
      <a href="#M000315">set</a>&nbsp;&nbsp;
      <a href="#M000312">set_initdone</a>&nbsp;&nbsp;
      <a href="#M000313">update</a>&nbsp;&nbsp;
      </div>
    </div>

  </div>


    <!-- if includes -->

    <div id="section">





    <div id="attribute-list">
      <h3 class="section-bar">Attributes</h3>

      <div class="name-list">
        <table>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">addr</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">host</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">inbuffer</td>
          <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">initdone</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">outbuffer</td>
          <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">pstack</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">server</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        <tr class="top-aligned-row context-row">
          <td class="context-item-name">sockio</td>
          <td class="context-item-value">&nbsp;[R]&nbsp;</td>
          <td class="context-item-desc"></td>
        </tr>
        </table>
      </div>
    </div>
      


    <!-- if method_list -->
    <div id="methods">
      <h3 class="section-bar">Public Class methods</h3>

      <div id="method-M000306" class="method-detail">
        <a name="M000306"></a>

        <div class="method-heading">
          <a href="#M000306" class="method-signature">
          <span class="method-name">new</span><span class="method-args">(server, sock)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Create a <a href="Connection.html#M000306">new</a> connection object
</p>
<dl>
<dt><tt>server</tt></dt><dd>The reactor this connection is associated with.

</dd>
<dt><tt>sock</tt></dt><dd>The socket for this connection.

</dd>
<dt><tt>returns</tt></dt><dd>A connection object.

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000306-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000306-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 34</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">server</span>, <span class="ruby-identifier">sock</span>)
    <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">server</span>, <span class="ruby-identifier">sock</span>)
    <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">service_io</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:lineio</span>
      <span class="ruby-ivar">@sockio</span> = <span class="ruby-constant">LineIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@sock</span>)
    <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:packetio</span>
      <span class="ruby-ivar">@sockio</span> = <span class="ruby-constant">PacketIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@sock</span>)
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-ivar">@sockio</span> = <span class="ruby-constant">SockIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@sock</span>)
    <span class="ruby-keyword kw">end</span>
    <span class="ruby-ivar">@inbuffer</span> = <span class="ruby-value str">&quot;&quot;</span>              <span class="ruby-comment cmt"># buffer lines waiting to be processed</span>
    <span class="ruby-ivar">@outbuffer</span> = <span class="ruby-value str">&quot;&quot;</span>             <span class="ruby-comment cmt"># buffer lines waiting to be output</span>
    <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">service_filters</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">:telnetfilter</span>
      <span class="ruby-ivar">@initdone</span> = <span class="ruby-keyword kw">false</span>           <span class="ruby-comment cmt"># keeps silent until we're done with negotiations</span>
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-ivar">@initdone</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-keyword kw">end</span>
    <span class="ruby-ivar">@pstack</span> = <span class="ruby-constant">ProtocolStack</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <h3 class="section-bar">Public Instance methods</h3>

      <div id="method-M000310" class="method-detail">
        <a name="M000310"></a>

        <div class="method-heading">
          <a href="#M000310" class="method-signature">
          <span class="method-name">handle_close</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000310">handle_close</a> is called to when an
close event occurs for this session.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000310-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000310-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 131</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_close</span>
    <span class="ruby-ivar">@connected</span> = <span class="ruby-keyword kw">false</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:disconnected</span>)
    <span class="ruby-identifier">unsubscribe_all</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection '#{@host}(#{@addr})' closing&quot;</span>
    <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">unregister</span>(<span class="ruby-keyword kw">self</span>)
<span class="ruby-comment cmt">#    @sock.shutdown   # odd errors thrown with this</span>
    <span class="ruby-ivar">@sock</span>.<span class="ruby-identifier">close</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#handle_close closing&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000308" class="method-detail">
        <a name="M000308"></a>

        <div class="method-heading">
          <a href="#M000308" class="method-signature">
          <span class="method-name">handle_input</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000308">handle_input</a> is called to order a
connection to process any input waiting on its socket. Input is parsed into
lines based on the occurance of the CRLF terminator and pushed into a
buffer which is a list of lines. The buffer expands dynamically as input is
processed. Input that has yet to see a CRLF terminator is left in the
connection&#8216;s inbuffer.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000308-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000308-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 75</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_input</span>
    <span class="ruby-identifier">buf</span> = <span class="ruby-ivar">@sockio</span>.<span class="ruby-identifier">read</span>
    <span class="ruby-identifier">raise</span>(<span class="ruby-constant">EOFError</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">buf</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">empty?</span>
    <span class="ruby-identifier">buf</span> = <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">filter_call</span>(<span class="ruby-identifier">:filter_in</span>,<span class="ruby-identifier">buf</span>)
    <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">service_io</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:packetio</span> <span class="ruby-operator">||</span>
       <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">service_type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:client</span>
      <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">buf</span>)
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-ivar">@inbuffer</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">buf</span>
      <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@initdone</span>  <span class="ruby-comment cmt"># Just let buffer fill until we indicate we're done</span>
                    <span class="ruby-comment cmt"># negotiating.  Set by calling initdone from TelnetFilter</span>
        <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">p</span> = <span class="ruby-ivar">@inbuffer</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
          <span class="ruby-identifier">ln</span> = <span class="ruby-ivar">@inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">p</span>).<span class="ruby-identifier">chop</span>
          <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">ln</span>)
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">end</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">EOFError</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNRESET</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNABORTED</span>
    <span class="ruby-ivar">@closing</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:disconnected</span>)
    <span class="ruby-identifier">unsubscribe_all</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection '#{@host}(#{@addr})' disconnecting&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
    <span class="ruby-ivar">@closing</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:disconnected</span>)
    <span class="ruby-identifier">unsubscribe_all</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#handle_input disconnecting&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000311" class="method-detail">
        <a name="M000311"></a>

        <div class="method-heading">
          <a href="#M000311" class="method-signature">
          <span class="method-name">handle_oob</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000311">handle_oob</a> is called when an out of
band data event occurs for this session.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000311-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000311-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 146</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_oob</span>
    <span class="ruby-identifier">buf</span> = <span class="ruby-ivar">@sockio</span>.<span class="ruby-identifier">read_urgent</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection urgent data received - '#{buf[0]}'&quot;</span>
    <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">:urgent</span>, <span class="ruby-keyword kw">true</span>)
    <span class="ruby-identifier">buf</span> = <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">filter_call</span>(<span class="ruby-identifier">:filter_in</span>,<span class="ruby-identifier">buf</span>)
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#handle_oob&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000309" class="method-detail">
        <a name="M000309"></a>

        <div class="method-heading">
          <a href="#M000309" class="method-signature">
          <span class="method-name">handle_output</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000309">handle_output</a> is called to order a
connection to process any output waiting on its socket.
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000309-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000309-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 108</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_output</span>
    <span class="ruby-ivar">@outbuffer</span> = <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">filter_call</span>(<span class="ruby-identifier">:filter_out</span>,<span class="ruby-ivar">@outbuffer</span>)
    <span class="ruby-identifier">done</span> = <span class="ruby-ivar">@sockio</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@outbuffer</span>)
    <span class="ruby-ivar">@outbuffer</span> = <span class="ruby-value str">&quot;&quot;</span>
    <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">done</span>
      <span class="ruby-ivar">@write_blocked</span> = <span class="ruby-keyword kw">false</span>
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-ivar">@write_blocked</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-keyword kw">end</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">EOFError</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNABORTED</span>, <span class="ruby-constant">Errno</span><span class="ruby-operator">::</span><span class="ruby-constant">ECONNRESET</span>
    <span class="ruby-ivar">@closing</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:disconnected</span>)
    <span class="ruby-identifier">unsubscribe_all</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection '#{@host}(#{@addr})' disconnecting&quot;</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
    <span class="ruby-ivar">@closing</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:disconnected</span>)
    <span class="ruby-identifier">unsubscribe_all</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#handle_output disconnecting&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000307" class="method-detail">
        <a name="M000307"></a>

        <div class="method-heading">
          <a href="#M000307" class="method-signature">
          <span class="method-name">init</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000307">init</a> is called before using the
connection.
</p>
<dl>
<dt><tt>returns</tt></dt><dd>true is connection is properly initialized

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000307-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000307-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 56</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init</span>
    <span class="ruby-ivar">@host</span>, <span class="ruby-ivar">@addr</span> = <span class="ruby-ivar">@sock</span>.<span class="ruby-identifier">peeraddr</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-value">2</span><span class="ruby-operator">..</span><span class="ruby-value">3</span>)
    <span class="ruby-ivar">@connected</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">register</span>(<span class="ruby-keyword kw">self</span>)
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;(#{self.object_id}) New Connection on '#{@host}(#{@addr})'&quot;</span>
    <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">filter_call</span>(<span class="ruby-identifier">:init</span>,<span class="ruby-keyword kw">nil</span>)
    <span class="ruby-keyword kw">true</span>
  <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#init&quot;</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
    <span class="ruby-keyword kw">false</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000314" class="method-detail">
        <a name="M000314"></a>

        <div class="method-heading">
          <a href="#M000314" class="method-signature">
          <span class="method-name">query</span><span class="method-args">(attrib)</span>
          </a>
        </div>
      
        <div class="method-description">
          <dl>
<dt><tt>attrib</tt></dt><dd>- A Symbol not handled here is assumed to be a <a
href="Connection.html#M000314">query</a> and

</dd>
</dl>
<pre>
          its handling is delegated to the ProtocolStack, the result
          of which is a pair immediately sent back to as a message
          to the client.

        &lt;pre&gt;
        client -&gt; us
            :echo
        us     -&gt; ProtocolStack
            query(:echo)
        ProtocolStack -&gt; us
            [:echo, true]
        us -&gt; client
            [:echo, true]
        &lt;/pre&gt;
</pre>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000314-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000314-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 216</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query</span>(<span class="ruby-identifier">attrib</span>)
    <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">query</span>(<span class="ruby-identifier">attrib</span>)
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000316" class="method-detail">
        <a name="M000316"></a>

        <div class="method-heading">
          <a href="#M000316" class="method-signature">
          <span class="method-name">sendmsg</span><span class="method-args">(msg)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
<a href="Connection.html#M000316">sendmsg</a> places a message on the <a
href="Connection.html">Connection</a>&#8216;s output buffer.
</p>
<dl>
<dt><tt>msg</tt></dt><dd>The message, a reference to a buffer

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000316-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000316-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 237</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendmsg</span>(<span class="ruby-identifier">msg</span>)
    <span class="ruby-ivar">@outbuffer</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">msg</span>
    <span class="ruby-ivar">@write_blocked</span> = <span class="ruby-keyword kw">true</span>  <span class="ruby-comment cmt"># change status to write_blocked</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000315" class="method-detail">
        <a name="M000315"></a>

        <div class="method-heading">
          <a href="#M000315" class="method-signature">
          <span class="method-name">set</span><span class="method-args">(attrib, val)</span>
          </a>
        </div>
      
        <div class="method-description">
          <dl>
<dt>+attrib,val+</dt><dd>- An Array not handled here is assumed to be a <a
href="Connection.html#M000315">set</a> command and

</dd>
</dl>
<pre>
          its handling is delegated to the ProtocolStack.

        &lt;pre&gt;
        client -&gt; us
            [:color, true]
        us     -&gt; ProtocolStack
            set(:color, true)
        &lt;/pre&gt;
</pre>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000315-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000315-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 230</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set</span>(<span class="ruby-identifier">attrib</span>, <span class="ruby-identifier">val</span>)
    <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">attrib</span>, <span class="ruby-identifier">val</span>)
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000312" class="method-detail">
        <a name="M000312"></a>

        <div class="method-heading">
          <a href="#M000312" class="method-signature">
          <span class="method-name">set_initdone</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
This is called from <a href="TelnetFilter.html">TelnetFilter</a> when we
are done with negotiations. The event :initdone wakens observer to begin
user activity
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000312-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000312-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 158</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_initdone</span>
    <span class="ruby-ivar">@initdone</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-identifier">publish</span>(<span class="ruby-identifier">:initdone</span>)
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000313" class="method-detail">
        <a name="M000313"></a>

        <div class="method-heading">
          <a href="#M000313" class="method-signature">
          <span class="method-name">update</span><span class="method-args">(msg)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Update will be called when the object the connection is observing wants to
notify us of a change in state or <a href="Connection.html#M000306">new</a>
message. When a <a href="Connection.html#M000306">new</a> connection is
accepted in acceptor that connection is passed to the observer of the
acceptor which allows the client to attach an observer to the connection
and make the connection an observer of that object. We need to keep both
sides interest in each other limited to a narrow but flexible interface to
prevent tight coupling.
</p>
<p>
This supports the following:
</p>
<dl>
<dt>:quit</dt><dd>- This symbol message from the client is a request to

<pre>
      close the Connection.  It is handled here.
</pre>
</dd>
<dt><a href="String.html">String</a></dt><dd>- A <a href="String.html">String</a> is assumed to be output and placed in
our

<pre>
  @outbuffer.
</pre>
</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000313-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000313-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/connection.rb, line 178</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update</span>(<span class="ruby-identifier">msg</span>)
    <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">msg</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:quit</span>
      <span class="ruby-identifier">handle_output</span>
      <span class="ruby-ivar">@closing</span> = <span class="ruby-keyword kw">true</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:reconnecting</span>
      <span class="ruby-identifier">unsubscribe_all</span>
      <span class="ruby-identifier">log</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection '#{@host}(#{@addr})' closing for reconnection&quot;</span>
      <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">unregister</span>(<span class="ruby-keyword kw">self</span>)
  <span class="ruby-comment cmt">#    @sock.shutdown   # odd errors thrown with this</span>
      <span class="ruby-ivar">@sock</span>.<span class="ruby-identifier">close</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-constant">String</span>
      <span class="ruby-identifier">sendmsg</span>(<span class="ruby-identifier">msg</span>)
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;(#{self.object_id}) Connection#update - unknown message '#{@msg.inspect}'&quot;</span>
    <span class="ruby-keyword kw">end</span>
  <span class="ruby-keyword kw">rescue</span>
    <span class="ruby-comment cmt"># We squash and print out all exceptions here.  There is no reason to</span>
    <span class="ruby-comment cmt"># throw these back at out subscribers.</span>
    <span class="ruby-identifier">log</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">$!</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>


    </div>


  </div>


<div id="validator-badges">
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>

</body>
</html>