更改会话状态 (CPI-C)
聊天状态的更改可能由以下原因导致:
本地事务程序 (TP) 进行的调用。
合作伙伴 TP 发出的调用。
错误条件。
以下示例演示通信的通用编程接口 (CPI-C) 调用如何将会话的状态从 SEND 更改为 RECEIVE,从 RECEIVE 更改为 SEND。
注意
任何 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) | |
会话状态:确认 | |
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。
在此示例中,在分配会话后,调用 TP 的初始状态为 SEND,对于可调用的 TP,初始状态为 RECEIVE。
更改为 RECEIVE 状态
Prepare_To_Receive调用允许 TP 将会话从 SEND 更改为 RECEIVE 状态。 此调用:
刷新本地 LU 的发送缓冲区。
通过接收调用的 status_received 参数将CM_CONFIRM_SEND指示器发送到合作伙伴 TP,因为同步级别设置为CM_CONFIRM。 此指示器告知合作伙伴 TP,在合作伙伴 TP 开始发送数据之前,预期会发出 “已确认 ”响应。
更改为 SEND 状态
Request_To_Send调用通知会话处于 SEND 状态的合作伙伴 TP () 会话处于 RECEIVE 状态的本地 TP () 要发送数据。 此请求通过确认调用的 request_to_send_received 参数传达给合作伙伴 TP。 (request_to_send_received 参数也返回到 Send_Data 和其他调用。)
当合作伙伴 TP 发出 Prepare_To_Receive 呼叫时,合作伙伴 TP 的会话状态将更改为 RECEIVE,使本地 TP 可以发送数据。
重要
发出 Request_To_Send 不会更改会话的状态。 收到发送请求后,合作伙伴 TP 不需要更改会话状态。 它可以忽略请求。