From d42b58328cf2cdf978dc933027a2df3b7f48df7b Mon Sep 17 00:00:00 2001 From: eatmoreapple <15055461510@163.com> Date: Mon, 20 Dec 2021 10:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B6=88=E6=81=AFContext?= =?UTF-8?q?=E4=B8=AD=E6=96=AD=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- message_handle.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/message_handle.go b/message_handle.go index 4f20497..1f7209c 100644 --- a/message_handle.go +++ b/message_handle.go @@ -26,6 +26,7 @@ type MessageContextHandlerGroup []MessageContextHandler // MessageContext 消息处理上下文对象 type MessageContext struct { index int + abortIndex int messageHandlers MessageContextHandlerGroup *Message } @@ -34,12 +35,25 @@ type MessageContext struct { func (c *MessageContext) Next() { c.index++ for c.index <= len(c.messageHandlers) { + if c.IsAbort() { + return + } handle := c.messageHandlers[c.index-1] handle(c) c.index++ } } +// IsAbort 判断是否被中断 +func (c *MessageContext) IsAbort() bool { + return c.abortIndex > 0 +} + +// Abort 中断当前消息处理, 不会调用下一个消息处理函数, 但是不会中断当前的处理函数 +func (c *MessageContext) Abort() { + c.abortIndex = c.index +} + // MatchFunc 消息匹配函数,返回为true则表示匹配 type MatchFunc func(*Message) bool