ricezione di messaggi
La figura seguente illustra il metodo per la ricezione di messaggi dal modulo DMOD (Dynamic Access Module).
Ricezione di messaggi tramite una procedura di routing
Dopo l'inizializzazione DMOD, l'emulatore 3270 registra la procedura di routing chiamando sepdrout. Quando DMOD riceve un messaggio, chiama la procedura di routing dell'emulatore 3270, che può quindi elaborare il messaggio.
Con questo approccio, non esiste alcun cambio di contesto tra il thread DMOD e il thread dell'emulatore 3270. Tuttavia, la procedura di routing deve restituire rapidamente il controllo a DMOD. Ad esempio, non può sospendere l'attesa di un input da tastiera.
L'applicazione deve determinare se il messaggio ricevuto è per questa applicazione o per un'altra applicazione. Se il messaggio non è per questa applicazione, la procedura di routing deve restituire, a indicare che il messaggio non è stato elaborato. Se l'applicazione elabora il messaggio, è responsabile della liberazione del buffer al termine dell'elaborazione.
In alcuni casi, la procedura di routing può elaborare il messaggio fino al completamento. Un'alternativa consiste nell'inserire il messaggio in una coda dell'applicazione e quindi cancellare un semaforo dell'applicazione. L'applicazione può quindi elaborare successivamente il messaggio.
Le prestazioni possono essere migliorate ulteriormente inviando un messaggio Status-Resource (per restituire il credito al nodo locale, consentendo l'invio di ulteriori dati) dalla procedura di routing quando viene ricevuto un messaggio, anziché attendere il completamento del messaggio. Questo utilizzo è illustrato in Codice di esempio: Inizializzazione e procedura di routing. Per altre informazioni sul controllo del credito e del flusso, vedere Pacing e Chunking.
Dopo che l'applicazione ha ricevuto un messaggio, l'applicazione è responsabile del buffer in cui è stato ricevuto il messaggio. L'applicazione deve riutilizzare il buffer per inviare un messaggio (usando sbpusend) o rilasciarlo (usando sepdburl). Se il buffer da riutilizzare non contiene il numero corretto di elementi da inviare, l'applicazione può ottenere elementi aggiuntivi (usando sbpibegt) o rilasciare quelli esistenti (usando sbpiberl). In questo caso, l'applicazione deve anche assicurarsi che il campo numelts nell'intestazione del buffer indichi il numero corretto di elementi.