Windows Sockets: derivazione dalle classi Socket
In questo articolo vengono descritte alcune delle funzionalità che è possibile ottenere derivando una classe da una delle classi socket.
È possibile derivare le proprie classi socket da CAsyncSocket o CSocket per aggiungere la propria funzionalità. In particolare, queste classi forniscono alcune funzioni membro virtuali di cui è possibile eseguire l'override. Queste funzioni includono OnReceive, OnSend, OnAccept, OnConnect e OnClose. È possibile eseguire l'override delle funzioni nella classe socket derivata per sfruttare le notifiche che esse forniscono quando si verificano eventi di rete. Il framework chiama queste funzioni di callback di notifica per ricevere notifiche di eventi importanti riguardanti i socket, come la ricezione di dati di cui è possibile iniziare lettura. Per ulteriori informazioni sulle funzioni di notifica, vedere Windows Sockets: notifiche socket.
Inoltre, la classe CSocket fornisce la funzione membro OnMessagePending (una funzione avanzata di cui è possibile eseguire l'override). MFC chiama tale funzione mentre il socket sta distribuendo messaggi basati su Windows. È possibile eseguire l'override di OnMessagePending per cercare particolari messaggi di Windows e per rispondere ad essi.
La versione predefinita di OnMessagePending fornita nella classe CSocket esamina la coda dei messaggi per i messaggi WM_PAINT mentre è in attesa di una chiamata di blocco per completare. Essa invia i messaggi di disegno per migliorare la qualità di visualizzazione. Oltre a fare qualcosa di utile, viene mostrato un modo con cui si potrebbe eseguire l'override della funzione per conto proprio. Come esempio ulteriore, considerare l'utilizzo di OnMessagePending per l'attività seguente. Si supponga di visualizzare una finestra di dialogo non modale durante l'attesa una transazione di rete per completare. La finestra di dialogo contiene un pulsante Annulla che l'utente può utilizzare per annullare transazioni di blocco che impiegano troppo tempo. L'override di OnMessagePending potrebbe distribuire i messaggi relativi a questa finestra di dialogo non modale.
Nell'override di OnMessagePending, restituire TRUE o un valore restituito da una chiamata alla versione della classe base di OnMessagePending. Chiamare la versione della classe base se essa esegue il lavoro che si desidera venga fatto.
Per ulteriori informazioni, vedere: