web/server.go
func (s *Server) Start() (err error) {
	log.Infof("Lunarc is starting on port :%d", s.Config.Port)
	var l net.Listener
	go func() {
		l, err = net.Listen("tcp", fmt.Sprintf(":%d", s.Config.Port))
		if err != nil {
			log.Errorf("Error: %v", err)
			s.Error <- err
			return
		}
		s.isStarted = true
		if len(s.Config.SSL.Certificate) > 0 && len(s.Config.SSL.Key) > 0 {
			err = s.ServeTLS(l, s.Config.SSL.Certificate, s.Config.SSL.Key)
			if err != nil && err != http.ErrServerClosed {
				log.Errorf("%v", err)
				l.Close()
				s.Error <- err
				s.quit <- true
			}
			close(s.quit)
		} else {
			err = s.Serve(l)
			if err != nil && err != http.ErrServerClosed {
				log.Errorf("%v", err)
				s.Error <- err
				s.quit <- true
			}
			close(s.quit)
		}
	}()

	<-s.quit

	if err = s.Shutdown(context.Background()); err != nil {
		log.Errorf("%v", err)
		s.Error <- err
	}

	<-s.quit

	l = nil
	log.Info("Lunarc terminated.")
	s.isStarted = false
	s.Done <- true
	return
}
func (s *Server) Start() (err error) {
	log.Infof("Lunarc is starting on port :%d", s.Config.Port)
	var l net.Listener
	go func() {
		l, err = net.Listen("tcp", fmt.Sprintf(":%d", s.Config.Port))
		if err != nil {
			log.Errorf("Error: %v", err)
			s.Error <- err
			return
		}
		s.isStarted = true
		if len(s.Config.SSL.Certificate) > 0 && len(s.Config.SSL.Key) > 0 {
			err = s.ServeTLS(l, s.Config.SSL.Certificate, s.Config.SSL.Key)
			if err != nil && err != http.ErrServerClosed {
				log.Errorf("%v", err)
				l.Close()
				s.Error <- err
				s.quit <- true
			}
			close(s.quit)
		} else {
			err = s.Serve(l)
			if err != nil && err != http.ErrServerClosed {
				log.Errorf("%v", err)
				s.Error <- err
				s.quit <- true
			}
			close(s.quit)
		}
	}()

	<-s.quit

	if err = s.Shutdown(context.Background()); err != nil {
		log.Errorf("%v", err)
		s.Error <- err
	}

	<-s.quit

	l = nil
	log.Info("Lunarc terminated.")
	s.isStarted = false
	s.Done <- true
	return
}
//Start the server.