Hi, Will

    I should write it in the following mode. Some notes:

1) you can set the awake function using make port!

  port: make port! [scheme: 'async host: hst port-id: 80 awake: :handl]

you cannot use the words 'host or 'handler because the block is bound to the
port before execution (like in an object!: a port is an object!)

2) you can insert a string BEFORE connection is done: you must not wait the
'connect event

  open port
  insert port rejoin [{GET / HTTP/1.0} crlf {Host: } port/host crlf crlf]

3) you should not clear the system/ports/wait-list, it can contain some others
ports (like event port in View). Here i read the length? before the start and
wait until it is returned the same, but it is not the best solution:

---------
rebol []
do  http://www.rebol.it/giesse/async-protocol.r

get-fast: func [hosts /local port len][
 len: length? system/ports/wait-list
 foreach hst hosts [
  port: make port! [scheme: 'async host: hst port-id: 80 awake: :handl]
  open port
  insert port rejoin [{GET / HTTP/1.0} crlf {Host: } port/host crlf crlf]
 ]
 until [wait .1 len = length? system/ports/wait-list]
]

handl: func [port [port!] state [word! error!]] [
 if error? :state [print mold disarm state return true]
 switch state [
  connect [false]
  read [false]
  write [false]
  close [
   data: copy port
   close port
   print [port/host length? data]
   true
  ]
 ]
]


;example

urls: [
"www.rebol.com"
"www.rebol.net"
"www.rebol.org"
"www.apple.com"
"www.oracle.com"
"www.microsoft.com"
]

loop 5 [get-fast urls]

halt
---
Ciao
Romano

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to