更改会话状态 (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 不需要更改会话状态。 它可以忽略请求。