變更交談狀態 (CPI-C)
交談狀態的變更可能來自:
本機交易程式所發出的呼叫 (TP) 。
合作夥伴 TP 進行的呼叫。
錯誤狀況。
下列範例示範通訊的通用程式設計介面 (CPI-C) 呼叫如何將交談的狀態從 SEND 變更為 RECEIVE,以及從 RECEIVE 變更為 SEND。
注意
不論 TP 是叫用 TP (啟動交談的 TP,) 或可叫用的 TP (回應要求來啟動交談的 TP) ,任何 TP 都可以傳送或接收資料。
此範例示範 CPI-C 呼叫如何變更交談狀態。 在此表格中,每個交談狀態都會以粗體顯示,並在該狀態時使用的 CPI-C 呼叫前面。
叫用 TP 所發出 | 由可叫用 TP 發行 |
---|---|
交談狀態:RESET | |
Initialize_Conversation | |
交談狀態:INITIALIZE | |
Set_Sync_Level | |
(sync_level=CM_CONFIRM) | |
分配 | |
交談狀態:SEND | |
Send_Data | |
Prepare_to_Receive | 交談狀態:RESET |
Accept_Conversation | |
交談狀態:RECEIVE | |
(status_received= CM_CONFIRM_SEND_RECEIVED) | |
交談狀態:CONFIRM_SEND | |
確認 | |
交談狀態:SEND | |
(return_code=CM_OK) | Send_Data |
交談狀態:RECEIVE | 確認 |
(status_received= CM_CONFIRM_RECEIVED) | |
交談狀態:CONFIRM | |
Request_To_Send | |
已確認 | |
交談狀態:RECEIVE | (return_code=CM_OK) |
(request_to_send_received= CM_REQ_TO_SEND_RECEIVED) | |
Prepare_To_Receive | |
接收 | |
(status_received= CM_CONFIRM_SEND_RECEIVED) | |
交談狀態:CONFIRM_SEND | |
已確認 | |
交談狀態:SEND | (return_code=CM_OK) |
交談狀態:RECEIVE | |
Send_Data | |
解除配置 | |
接收 | |
(status_received= CM_CONFIRM_DEALLOC_RECEIVED) | |
交談狀態: CONFIRM_DEALLOCATE |
|
已確認 | |
(return_code=CM_OK) | 交談狀態:RESET |
交談狀態:RESET |
初始狀態
在配置交談之前,這兩個 TP 的狀態都是 RESET。
在此範例中,在配置交談之後,初始狀態為 SEND,用於叫用 TP,而 RECEIVE 則為可叫用的 TP。
變更為 RECEIVE 狀態
Prepare_To_Receive呼叫可讓 TP 將交談從 SEND 變更為 RECEIVE 狀態。 此呼叫:
排清本機 LU 的傳送緩衝區。
透過接收呼叫的status_received參數將CM_CONFIRM_SEND指標傳送給夥伴 TP,因為同步處理層級會設定為 CM_CONFIRM。 此指標會告知合作夥伴 TP 在合作夥伴 TP 開始傳送資料之前,預期有 確認 的回應。
變更為 SEND 狀態
Request_To_Send呼叫會通知合作夥伴 TP (交談處於 SEND 狀態,) 交談處於 RECEIVE 狀態的本機 TP (,) 想要傳送資料。 此要求會透過Confirm呼叫的request_to_send_received參數,與合作夥伴 TP 通訊。 (request_to_send_received 參數 也會傳回給 Send_Data 和其他呼叫。)
當合作夥伴 TP 發出 Prepare_To_Receive 呼叫時,交談狀態會變更為合作夥伴 TP 的 RECEIVE,讓本機 TP 能夠傳送資料。
重要
發出 Request_To_Send 不會變更交談的狀態。 收到傳送要求時,不需要合作夥伴 TP 來變更交談狀態。 它可以忽略要求。