package main import ( "context" log "github.com/sirupsen/logrus" "net" "os" "os/signal" "syscall" "tg-disc-bot/config" "tg-disc-bot/discordBot" "tg-disc-bot/dto" "tg-disc-bot/router" "tg-disc-bot/tgBot" "time" ) func main() { c := config.NewConfig() config.LogSetup(c.AppConf.LogLvl) ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) defer cancel() shutdown := make(chan os.Signal, 1) signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM) tgb, err := tgBot.NewTgBot(ctx, c.TgConf) if err != nil { log.Fatal(err) } dsb, err := discordBot.NewDiscordBot(ctx, c.DsConf) if err != nil { log.Fatal(err) } fromDiscord := make(chan dto.DiscordDTO, 100) fromTelegram := make(chan dto.TelegramDTO, 100) tgMsgs := tgb.Start(fromDiscord) dsMsgs := dsb.Start(fromTelegram) r := router.NewHandler(router.Deps{ Addr: net.JoinHostPort(c.HttpConf.Host, c.HttpConf.Port), GinMode: c.HttpConf.GinMode, }) log.Info("App is now running. Press CTRL-C to exit.") errChan := make(chan error, 10) go func() { if err = r.Run(); err != nil { errChan <- err } }() for { select { case sig := <-shutdown: { shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 15*time.Second) if err = r.Shutdown(shutdownCtx); err != nil { log.WithError(err).Error("Error shutting down router") } log.WithField("type", sig).Info("terminating, close app") shutdownCancel() os.Exit(0) } case <-ctx.Done(): { log.Info("terminating, close app") os.Exit(0) } case tgMsg := <-tgMsgs: { fromTelegram <- tgMsg } case dsMsg := <-dsMsgs: { fromDiscord <- dsMsg } } } }