Hi,

You can work with multiple streams at a time by using the stream-*
words, instead of words such as readln. For example, readln is defined
as

: readln ( -- line ) input-stream get stream-readln ;

If you use the stream-* version, you can pass the stream around on the
stack or put it in a variable, and work with multiple streams. You
still have to use with-disposal or with-destructors to ensure the
streams get closed in the event of an error. Also,

[ readln dup ] [ ] [ drop ] produce

is the same same as

input-stream get lines

There is also an each-line combinator which applies a quotation to
each line; this runs in constant space, instead of 'lines' which
slurps everything into memory.

Hope this helps,

Slava

On Sun, Jan 11, 2009 at 6:27 AM, Ludovic Kuty <[email protected]> wrote:
> Hello,
>
> I want to print the response given by a Web server using socket
> primitives (not an HTTP library). I managed to produce the following
> working code running in the factor Workspace.
>
> USING: io.sockets io.encodings.ascii ;
> "www.google.com" 80 <inet>
> ascii
> [
>   "GET / HTTP/1.0\r\n\r\n" write flush
>   [ readln dup ] [ ] [ drop ] produce
> ]
> with-client
> [ . ] each
>
> But if I prefer to print the HTTP reponse directly in the quotation
> used by with-client instead of returning a result and then printing it
> with "[ . ] each", what should I do ?
>
> Indeed the default input and output streams are rebound by with-client
> and thus  inside the quotation I do not have access to stdout (the
> output stream to the console). It took me some time to realize this
> and have a working code. I thought of getting access to the output
> stream stored in the global namespace but it doesn't work (\ output-
> stream get-global). In fact that doesn't make sense maybe. I also
> thought of using with-output-stream but I can't see how to place it in
> the code since I need two different output-streams at the same time.
>
> Also, if you have any comment, insight or remark about the code,
> please let me know.
>
> Thank in advance,
>
> Ludovic Kuty
>
> OUTPUT:
>
> "HTTP/1.0 302 Found"
> "Location: http://www.google.be/";
> "Cache-Control: private"
> "Content-Type: text/html; charset=UTF-8"
> "Set-Cookie:
> PREF
> =ID=db53d028f07bf514:TM=1231675166:LM=1231675166:S=x-4Mym8gM1pvKy6Y;
> expires=Tue, 11-Jan-2011 11:59:26 GMT; path=/; domain=.google.com"
> "Date: Sun, 11 Jan 2009 11:59:26 GMT"
> "Server: gws"
> "Content-Length: 218"
> ""
> "<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/
> html;charset=utf-8\">"
> "<TITLE>302 Moved</TITLE></HEAD><BODY>"
> "<H1>302 Moved</H1>"
> "The document has moved"
> "<A HREF=\"http://www.google.be/\";>here</A>."
> "</BODY></HTML>"
>
>
>
> ------------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It is the best place to buy or sell services for
> just about anything Open Source.
> http://p.sf.net/sfu/Xq1LFB
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to