




 
do-connections ((
sink
 
interface-name
 &key
                 
dispatch
 
automation-dispatch
)
                
container
)
               
form*
A symbol which will be bound to each sink interface pointer.
A symbol naming the sink interface.
A symbol which will be bound to a local macro that invokes a method from the sink interface as if by 
with-com-interface
.
A symbol which will be bound to a local macro that invokes a method from the sink interface as if by 
with-dispatch-interface
.
An instance of a component class that has interface-name as one of its source interfaces.
A form to be evaluated.
The macro 
do-connections
 provides a way to iterate over all the sink interface pointers for the source interface 
interface-name
 in the connection point container 
container
. The 
container
 must be a subclass of 
standard-i-connection-point-container
. Each 
form
 is evaluated in turn with 
sink
 bound to each interface pointer. If 
dispatch
 is given, it is defined as a local macro invoking the COM interface 
interface-name
 as if by 
with-com-interface
. If 
automation-dispatch
 is given, it is defined as a local macro invoking the Automation interface 
interface-name
 as if by 
with-dispatch-interface
.
Within the scope of 
do-connections
 you can call the local function 
discard-connection
 which discards the connection currently bound to 
sink
. This is useful when an error is detected on that connection, for example when the client has terminated. The signature of this local function is
discard-connection &key 
release
release
 is a boolean defaulting to 
nil
. If 
release
 is true then release is called on 
sink
.
Suppose there is a source interface 
i-clonable-events
 with a method 
on-cloned
. The following function can be used to invoke this method on all the sinks of an instance of a 
clonable-component
 class:
(defun fire-on-cloned (clonable-component)
(do-connections ((sink i-clonable-events
:dispatch call-clonable)
clonable-component)
(call-clonable on-cloned value)))