IOPCAsyncIO2
Previous  Top  Next

IOPCAsyncIO2 permette ad un client di effettuare operazioni di lettura e scrittura asincrone. L'operazione sarà posta in coda e il client può continuare le sue attività. Ciascuna operazione è trattata come una 'transazione' ed è associata ad un transactionID. Non appena un'operazione viene completata, sarà fatta una callback all'interfaccia IOPCDataCallback del client. L'informazione contenuta nella callback indicherà il transactionID ed il risultato dell'operazione.
Un server deve essere in grado di mettere in coda le transazioni (read, write, refresh)per ogni gruppo. È possibile per un server ritornare un errore (CONNECT_E_ADVISELIMIT) se più transizioni dello stesso tipo sono effettuate sullo stesso gruppo da uno stesso client. Chi vende il server può certamente supportare l'accodamento di una transazione addizionale.
Ci si aspetta che tutte le operazioni iniziate con successo siano portate a termine anche restituendo un errore. Ci si aspetta inoltre che il server implementi dei time-out logici ove questo sia necessario e ritorni uno specifico errore al chiamante quando questo scatta.

Client Implementation Note:
Un'unica TransactionID, generata dal Client, viene passata per le operazioni di Read, Write e Refresh ed è ritornata al client nella callback. Questa ID deve essere non nulla ed unica per una particolare comunicazione client/server. Non è necessario che l'univocità sia mantenuta anche per altre comunicazioni. Si noti che anche il client handle del gruppo è ritornato nella callback e, in genere, è sufficiente per identificare i dati ritornati.

Nota importante: a secondo della schedulazione dei thread di client e server models usata, si è scoperto che IOPCDataCallback può avvenire all'interno dello stesso come la Refresh, la Read o la Write, e infatti può avvenire prima che i metodi Read, Write o Refresh ritornino al chiamante.
Così se il client vuole conservare un record della transazione in una qualche lista per verificare il suo completamento genererà un Transaction ID e lo salverà prima di fare la chiamata al metodo.
Nella pratica la maggior parte dei client non necessitano di mantenere una tale lista e quindi non creano alcun record di transaction ID.