<?xml version="1.0" encoding="utf-8"?> <!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>Rumai::IXP::Agent</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" /> <link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" /> <script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script> <script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script> <script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div class="banner"> <h1> <span class="type">Class</span> Rumai::IXP::Agent <span class="parent">< <a href="../../Object.html">Object</a> </span> </h1> <ul class="files"> <li><a href="../../../files/lib/rumai/ixp/transport_rb.html">lib/rumai/ixp/transport.rb</a></li> </ul> </div> <div id="bodyContent"> <div id="content"> <div class="description"> <p> A thread-safe proxy that multiplexes many threads onto a single 9P2000 connection. </p> </div> <div class="sectiontitle">Methods</div> <dl class="methods"> <dt>A</dt> <dd> <ul> <li><a href="#M000111">attach</a></li> </ul> </dd> <dt>C</dt> <dd> <ul> <li><a href="#M000115">clunk</a>,</li> <li><a href="#M000091">create</a></li> </ul> </dd> <dt>E</dt> <dd> <ul> <li><a href="#M000088">entries</a></li> </ul> </dd> <dt>N</dt> <dd> <ul> <li><a href="#M000035">new</a></li> </ul> </dd> <dt>O</dt> <dd> <ul> <li><a href="#M000061">open</a></li> </ul> </dd> <dt>R</dt> <dd> <ul> <li><a href="#M000087">read</a>,</li> <li><a href="#M000097">remove</a>,</li> <li><a href="#M000098">remove_fid</a></li> </ul> </dd> <dt>S</dt> <dd> <ul> <li><a href="#M000101">stat</a>,</li> <li><a href="#M000105">stat_fid</a></li> </ul> </dd> <dt>T</dt> <dd> <ul> <li><a href="#M000053">talk</a></li> </ul> </dd> <dt>W</dt> <dd> <ul> <li><a href="#M000106">walk</a>,</li> <li><a href="#M000107">walk_fid</a>,</li> <li><a href="#M000090">write</a></li> </ul> </dd> </dl> <div class="sectiontitle">Classes and Modules</div> <ul> <li><span class="type">MODULE</span> <a href="Agent/MODES.html">Rumai::IXP::Agent::MODES</a></li> <li><span class="type">CLASS</span> <a href="Agent/FidStream.html">Rumai::IXP::Agent::FidStream</a></li> <li><span class="type">CLASS</span> <a href="Agent/RangedPool.html">Rumai::IXP::Agent::RangedPool</a></li> </ul> <div class="sectiontitle">Constants</div> <table border='0' cellpadding='5'> <tr valign='top'> <td class="attr-name">MODES</td> <td>=</td> <td class="attr-value">{ 'r' => Topen::OREAD, 'w' => Topen::OWRITE, 't' => Topen::ORCLOSE, '+' => Topen::ORDWR, }</td> </tr> </table> <div class="sectiontitle">Attributes</div> <table border='0' cellpadding='5'> <tr valign='top'> <td class='attr-rw'> [R] </td> <td class='attr-name'>msize</td> <td class='attr-desc'></td> </tr> </table> <div class="sectiontitle">Class Public methods</div> <div class="method"> <div class="title" id="M000035"> <a name="M000035"></a><b>new</b>(stream) </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000035_source')" id="l_M000035_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L19" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000035_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 19</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">stream</span> <span class="ruby-ivar">@stream</span> = <span class="ruby-identifier">stream</span> <span class="ruby-ivar">@send_lock</span> = <span class="ruby-constant">Mutex</span>.<span class="ruby-identifier">new</span> <span class="ruby-ivar">@recv_bays</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span> } <span class="ruby-comment cmt"># tag => Queue(message)</span> <span class="ruby-comment cmt"># background thread which continuously receives</span> <span class="ruby-comment cmt"># and dispatches messages from the 9P2000 server</span> <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span> <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span> <span class="ruby-identifier">msg</span> = <span class="ruby-constant">Fcall</span>.<span class="ruby-identifier">from_9p</span> <span class="ruby-ivar">@stream</span> <span class="ruby-ivar">@recv_bays</span>[<span class="ruby-identifier">msg</span>.<span class="ruby-identifier">tag</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">msg</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">priority</span> = <span class="ruby-value">-1</span> <span class="ruby-ivar">@tag_pool</span> = <span class="ruby-constant">RangedPool</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-constant">BYTE2_MASK</span>) <span class="ruby-ivar">@fid_pool</span> = <span class="ruby-constant">RangedPool</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-constant">BYTE4_MASK</span>) <span class="ruby-comment cmt"># establish connection with 9P2000 server</span> <span class="ruby-identifier">req</span> = <span class="ruby-constant">Tversion</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:tag</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOTAG</span>, <span class="ruby-identifier">:msize</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Tversion</span><span class="ruby-operator">::</span><span class="ruby-constant">MSIZE</span>, <span class="ruby-identifier">:version</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Tversion</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span> ) <span class="ruby-identifier">rsp</span> = <span class="ruby-identifier">talk</span>(<span class="ruby-identifier">req</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">version</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">version</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">"protocol mismatch: self=#{req.version.inspect} server=#{rsp.version.inspect}"</span> <span class="ruby-keyword kw">end</span> <span class="ruby-ivar">@msize</span> = <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">msize</span> <span class="ruby-comment cmt"># authenticate the connection (not necessary for wmii)</span> <span class="ruby-ivar">@auth_fid</span> = <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOFID</span> <span class="ruby-comment cmt"># attach to filesystem root</span> <span class="ruby-ivar">@root_fid</span> = <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">obtain</span> <span class="ruby-identifier">attach</span> <span class="ruby-ivar">@root_fid</span>, <span class="ruby-ivar">@auth_fid</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="sectiontitle">Instance Public methods</div> <div class="method"> <div class="title" id="M000111"> <a name="M000111"></a><b>attach</b>(root_fid, auth_fid = Fcall::NOFID, auth_name = ENV['USER']) </div> <div class="description"> <p> Associates the given FID with the FS root. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000111_source')" id="l_M000111_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L413" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000111_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 413</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attach</span> <span class="ruby-identifier">root_fid</span>, <span class="ruby-identifier">auth_fid</span> = <span class="ruby-constant">Fcall</span><span class="ruby-operator">::</span><span class="ruby-constant">NOFID</span>, <span class="ruby-identifier">auth_name</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'USER'</span>] <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tattach</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">root_fid</span>, <span class="ruby-identifier">:afid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">auth_fid</span>, <span class="ruby-identifier">:uname</span> =<span class="ruby-operator">></span> <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'USER'</span>], <span class="ruby-identifier">:aname</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">auth_name</span> ) <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000115"> <a name="M000115"></a><b>clunk</b>(fid) </div> <div class="description"> <p> Retires the given FID from use. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000115_source')" id="l_M000115_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L425" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000115_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 425</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clunk</span> <span class="ruby-identifier">fid</span> <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tclunk</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">fid</span>) <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">release</span> <span class="ruby-identifier">fid</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000091"> <a name="M000091"></a><b>create</b>(path, mode = 'rw', perm = 0644) </div> <div class="description"> <p> Creates a new file at the given path that is accessible using the given modes for a user having the given permission bits. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000091_source')" id="l_M000091_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L336" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000091_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 336</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-value str">'rw'</span>, <span class="ruby-identifier">perm</span> = <span class="ruby-value">0644</span> <span class="ruby-identifier">prefix</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">path</span>) <span class="ruby-identifier">target</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">path</span>) <span class="ruby-identifier">mode</span> = <span class="ruby-constant">MODES</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mode</span>) <span class="ruby-identifier">with_fid</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prefix_fid</span><span class="ruby-operator">|</span> <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">prefix_fid</span>, <span class="ruby-identifier">prefix</span> <span class="ruby-comment cmt"># create the file</span> <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tcreate</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">prefix_fid</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">target</span>, <span class="ruby-identifier">:perm</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">perm</span>, <span class="ruby-identifier">:mode</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">mode</span> ) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000088"> <a name="M000088"></a><b>entries</b>(path) </div> <div class="description"> <p> Returns the names of all files inside the directory whose path is given. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000088_source')" id="l_M000088_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L315" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000088_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 315</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">entries</span> <span class="ruby-identifier">path</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">stat</span>(<span class="ruby-identifier">path</span>).<span class="ruby-identifier">directory?</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"#{path.inspect} is not a directory"</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">path</span>).<span class="ruby-identifier">map!</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span> <span class="ruby-identifier">t</span>.<span class="ruby-identifier">name</span>} <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000061"> <a name="M000061"></a><b>open</b>(path, mode = 'r') </div> <div class="description"> <p> Opens the given path for I/O access through a <a href="Agent/FidStream.html">FidStream</a> object. If a block is given, it is invoked with a <a href="Agent/FidStream.html">FidStream</a> object and the stream is closed afterwards. </p> <p> See File::open in the Ruby documentation. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000061_source')" id="l_M000061_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L157" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000061_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 157</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-value str">'r'</span> <span class="ruby-comment cmt"># :yields: FidStream</span> <span class="ruby-identifier">mode</span> = <span class="ruby-constant">MODES</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mode</span>) <span class="ruby-comment cmt"># open the file</span> <span class="ruby-identifier">path_fid</span> = <span class="ruby-identifier">walk</span>(<span class="ruby-identifier">path</span>) <span class="ruby-identifier">talk</span> <span class="ruby-constant">Topen</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">:mode</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">mode</span> ) <span class="ruby-identifier">stream</span> = <span class="ruby-constant">FidStream</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">path_fid</span>, <span class="ruby-ivar">@msize</span>) <span class="ruby-comment cmt"># return the file stream</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span> <span class="ruby-keyword kw">begin</span> <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">stream</span> <span class="ruby-keyword kw">ensure</span> <span class="ruby-identifier">stream</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">stream</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000087"> <a name="M000087"></a><b>read</b>(path, *args) </div> <div class="description"> <p> Returns the content of the file/directory at the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000087_source')" id="l_M000087_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L306" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000087_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 306</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span> <span class="ruby-identifier">path</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000097"> <a name="M000097"></a><b>remove</b>(path) </div> <div class="description"> <p> Deletes the file at the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000097_source')" id="l_M000097_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L358" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000097_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 358</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove</span> <span class="ruby-identifier">path</span> <span class="ruby-identifier">path_fid</span> = <span class="ruby-identifier">walk</span>(<span class="ruby-identifier">path</span>) <span class="ruby-identifier">remove_fid</span> <span class="ruby-identifier">path_fid</span> <span class="ruby-comment cmt"># remove also does clunk</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000098"> <a name="M000098"></a><b>remove_fid</b>(path_fid) </div> <div class="description"> <p> Deletes the file corresponding to the given FID and clunks the given FID. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000098_source')" id="l_M000098_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L367" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000098_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 367</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove_fid</span> <span class="ruby-identifier">path_fid</span> <span class="ruby-identifier">talk</span> <span class="ruby-constant">Tremove</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">path_fid</span>) <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000101"> <a name="M000101"></a><b>stat</b>(path) </div> <div class="description"> <p> Returns information about the file at the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000101_source')" id="l_M000101_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L374" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000101_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 374</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stat</span> <span class="ruby-identifier">path</span> <span class="ruby-identifier">with_fid</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path_fid</span><span class="ruby-operator">|</span> <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">path</span> <span class="ruby-identifier">stat_fid</span> <span class="ruby-identifier">path_fid</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000105"> <a name="M000105"></a><b>stat_fid</b>(path_fid) </div> <div class="description"> <p> Returns information about the file referenced by the given FID. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000105_source')" id="l_M000105_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L384" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000105_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 384</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stat_fid</span> <span class="ruby-identifier">path_fid</span> <span class="ruby-identifier">req</span> = <span class="ruby-constant">Tstat</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">path_fid</span>) <span class="ruby-identifier">rsp</span> = <span class="ruby-identifier">talk</span>(<span class="ruby-identifier">req</span>) <span class="ruby-identifier">rsp</span>.<span class="ruby-identifier">stat</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000053"> <a name="M000053"></a><b>talk</b>(request) </div> <div class="description"> <p> Sends the given message (<a href="Fcall.html">Rumai::IXP::Fcall</a>) and returns its response. </p> <p> This method allows you to perform a 9P2000 transaction without worrying about the details of tag collisions and thread safety. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000053_source')" id="l_M000053_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L110" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000053_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 110</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">talk</span> <span class="ruby-identifier">request</span> <span class="ruby-comment cmt"># send the request</span> <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@tag_pool</span>.<span class="ruby-identifier">obtain</span> <span class="ruby-identifier">bay</span> = <span class="ruby-ivar">@recv_bays</span>[<span class="ruby-identifier">tag</span>] <span class="ruby-identifier">request</span>.<span class="ruby-identifier">tag</span> = <span class="ruby-identifier">tag</span> <span class="ruby-identifier">output</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">to_9p</span> <span class="ruby-ivar">@send_lock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span> <span class="ruby-ivar">@stream</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">output</span> <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># receive the response</span> <span class="ruby-identifier">response</span> = <span class="ruby-identifier">bay</span>.<span class="ruby-identifier">shift</span> <span class="ruby-ivar">@tag_pool</span>.<span class="ruby-identifier">release</span> <span class="ruby-identifier">tag</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Rerror</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">"#{response.ename.inspect} in response to #{request.inspect}"</span> <span class="ruby-keyword kw">else</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">response</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000106"> <a name="M000106"></a><b>walk</b>(path) </div> <div class="description"> <p> Returns an FID corresponding to the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000106_source')" id="l_M000106_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L393" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000106_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 393</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">walk</span> <span class="ruby-identifier">path</span> <span class="ruby-identifier">fid</span> = <span class="ruby-ivar">@fid_pool</span>.<span class="ruby-identifier">obtain</span> <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">fid</span>, <span class="ruby-identifier">path</span> <span class="ruby-identifier">fid</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000107"> <a name="M000107"></a><b>walk_fid</b>(path_fid, path) </div> <div class="description"> <p> Associates the given FID to the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000107_source')" id="l_M000107_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L402" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000107_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 402</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">walk_fid</span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">path</span> <span class="ruby-identifier">talk</span> <span class="ruby-constant">Twalk</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">:fid</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@root_fid</span>, <span class="ruby-identifier">:newfid</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">path_fid</span>, <span class="ruby-identifier">:wname</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">%r{/+}</span>).<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">empty?</span> } ) <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> <div class="method"> <div class="title" id="M000090"> <a name="M000090"></a><b>write</b>(path, content) </div> <div class="description"> <p> Returns the content of the file/directory at the given path. </p> </div> <div class="sourcecode"> <p class="source-link"> Source: <a href="javascript:toggleSource('M000090_source')" id="l_M000090_source">show</a> | <a href="http://github.com/sunaku/rumai/blob/5fcf09b89976a53dd9346e335a1803b337e0c447/lib/rumai/ixp/transport.rb#L326" target="_blank" class="github_url">on GitHub</a> </p> <div id="M000090_source" class="dyn-source"> <pre><span class="ruby-comment cmt"># File lib/rumai/ixp/transport.rb, line 326</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">content</span> <span class="ruby-identifier">open</span> <span class="ruby-identifier">path</span>, <span class="ruby-value str">'w'</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">content</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </div> </div> </div> </div> </div> </body> </html>