Hi Anton,

> The advantage of that over a single function, I suppose,
> is so that you can derive from a standard base
> object (or choose from several easy-to-use example objects),
> with the four functions [connect read write close] inside.
>
> I would be happy with that, if that was what you were thinking.

Yes. To limit namespace confusion, they could be called:

    resolve*    (?)
    connect*
    write*
    read*
    peer-close*

> Also, I see that the user code would be simpler, since
> you wouldn't need to nest your user code in a switch,
> and actually, the error handling when error? :state could
> become a function too.

Another solution could send the read error to the read* function, and so on...

This requires an argument for functions:

    read*: func [port value][]

value could be an error!, else none (or something else - for furture
expansions)

But handling errors makes code more complex for every function, perhaps is
better your proposal.

> Any other benefits to this approach ?

A default object, perhaps. User can change only what it needs.

One problem is where to store the object and how to permit the user to set it.

A fast example with the error* and with one argument:

;global word

async-feel: make object! [
    error*: func [port err [error!][err]
    resolve*: func [port value][false]
    connect*: func [port value [false]
    write*: func [port value][false]
    read*: func [port value][false]
    peer-close*: func [port value][close port true]
]

p: make port! [
    scheme: 'atcp
    ;must be used an existing field, like user-data
    user-data: make async-feel [
        read*: func [port value][ print copy port false]
    ]
]

and/or

p: open/custom async://abc:3838 [
    ;open must do make async-feel this-block
    async-feel [
        read*: func [port value][ print copy port false]
    ]
]

---
Ciao
Romano

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

Reply via email to