Skip to content

Commit

Permalink
refactor(server): change the logic of using wait group
Browse files Browse the repository at this point in the history
  • Loading branch information
gsalomao committed Apr 18, 2023
1 parent c49b426 commit a50caeb
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions internal/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"sync"

"github.com/gsalomao/maxmq/internal/logger"
"go.uber.org/multierr"
)

// Listener is an interface for network listeners.
Expand Down Expand Up @@ -56,37 +57,39 @@ func (s *Server) Start() error {
return errors.New("no available listener")
}

var starting sync.WaitGroup
starting.Add(len(s.listeners))
s.wg.Add(len(s.listeners))

for _, lsn := range s.listeners {
s.wg.Add(1)
go func(l Listener) {
defer s.wg.Done()
starting.Done()

err := l.Listen()
if err != nil {
s.err = err
s.err = multierr.Combine(s.err, err)
}
}(lsn)
}

starting.Wait()
s.log.Info().Msg("Server started with success")
return nil
}

// Stop stops the server by stopping all listeners.
func (s *Server) Stop() {
s.log.Info().Msg("Stopping server")
s.wg.Add(1)

for _, l := range s.listeners {
l.Stop()
}

s.log.Info().Msg("Server stopped with success")
s.wg.Done()
}

// Wait blocks while the server is running.
func (s *Server) Wait() error {
s.wg.Wait()
s.log.Info().Msg("Server stopped")
return s.err
}

0 comments on commit a50caeb

Please sign in to comment.