<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Fuse</title><link>https://sourceforge.net/p/rupy/wiki/Fuse/</link><description>Recent changes to Fuse</description><atom:link href="https://sourceforge.net/p/rupy/wiki/Fuse/feed" rel="self"/><language>en</language><lastBuildDate>Fri, 13 Mar 2015 09:59:54 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/rupy/wiki/Fuse/feed" rel="self" type="application/rss+xml"/><item><title>Fuse modified by Anonymous</title><link>https://sourceforge.net/p/rupy/wiki/Fuse/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;This requires latest &lt;a class="" href="http://rupy.se/rupy.zip" rel="nofollow"&gt;rupy&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;This is how the current client/server tools work in a co-operative solution: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;time &lt;span class="o"&gt;&amp;lt;----------------&lt;/span&gt;  goes forth &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; back  &lt;span class="o"&gt;------------------&amp;gt;&lt;/span&gt;
wait      ↓↓↓↓   ↓↓↓↓↓   ↓↓↓↓   ↓↓↓↓   ↓↓↓↓↓   ↓↓↓↓           
loss             ↓↓↓↓↓                 ↓↓↓↓↓                  &lt;span class="p"&gt;(&lt;/span&gt;CPU&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;+--------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;           &lt;span class="o"&gt;+---------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;---+----&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  brow  &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;  sync1  &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt;  sync2  &lt;span class="o"&gt;|&lt;/span&gt; .. &lt;span class="o"&gt;|&lt;/span&gt;  serv2  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;----+---&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+--------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;
                             &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
                         &lt;span class="o"&gt;+---------+&lt;/span&gt;
                         &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
                         &lt;span class="o"&gt;|&lt;/span&gt;  serv1  &lt;span class="o"&gt;|&lt;/span&gt;
                         &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
                         &lt;span class="o"&gt;+---------+&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brow&lt;/code&gt; = &lt;code&gt;sync&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &lt;code&gt;(browser)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;serv&lt;/code&gt; = &lt;code&gt;sync&lt;/code&gt; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(database)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sync&lt;/code&gt; = &lt;code&gt;sync&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &amp;amp; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(old web-server)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The idea is to only wait in the network (no related &lt;code&gt;IO-wait&lt;/code&gt;) and to wait for multiple things at the same time: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;time &lt;span class="o"&gt;&amp;lt;---------------&lt;/span&gt;  goes forth &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; back  &lt;span class="o"&gt;---------------&amp;gt;&lt;/span&gt;
wait      ↓↓↓↓           ↓↓   ↓↓           ↓↓↓↓

&lt;span class="o"&gt;+--------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;       &lt;span class="o"&gt;+---------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-+--&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  brow  &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;  asyn1  &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;  asyn2  &lt;span class="o"&gt;|&lt;/span&gt; .. &lt;span class="o"&gt;|&lt;/span&gt;  serv2  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;--+-&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+--------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;+---------+&lt;/span&gt;    &lt;span class="o"&gt;+---------+&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;+---+&lt;/span&gt;
                           &lt;span class="o"&gt;+---+&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
                               &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="o"&gt;+---------+&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt;  serv1  &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="o"&gt;+---------+&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brow&lt;/code&gt; = &lt;code&gt;sync&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &lt;code&gt;(browser)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;serv&lt;/code&gt; = &lt;code&gt;sync&lt;/code&gt; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(database)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;asyn&lt;/code&gt; = &lt;code&gt;asyn&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &amp;amp; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(``FUSE``)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For this we introduce a new concept; &lt;code&gt;FUSE&lt;/code&gt;. With &lt;code&gt;FUSE&lt;/code&gt; all threads &lt;code&gt;asyn&lt;/code&gt; end-to-end or socket-to-socket if you will, they never wait for anything. &lt;/p&gt;
&lt;p&gt;Another way to describe this is time and &lt;code&gt;IO-wait&lt;/code&gt; shown in the graph below: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sync&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &amp;amp; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(old web-server)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;asyn&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &lt;code&gt;(netflix)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;asyn&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &amp;amp; &lt;code&gt;res&lt;/code&gt; &lt;code&gt;(``FUSE``)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="" src="http://rupy.se/fuse.gif" rel="nofollow" /&gt;&lt;/p&gt;
&lt;p&gt;You can imagine that the compounded savings in terms of time and wait are huge, specially when the system grows in concurrency and depth. As a matter of fact, you can't scale at all without &lt;code&gt;asyn&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; and with &lt;code&gt;asyn&lt;/code&gt; &lt;code&gt;req&lt;/code&gt; &amp;amp; &lt;code&gt;res&lt;/code&gt; you're far better off. &lt;/p&gt;
&lt;p&gt;If you want to use &lt;a class="" href="https://code.google.com/p/rupy/wiki/Process" rel="nofollow"&gt;µSOA&lt;/a&gt; this is the most performant way to build your services network. &lt;/p&gt;
&lt;p&gt;You can even use this as a load balancer. &lt;/p&gt;
&lt;p&gt;Another use case for this is our cluster database &lt;a class="" href="https://code.google.com/p/rupy/wiki/Persistence" rel="nofollow"&gt;ROOT&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;This &lt;a class="" href="http://root.rupy.se/fuse" rel="nofollow"&gt;example&lt;/a&gt; fuses data &lt;code&gt;asyn&lt;/code&gt; from multiple servers to your browser ASAP on a raspberry pi with zero thread &lt;code&gt;IO-wait&lt;/code&gt;: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// TODO: Improve latch.&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;static&lt;/span&gt; &lt;span class="nb"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Fuse&lt;/span&gt; &lt;span class="nx"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Service&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;String&lt;/span&gt; &lt;span class="nb"&gt;path&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;"/fuse"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;void&lt;/span&gt; &lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;Event&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;throws&lt;/span&gt; &lt;span class="nx"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event.push&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;Http&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; http = (Http&lt;span class="cp"&gt;[]&lt;/span&gt;) event.query().get("http");
            Output out = event.output();
            int done = 0;

            for(int i = 0; i &lt;span class="nt"&gt;&amp;lt; http.length&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;i++)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;if(http&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="err"&gt;.print(out))&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                    &lt;span class="err"&gt;done++;&lt;/span&gt;
                &lt;span class="err"&gt;}&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;

            &lt;span class="err"&gt;if(&lt;/span&gt;&lt;span class="na"&gt;done =&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt; &lt;span class="err"&gt;http.length)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;out.println("&amp;lt;/body&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;");
                out.finish();
            }

            out.flush();
        }
        else {
            event.query().put("time", System.currentTimeMillis());

            Http&lt;span class="cp"&gt;[]&lt;/span&gt; http = new Http&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;;

            String path = "/v1/public/yql" +
            "?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDSEK%22)" +
            "&lt;span class="ni"&gt;&amp;amp;format=json&amp;amp;env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";&lt;/span&gt;

            http&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; = new Http("one", "strip.rupy.se", "/?a=martin+kellerman&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;body", event);
            http&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; = new Http("two", "query.yahooapis.com", path, event);

            for(int i = 0; i &lt;span class="nt"&gt;&amp;lt; http.length&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="err"&gt;i++)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;The&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt; &lt;span class="err"&gt;at&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;end&lt;/span&gt; &lt;span class="err"&gt;is&lt;/span&gt; &lt;span class="err"&gt;very&lt;/span&gt; &lt;span class="err"&gt;important.&lt;/span&gt;
                &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;It&lt;/span&gt; &lt;span class="err"&gt;means&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;socket&lt;/span&gt; &lt;span class="err"&gt;will&lt;/span&gt; &lt;span class="err"&gt;be&lt;/span&gt; &lt;span class="err"&gt;kept&lt;/span&gt; &lt;span class="err"&gt;alive&lt;/span&gt; 
                &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;for&lt;/span&gt; &lt;span class="err"&gt;10&lt;/span&gt; &lt;span class="err"&gt;seconds&lt;/span&gt; &lt;span class="err"&gt;since&lt;/span&gt; &lt;span class="err"&gt;last&lt;/span&gt; &lt;span class="err"&gt;active.&lt;/span&gt;
                &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;This&lt;/span&gt; &lt;span class="err"&gt;is&lt;/span&gt; &lt;span class="err"&gt;our&lt;/span&gt; &lt;span class="err"&gt;Murphy's&lt;/span&gt; &lt;span class="err"&gt;law&lt;/span&gt; &lt;span class="err"&gt;solution.&lt;/span&gt;
                &lt;span class="err"&gt;event.daemon().client().send(http&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="err"&gt;.host,&lt;/span&gt; &lt;span class="err"&gt;http&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="err"&gt;10);&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;

            &lt;span class="err"&gt;event.query().put("http",&lt;/span&gt; &lt;span class="err"&gt;http);&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;

    &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;static&lt;/span&gt; &lt;span class="err"&gt;class&lt;/span&gt; &lt;span class="err"&gt;Http&lt;/span&gt; &lt;span class="err"&gt;extends&lt;/span&gt; &lt;span class="err"&gt;Async.Work&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;private&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;name;&lt;/span&gt;
        &lt;span class="err"&gt;private&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;host;&lt;/span&gt;
        &lt;span class="err"&gt;private&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;path;&lt;/span&gt;
        &lt;span class="err"&gt;private&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;body;&lt;/span&gt;
        &lt;span class="err"&gt;private&lt;/span&gt; &lt;span class="err"&gt;Event&lt;/span&gt; &lt;span class="err"&gt;event;&lt;/span&gt;

        &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;Http(String&lt;/span&gt; &lt;span class="err"&gt;name,&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;host,&lt;/span&gt; &lt;span class="err"&gt;String&lt;/span&gt; &lt;span class="err"&gt;path,&lt;/span&gt; &lt;span class="err"&gt;Event&lt;/span&gt; &lt;span class="err"&gt;event)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;this.name =&lt;/span&gt; &lt;span class="s"&gt;name;&lt;/span&gt;
            &lt;span class="na"&gt;this.host =&lt;/span&gt; &lt;span class="s"&gt;host;&lt;/span&gt;
            &lt;span class="na"&gt;this.path =&lt;/span&gt; &lt;span class="s"&gt;path;&lt;/span&gt;
            &lt;span class="na"&gt;this.event =&lt;/span&gt; &lt;span class="s"&gt;event;&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;

        &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;boolean&lt;/span&gt; &lt;span class="err"&gt;print(Output&lt;/span&gt; &lt;span class="err"&gt;out)&lt;/span&gt; &lt;span class="err"&gt;throws&lt;/span&gt; &lt;span class="err"&gt;Exception&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="err"&gt;if(event.query().get(name)&lt;/span&gt; &lt;span class="err"&gt;instanceof&lt;/span&gt; &lt;span class="err"&gt;Http)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;long&lt;/span&gt; &lt;span class="na"&gt;time =&lt;/span&gt; &lt;span class="s"&gt;System.currentTimeMillis()&lt;/span&gt; &lt;span class="err"&gt;-&lt;/span&gt; &lt;span class="err"&gt;event.big("time");&lt;/span&gt;
                &lt;span class="err"&gt;System.out.println("&lt;/span&gt;  &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;name&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;time&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;ms.");&lt;/span&gt;
                &lt;span class="err"&gt;out.println(body);&lt;/span&gt;
                &lt;span class="err"&gt;event.query().put(name,&lt;/span&gt; &lt;span class="err"&gt;"done");&lt;/span&gt;
                &lt;span class="err"&gt;return&lt;/span&gt; &lt;span class="err"&gt;true;&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;
            &lt;span class="err"&gt;else&lt;/span&gt; &lt;span class="err"&gt;if(event.query().get(name)&lt;/span&gt; &lt;span class="err"&gt;instanceof&lt;/span&gt; &lt;span class="err"&gt;String)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;return&lt;/span&gt; &lt;span class="err"&gt;((String)&lt;/span&gt; &lt;span class="err"&gt;event.query().get(name)).equals("done");&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;

            &lt;span class="err"&gt;return&lt;/span&gt; &lt;span class="err"&gt;false;&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;

        &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt; &lt;span class="err"&gt;send(Async.Call&lt;/span&gt; &lt;span class="err"&gt;call)&lt;/span&gt; &lt;span class="err"&gt;throws&lt;/span&gt; &lt;span class="err"&gt;Exception&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="err"&gt;call.get(path,&lt;/span&gt; &lt;span class="err"&gt;"Host:&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;host&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;"\r\n");&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;

        &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt; &lt;span class="err"&gt;read(String&lt;/span&gt; &lt;span class="err"&gt;body)&lt;/span&gt; &lt;span class="err"&gt;throws&lt;/span&gt; &lt;span class="err"&gt;Exception&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;this.body =&lt;/span&gt; &lt;span class="s"&gt;body;&lt;/span&gt;
            &lt;span class="err"&gt;event.query().put(name,&lt;/span&gt; &lt;span class="err"&gt;this);&lt;/span&gt;
            &lt;span class="err"&gt;System.out.println("&lt;/span&gt;  &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;name&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;success&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;event.reply().wakeup());&lt;/span&gt;
            &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;Normally&lt;/span&gt; &lt;span class="err"&gt;it's&lt;/span&gt; &lt;span class="err"&gt;better&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;wakeup&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;response&lt;/span&gt; &lt;span class="err"&gt;after&lt;/span&gt; &lt;span class="err"&gt;all&lt;/span&gt; &lt;span class="err"&gt;client&lt;/span&gt; &lt;span class="err"&gt;requests&lt;/span&gt; &lt;span class="err"&gt;are&lt;/span&gt; &lt;span class="err"&gt;finished,&lt;/span&gt; 
            &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;but&lt;/span&gt; &lt;span class="err"&gt;we&lt;/span&gt; &lt;span class="err"&gt;wan't&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;show&lt;/span&gt; &lt;span class="err"&gt;you&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;parts&lt;/span&gt; &lt;span class="err"&gt;as&lt;/span&gt; &lt;span class="err"&gt;they&lt;/span&gt; &lt;span class="err"&gt;complete&lt;/span&gt; &lt;span class="err"&gt;on-the-fly!&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;

        &lt;span class="err"&gt;public&lt;/span&gt; &lt;span class="err"&gt;void&lt;/span&gt; &lt;span class="err"&gt;fail(String&lt;/span&gt; &lt;span class="err"&gt;host,&lt;/span&gt; &lt;span class="err"&gt;Exception&lt;/span&gt; &lt;span class="err"&gt;e)&lt;/span&gt; &lt;span class="err"&gt;throws&lt;/span&gt; &lt;span class="err"&gt;Exception&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
            &lt;span class="err"&gt;if(e&lt;/span&gt; &lt;span class="err"&gt;instanceof&lt;/span&gt; &lt;span class="err"&gt;Async.Timeout)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;System.out.println("&lt;/span&gt;  &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;e);&lt;/span&gt;
                &lt;span class="err"&gt;event.daemon().client().send(host,&lt;/span&gt; &lt;span class="err"&gt;this,&lt;/span&gt; &lt;span class="err"&gt;10);&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;
            &lt;span class="err"&gt;else&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
                &lt;span class="err"&gt;e.printStackTrace();&lt;/span&gt;
                &lt;span class="err"&gt;event.query().put("response",&lt;/span&gt; &lt;span class="err"&gt;e.toString());&lt;/span&gt;
                &lt;span class="err"&gt;System.out.println("&lt;/span&gt;  &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;name&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;failure&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;+&lt;/span&gt; &lt;span class="err"&gt;event.reply().wakeup());&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;
        &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;};&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Fri, 13 Mar 2015 09:59:54 -0000</pubDate><guid>https://sourceforge.netf105e8bdd00353c91bc366cd44903552da38cd50</guid></item></channel></rss>