On Mon, Oct 03, 2005 at 07:59:59PM -0400, Paul Davis wrote:

> i consider that the CV never considers changes
> to have been carried out just because it asked. anything else is not
> really MVC. maybe the change requested by CV is not possible for M at
> this time.

Good point. So this means that when M refuses a new value, it should
respond by sending the current value at least to the originator of the
request. In some cases (e.g. a slider) the C and V elements are the same 
(the slider's knob), which amounts to an implicit assumption by CV that
its request will be accepted. So a slap on its hands by M is the only
way to correct such hubris.

>     void handle_model_state_change()
>     {
>         change_my_view_state_value (the_model_state->value);
>     }
> 
>     void change_my_view_state_value (float newval)
>     {
>         if (my_view_state->value != newval) {
>          my_view_state->value = newval;
>          send_change_to_model (my_view_state->value);
>         }
>     }
> 
> this causes one extra "cycle" in any state change, but ensures absolute 
> agreement between V(C) and M. notice that C and (indirectly) M can both
> use change_my_view_state() to achieve their goals.

Interesting. I'll have to go through some mental exercise to convince myself
that this will never cause infinite cycles.


Dave Robillard wrote:

> After much fiddling around with ugly schemes to not send replies to
> certain clients in Om, I just echoed back /everything/ to all registered
> clients, and left it up to the client to deal with it.  The comm layer
> is much simpler and understandable because of it.
> ... Generally when given the choice I'll choose complexity in the client
> over complexity in the engine any day.


Thanks to both of you for your response. So at least two experienced
developers agree that updates should go to *all* clients, and that a client
can be expected to handle this gracefully. Since that was my position from
the start, I'll join the club :-)


-- 
FA



Reply via email to