Cambio de estados de conversación (CPI-C)
Un cambio en el estado de la conversación puede deberse a:
Una llamada realizada por el programa de transacciones local (TP).
Una llamada realizada por el TP del asociado.
Una condición de error.
En el ejemplo siguiente se muestra cómo las llamadas a Common Programming Interface for Communications (CPI-C) pueden cambiar el estado de la conversación de SEND a RECEIVE y de RECEIVE a SEND.
Nota
Cualquier TP puede enviar o recibir datos, independientemente de si es el TP invocado (el TP que inició la conversación) o el TP invocable (el TP que respondió a una solicitud para iniciar una conversación).
En este ejemplo se muestra cómo las llamadas CPI-C pueden cambiar el estado de la conversación. En esta tabla, cada estado de conversación aparece en negrita y precede a las llamadas CPI-C que se usan mientras están en ese estado.
Emitido por el TP de invocación | Emitido por el TP invocable |
---|---|
Estado de conversación: RESET | |
Initialize_Conversation | |
Estado de conversación: INITIALIZE | |
Set_Sync_Level | |
(sync_level=CM_CONFIRM) | |
Asignar | |
Estado de conversación: SEND | |
Send_Data | |
Prepare_to_Receive | Estado de conversación: RESET |
Accept_Conversation | |
Estado de conversación: RECEIVE | |
(status_received= CM_CONFIRM_SEND_RECEIVED) | |
Estado de la conversación: CONFIRM_SEND | |
Confirm | |
Estado de conversación: SEND | |
(return_code=CM_OK) | Send_Data |
Estado de conversación: RECEIVE | Confirm |
(status_received= CM_CONFIRM_RECEIVED) | |
Estado de la conversación: CONFIRM | |
Request_To_Send | |
Confirmado | |
Estado de conversación: RECEIVE | (return_code=CM_OK) |
(request_to_send_received= CM_REQ_TO_SEND_RECEIVED) | |
Prepare_To_Receive | |
Recepción | |
(status_received= CM_CONFIRM_SEND_RECEIVED) | |
Estado de la conversación: CONFIRM_SEND | |
Confirmado | |
Estado de conversación: SEND | (return_code=CM_OK) |
Estado de conversación: RECEIVE | |
Send_Data | |
desasignar | |
Recepción | |
(status_received= CM_CONFIRM_DEALLOC_RECEIVED) | |
Estado de la conversación: CONFIRM_DEALLOCATE |
|
Confirmado | |
(return_code=CM_OK) | Estado de conversación: RESET |
Estado de conversación: RESET |
Estados iniciales
Antes de asignar la conversación, el estado es RESET para ambos IP.
En el ejemplo, después de asignar la conversación, el estado inicial es SEND para la invocación de TP y RECEIVE para el TP invocable.
Cambiar al estado RECEIVE
La llamada Prepare_To_Receive permite que un TP cambie la conversación de ENVIAR al estado RECEIVE. Esta llamada:
Vacía el búfer de envío de la LU local.
Envía un indicador de CM_CONFIRM_SEND al TP del asociado a través del parámetro status_received de una llamada Receive , ya que el nivel de sincronización se establece en CM_CONFIRM. Este indicador indica al partner TP que se espera una respuesta confirmada antes de que el TP del asociado pueda empezar a enviar datos.
Cambiar a estado SEND
La llamada Request_To_Send informa al TP del asociado (para el que la conversación está en estado SEND) de que el TP local (para el que la conversación está en estado RECEIVE) quiere enviar datos. Esta solicitud se comunica al TP del asociado a través del parámetro request_to_send_received de la llamada Confirm . (El parámetro request_to_send_received también se devuelve a Send_Data y a otras llamadas).
Cuando el TP del asociado emite la llamada al Prepare_To_Receive , el estado de la conversación cambia a RECEIVE para el TP del asociado, lo que permite que el TP local envíe datos.
Importante
La emisión de Request_To_Send no cambia el estado de la conversación. Al recibir una solicitud para enviar, el TP del asociado no es necesario para cambiar el estado de la conversación. Puede omitir la solicitud.