From 3d08e57438ea78153d98e5a85c79ce078e8886f5 Mon Sep 17 00:00:00 2001 From: lololozhkin Date: Wed, 15 Feb 2023 13:36:12 +0500 Subject: [PATCH 1/2] socketmodehandler: implemented RunEventLoopContext method. now socketmodehandler will react on context cancellation --- socketmode/socketmode_handler.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/socketmode/socketmode_handler.go b/socketmode/socketmode_handler.go index 636feefa5..a26a7b1f2 100644 --- a/socketmode/socketmode_handler.go +++ b/socketmode/socketmode_handler.go @@ -1,6 +1,7 @@ package socketmode import ( + "context" "github.com/slack-go/slack" "github.com/slack-go/slack/slackevents" ) @@ -105,15 +106,31 @@ func (r *SocketmodeHandler) HandleDefault(f SocketmodeHandlerFunc) { // RunSlackEventLoop receives the event via the socket func (r *SocketmodeHandler) RunEventLoop() error { - go r.runEventLoop() + go r.runEventLoop(context.Background()) return r.Client.Run() } +func (r *SocketmodeHandler) RunEventLoopContext(ctx context.Context) error { + go r.runEventLoop(ctx) + + return r.Client.RunContext(ctx) +} + // Call the dispatcher for each incomming event -func (r *SocketmodeHandler) runEventLoop() { - for evt := range r.Client.Events { - r.dispatcher(evt) +func (r *SocketmodeHandler) runEventLoop(ctx context.Context) { + for { + select { + case evt, closed := <-r.Client.Events: + if closed { + return + } + + r.dispatcher(evt) + + case <-ctx.Done(): + return + } } } From 39c076e520d3c7a23781571c7715301c199249c4 Mon Sep 17 00:00:00 2001 From: lololozhkin Date: Fri, 17 Feb 2023 17:30:09 +0500 Subject: [PATCH 2/2] bugfix: silly mistake in runLoop method, renamed closed to ok (recv chan) --- socketmode/socketmode_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/socketmode/socketmode_handler.go b/socketmode/socketmode_handler.go index a26a7b1f2..0cfe7555d 100644 --- a/socketmode/socketmode_handler.go +++ b/socketmode/socketmode_handler.go @@ -121,8 +121,8 @@ func (r *SocketmodeHandler) RunEventLoopContext(ctx context.Context) error { func (r *SocketmodeHandler) runEventLoop(ctx context.Context) { for { select { - case evt, closed := <-r.Client.Events: - if closed { + case evt, ok := <-r.Client.Events: + if !ok { return }