Re: Help can't work out what is happening

"somealiassoitwillstopaskingqs" <[email protected]> Sun, 31 Mar 2013 19:33:34 -0000
Newsgroups gmane.comp.lang.io
Message-ID <[email protected]>
--exOGSRUcTo9mOv6-zete3fn8cIeBpU4SEAtBa4R
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Thanks a lot. Definitely a bit of weird behaviour.

--- In [email protected], Wesley Teal <wesleyteal@...> wrote:
>
> On Mar 29, 2013, at 6:48 AM, somealiassoitwillstopaskingqs wrote:
>=20
> > For some reason the if statement testing for the request path ending in=
 a / seems to completely stop it working. i can't work out what i am doing =
wrong.
> >=20
> Hi some,
> I'm really not sure what's wrong with your code, except that for some rea=
son the slash in
> requestPath :=3D "/index.html" seems to be really confusing the Io vm. If=
 you remove it, your prints should work and requestPath should be reassigne=
d as you wish. Io's web handling appears to automatically prepend the root =
directory to the beginnings of requests.
>=20
> >=20
> > port :=3D 8000
> >=20
> > WebRequest :=3D Object clone do(
> > handleSocket :=3D method(aSocket,
> > "[server] handling request\n" print
> > aSocket streamReadNextChunk
> > request :=3D aSocket readBuffer
> > request print
> > requestPath :=3D request betweenSeq("GET "," HTTP")
> > "[server] #{requestPath}\n" interpolate print
> > lastChar :=3D requestPath exSlice(-1)
> > lastChar print
> > if(lastChar =3D=3D "/", requestPath :=3D "/index.html")
> >=20
>                                                                       ^--=
 here's your problem, delete that slash and all should be well.
>=20
> As an aside, since requestPath has been instantiated already you could wr=
ite
> requestPath =3D "index.html" instead of requestPath :=3D "index.html". It=
 shouldn't make any difference, but the :=3D is only required when you crea=
te an object, but isn't necessary for assigning a new value to it.
>=20
> > requestPath print
> >=20
> ^-- for whatever reason, this line doesn't seem to print until another re=
quest is made, so it comes out before all the header info of the next reque=
st rather than after the header info of the request it's referring to.
>=20
> > f :=3D File with(requestPath)=20
> > if(f exists,=20
> > f streamTo(aSocket)
> > ,=20
> > aSocket streamWrite("not found")
> > )
> > aSocket close
> > )
> > )
> >=20
> > WebServer :=3D Server clone do(
> > setPort(8000)
> > handleSocket :=3D method(aSocket,=20
> > WebRequest clone asyncSend(handleSocket(aSocket))
> > )
> > )
> > "[server] starting on port: #{port}\n" interpolate print
> >=20
> > WebServer start
> >=20
> > Also the prints around the if don't seem to do anything.
> >=20
> Should work now. I hope this helps.
>=20
> Best,
> Wes
>



--exOGSRUcTo9mOv6-zete3fn8cIeBpU4SEAtBa4R
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>







<body style="background-color: #fff;">
<span style="display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
  <div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text" >
      
      
      <p>Thanks a lot. Definitely a bit of weird behaviour.<br>
<br>
--- In <a href="mailto:iolanguage%40yahoogroups.com">[email protected]</a>, Wesley Teal &lt;wesleyteal@...&gt; wrote:<br>
&gt;<br>
&gt; On Mar 29, 2013, at 6:48 AM, somealiassoitwillstopaskingqs wrote:<br>
&gt; <br>
&gt; &gt; For some reason the if statement testing for the request path ending in a / seems to completely stop it working. i can&#39;t work out what i am doing wrong.<br>
&gt; &gt; <br>
&gt; Hi some,<br>
&gt; I&#39;m really not sure what&#39;s wrong with your code, except that for some reason the slash in<br>
&gt; requestPath := &quot;/index.html&quot; seems to be really confusing the Io vm. If you remove it, your prints should work and requestPath should be reassigned as you wish. Io&#39;s web handling appears to automatically prepend the root directory to the beginnings of requests.<br>
&gt; <br>
&gt; &gt; <br>
&gt; &gt; port := 8000<br>
&gt; &gt; <br>
&gt; &gt; WebRequest := Object clone do(<br>
&gt; &gt; handleSocket := method(aSocket,<br>
&gt; &gt; &quot;[server] handling request&#92;n&quot; print<br>
&gt; &gt; aSocket streamReadNextChunk<br>
&gt; &gt; request := aSocket readBuffer<br>
&gt; &gt; request print<br>
&gt; &gt; requestPath := request betweenSeq(&quot;GET &quot;,&quot; HTTP&quot;)<br>
&gt; &gt; &quot;[server] #{requestPath}&#92;n&quot; interpolate print<br>
&gt; &gt; lastChar := requestPath exSlice(-1)<br>
&gt; &gt; lastChar print<br>
&gt; &gt; if(lastChar == &quot;/&quot;, requestPath := &quot;/index.html&quot;)<br>
&gt; &gt; <br>
&gt;                                                                       ^-- here&#39;s your problem, delete that slash and all should be well.<br>
&gt; <br>
&gt; As an aside, since requestPath has been instantiated already you could write<br>
&gt; requestPath = &quot;index.html&quot; instead of requestPath := &quot;index.html&quot;. It shouldn&#39;t make any difference, but the := is only required when you create an object, but isn&#39;t necessary for assigning a new value to it.<br>
&gt; <br>
&gt; &gt; requestPath print<br>
&gt; &gt; <br>
&gt; ^-- for whatever reason, this line doesn&#39;t seem to print until another request is made, so it comes out before all the header info of the next request rather than after the header info of the request it&#39;s referring to.<br>
&gt; <br>
&gt; &gt; f := File with(requestPath) <br>
&gt; &gt; if(f exists, <br>
&gt; &gt; f streamTo(aSocket)<br>
&gt; &gt; , <br>
&gt; &gt; aSocket streamWrite(&quot;not found&quot;)<br>
&gt; &gt; )<br>
&gt; &gt; aSocket close<br>
&gt; &gt; )<br>
&gt; &gt; )<br>
&gt; &gt; <br>
&gt; &gt; WebServer := Server clone do(<br>
&gt; &gt; setPort(8000)<br>
&gt; &gt; handleSocket := method(aSocket, <br>
&gt; &gt; WebRequest clone asyncSend(handleSocket(aSocket))<br>
&gt; &gt; )<br>
&gt; &gt; )<br>
&gt; &gt; &quot;[server] starting on port: #{port}&#92;n&quot; interpolate print<br>
&gt; &gt; <br>
&gt; &gt; WebServer start<br>
&gt; &gt; <br>
&gt; &gt; Also the prints around the if don&#39;t seem to do anything.<br>
&gt; &gt; <br>
&gt; Should work now. I hope this helps.<br>
&gt; <br>
&gt; Best,<br>
&gt; Wes<br>
&gt;<br>
<br>
</p>

    </div>
     

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style="color: #fff; height: 0;">__._,_.___</div>

        
  
  
    <table cellspacing=4px style="margin-top: 20px; margin-bottom: 10px;">
      <tbody>
        <tr>
          <td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA "  >
                          <a style="text-decoration: none; color: #2D50FD" href="http://groups.yahoo.com/group/iolanguage/post;_ylc=X3oDMTJxMW51Z3M0BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzEzMzI0BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTM2NDc1ODQxOQ--?act=reply&messageNum=13324">Reply via web post</a>
                      </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
            <a href="mailto:[email protected]?subject=Re%3A%20%5BIo%5D%20Help%20can%27t%20work%20out%20what%20is%20happening" style="text-decoration: none; color: #2D50FD;">
              Reply to sender            </a> 
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; ">
            <a href="mailto:[email protected]?subject=Re%3A%20%5BIo%5D%20Help%20can%27t%20work%20out%20what%20is%20happening" style="text-decoration: none; color: #2D50FD">
              Reply to group            </a> 
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
            <a href="http://groups.yahoo.com/group/iolanguage/post;_ylc=X3oDMTJlbjlhZ2s5BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTM2NDc1ODQxOQ--" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px; color: #2D50FD; background-color: #F2F2F2; border: 1px solid #EAEAEA; " >
                            <a href="http://groups.yahoo.com/group/iolanguage/message/13321;_ylc=X3oDMTM2Z3FsaWd1BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzEzMzI0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTM2NDc1ODQxOQR0cGNJZAMxMzMyMQ--" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
                (3)
                      </td>
        </tr>
      </tbody>
    </table>

        
<!------- Start Nav Bar ------>
<!-- |**|begin egp html banner|**| -->
<!-- |**|end egp html banner|**| -->

<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
      <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; ">Recent Activity:</span>

    <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
            <li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;">
      <span class="cat"><a href="http://groups.yahoo.com/group/iolanguage/members;_ylc=X3oDMTJmODJpZnA5BF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEzNjQ3NTg0MTk-?o=6" style="text-decoration: none;">New Members</a></span>
      <span class="ct" style="color: #ff7900;">2</span>
    </li>
                                              </ul>
    
  <div style="clear: both; padding-top: 2px; color: #1e66ae;">
    <a href="http://groups.yahoo.com/group/iolanguage;_ylc=X3oDMTJlMGl1dTRzBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTM2NDc1ODQxOQ--" style="text-decoration: none;">Visit Your Group</a>
  </div>
</div>


  
<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
  <a href="http://groups.yahoo.com/;_ylc=X3oDMTJkaTh1bWRpBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMzY0NzU4NDE5" style="float: left;"><img src="http://l.yimg.com/a/i/us/yg/logo/us.gif" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
  <div style="color: #747575; float: right;">Switch to: <a href="mailto:[email protected]?subject=Change Delivery Format: Traditional" style="text-decoration: none;">Text-Only</a>, <a href="mailto:[email protected]?subject=Email Delivery: Digest" class="margin-rt" style="text-decoration: none;">Daily Digest</a> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="http://docs.yahoo.com/info/terms/" style="text-decoration: none;">Terms of Use</a> &bull; <a href="mailto:[email protected]?subject=Feedback on the redesigned individual mail v1" style="text-decoration: none;">Send us Feedback </a></div>
</div>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id="ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src="http://geo.yahoo.com/serv?s=97359714/grpId=6677476/grpspId=1705006764/msgId=13324/stime=1364758419" width="1" height="1"> <br>

<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type="text/css">
  <!--
  #ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
  #ygrp-sponsor #ygrp-lc {
  font-family: Arial;
}

#ygrp-sponsor #ygrp-lc #hd {
  margin: 10px 0px;
  font-weight: 700;
  font-size: 78%;
  line-height: 122%;
}

#ygrp-sponsor #ygrp-lc .ad {
  margin-bottom: 10px;
  padding: 0 0;
}

  #actions {
    font-family: Verdana;
    font-size: 11px;
    padding: 10px 0;
  }

  #activity {
    background-color: #e0ecee;
    float: left;
    font-family: Verdana;
    font-size: 10px;
    padding: 10px;
  }

  #activity span {
    font-weight: 700;
  }

  #activity span:first-child {
    text-transform: uppercase;
  }

  #activity span a {
    color: #5085b6;
    text-decoration: none;
  }

  #activity span span {
    color: #ff7900;
  }

  #activity span .underline {
    text-decoration: underline;
  }

  .attach {
    clear: both;
    display: table;
    font-family: Arial;
    font-size: 12px;
    padding: 10px 0;
    width: 400px;
  }

  .attach div a {
    text-decoration: none;
  }

  .attach img {
    border: none;
    padding-right: 5px;
  }

  .attach label {
    display: block;
    margin-bottom: 5px;
  }

  .attach label a {
    text-decoration: none;
  }
  
  blockquote {
    margin: 0 0 0 4px;
  }

  .bold {
    font-family: Arial;
    font-size: 13px;
    font-weight: 700;
  }

  .bold a {
    text-decoration: none;
  }

  dd.last p a {
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span {
    margin-right: 10px;
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span.yshortcuts {
    margin-right: 0;
  }

  div.attach-table div div a {
    text-decoration: none;
  }

  div.attach-table {
    width: 400px;
  }

  div.file-title a, div.file-title a:active, div.file-title a:hover, div.file-title a:visited {
    text-decoration: none;
  }

  div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited {
    text-decoration: none;
  }

  div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
  }

  .green {
    color: #628c2a;
  }

  .MsoNormal {
    margin: 0 0 0 0;
  }

  o {
    font-size: 0;
  }

  #photos div {
    float: left;
    width: 72px;
  }

  #photos div div {
    border: 1px solid #666666;
    height: 62px;
    overflow: hidden;
    width: 62px;
  }

  #photos div label {
    color: #666666;
    font-size: 10px;
    overflow: hidden;
    text-align: center;
    white-space: nowrap;
    width: 64px;
  }

  #reco-category {
    font-size: 77%;
  }

  #reco-desc {
    font-size: 77%;
  }

  .replbq {
    margin: 4px;
  }

  #ygrp-actbar div a:first-child {
   /* border-right: 0px solid #000;*/
    margin-right: 2px;
    padding-right: 5px;
  }

  #ygrp-mlmsg {
    font-size: 13px;
    font-family: Arial, helvetica,clean, sans-serif;
    *font-size: small;
    *font: x-small;
  }

  #ygrp-mlmsg table {
    font-size: inherit;
    font: 100%;
  }

  #ygrp-mlmsg select, input, textarea {
    font: 99% Arial, Helvetica, clean, sans-serif;
  }

  #ygrp-mlmsg pre, code {
    font:115% monospace;
    *font-size:100%;
  }

  #ygrp-mlmsg * {
    line-height: 1.22em;
  }

  #ygrp-mlmsg #logo {
    padding-bottom: 10px;
  }


  #ygrp-msg p a {
    font-family: Verdana;
  }

  #ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: 700;
  }

  #ygrp-reco #reco-head {
    color: #ff7900;
    font-weight: 700;
  }

  #ygrp-reco {
    margin-bottom: 20px;
    padding: 0px;
  }

  #ygrp-sponsor #ov li a {
    font-size: 130%;
    text-decoration: none;
  }

  #ygrp-sponsor #ov li {
    font-size: 77%;
    list-style-type: square;
    padding: 6px 0;
  } 

  #ygrp-sponsor #ov ul {
    margin: 0;
    padding: 0 0 0 8px;
  }

  #ygrp-text {
    font-family: Georgia;
  }

  #ygrp-text p {
    margin: 0 0 1em 0;
  }

  #ygrp-text tt {
    font-size: 120%;
  }

  #ygrp-vital ul li:last-child {
    border-right: none !important; 
  } 
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--exOGSRUcTo9mOv6-zete3fn8cIeBpU4SEAtBa4R--