waitingForNextMessage

suspend fun <E : MessageEvent> waitingForNextMessage(id: String, key: Event.Key<E>, matcher: ContinuousSessionEventMatcher<E> = ContinuousSessionEventMatcher): MessageContent

挂起并等待下一个符合条件的 消息事件 中的消息体。

waitingForNext 类似,只不过 waitingForNextMessage 限制了等待的消息类型 E 必须为 消息事件, 且返回值为 MessageContent

更多内容参考 waitingForNext 文档注释。

超时处理

使用 withTimeout 或其衍生函数来进行超时控制。

val session: ContinuousSessionContext = ...

withTimeout(5.seconds) {
session.waitingForNextMessage(id, FooEvent) { event -> // this: EventProcessingContext
// ...
true
}
}

具体的 Message.Element ?

当你想要得到一个具体的 Message.Element 对象,那么你需要想明白:

  • 你需要的是对应事件中 可能存在的 这个消息元素类型吗?

  • 或者你需要的是 必须存在 这个消息元素的事件?

  • 你需要的是 第一个 符合类型的元素?还是 最后一个 符合类型的元素?

  • 你是否对需要的消息元素中的 属性 有所要求?

  • ...

对于直接获取一个 Message.Element 的情况太过纷杂,如果你无法通过 waitingForNextMessage 或者 nextMessage 来满足需求, 那么请考虑使用 waitingwaitingForNext 等更细致的函数。

See also

Throws

CancellationException

被终止时


suspend fun waitingForNextMessage(id: String = randomIdStr(), matcher: ContinuousSessionEventMatcher<MessageEvent> = ContinuousSessionEventMatcher): MessageContent

挂起并等待下一个符合条件的 消息事件 中的 消息内容

waitingForNext 类似,只不过 waitingForNextMessage 限制了等待的消息类型 MessageEvent 必须为 消息事件, 且返回值为 MessageContent

更多内容参考 waitingForNext 文档注释。

超时处理

使用 withTimeout 或其衍生函数来进行超时控制。

val session: ContinuousSessionContext = ...

withTimeout(5.seconds) {
session.waitingForNextMessage(id, FooEvent) { event -> // this: EventProcessingContext
// ...
true
}
}

具体的 Message.Element ?

当你想要得到一个具体的 Message.Element 对象,那么你需要想明白:

  • 你需要的是对应事件中 可能存在的 这个消息元素类型吗?

  • 或者你需要的是 必须存在 这个消息元素的事件?

  • 你需要的是 第一个 符合类型的元素?还是 最后一个 符合类型的元素?

  • 你是否对需要的消息元素中的 属性 有所要求?

  • ...

对于直接获取一个 Message.Element 的情况太过纷杂,如果你无法通过 waitingForNextMessage 或者 nextMessage 来满足需求, 那么请考虑使用 waitingwaitingForNext 等更细致的函数。

See also

Throws

CancellationException

被终止时