Devolución de llamada de notificación
Cualquier componente de impresión o aplicación de escucha que esté interesado en recibir notificaciones debe proporcionar objetos que expongan la interfaz IPrintAsyncNotifyCallback . La interfaz hereda de IUnknown para que los clientes del mecanismo de notificación del administrador de colas puedan implementar un objeto COM o C++.
Una aplicación de escucha debe proporcionar un puntero a una interfaz IPrintAsyncNotifyCallback cuando se registra para recibir notificaciones. El remitente de la notificación debe proporcionar un puntero a una interfaz IPrintAsyncNotifyCallback si está interesado en una respuesta y crea un canal bidireccional.
#define INTERFACE IPrintAsyncNotifyCallback
DECLARE_INTERFACE_(IPrintAsyncNotifyCallback, IUnknown)
{
STDMETHOD(QueryInterface)(
THIS_
REFIID riid,
void** ppvObj
) PURE;
STDMETHOD_(ULONG, AddRef)(
THIS
) PURE;
STDMETHOD_(ULONG, Release)(
THIS
) PURE;
STDMETHOD(OnEventNotify)(
THIS_
IN IPrintAsyncNotifyChannel*,
IN IPrintAsyncNotifyDataObject*
) PURE;
STDMETHOD(ChannelClosed)(
THIS_
IN IPrintAsyncNotifyChannel*,
IN IPrintAsyncNotifyDataObject*
) PURE;
};
Cuando se envía una notificación desde un extremo del canal, el servicio de colas llama al método IPrintAsyncNotifyCallback::OnEventNotify en el otro extremo del canal para entregar la notificación.
Cuando el canal de notificación se cierra en un extremo, el servicio de cola llama al método IPrintAsyncNotifyCallback::ChannelClosed en el otro extremo para anunciar que el canal está cerrado. El motivo para cerrar el canal se entrega como una notificación.
Si el servidor o la aplicación de escucha mueren, el código de ejecución del administrador de colas detecta esta condición y el extremo "todavía activo" del canal que sigue activo recibe una notificación mediante una llamada IPrintAsyncNotifyCallback::ChannelClosed , en la que se entrega un mensaje de NOTIFICATION_RELEASE.