main.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package main
  2. import (
  3. "fmt"
  4. "log/slog"
  5. "os"
  6. "sync"
  7. "github.com/mk6i/retro-aim-server/config"
  8. "github.com/mk6i/retro-aim-server/handler"
  9. "github.com/mk6i/retro-aim-server/state"
  10. "github.com/kelseyhightower/envconfig"
  11. "github.com/mk6i/retro-aim-server/server"
  12. )
  13. func main() {
  14. var cfg config.Config
  15. err := envconfig.Process("", &cfg)
  16. if err != nil {
  17. _, _ = fmt.Fprintf(os.Stderr, "unable to process app config: %s", err.Error())
  18. os.Exit(1)
  19. }
  20. feedbagStore, err := state.NewSQLiteUserStore(cfg.DBPath)
  21. if err != nil {
  22. _, _ = fmt.Fprintf(os.Stderr, "unable to create feedbag store: %s", err.Error())
  23. os.Exit(1)
  24. }
  25. logger := server.NewLogger(cfg)
  26. sessionManager := state.NewInMemorySessionManager(logger)
  27. chatRegistry := state.NewChatRegistry()
  28. wg := sync.WaitGroup{}
  29. wg.Add(4)
  30. go func() {
  31. server.StartManagementAPI(feedbagStore, logger)
  32. wg.Done()
  33. }()
  34. go func(logger *slog.Logger) {
  35. logger = logger.With("svc", "BOS")
  36. authHandler := handler.NewAuthService(cfg, sessionManager, sessionManager, feedbagStore, feedbagStore, chatRegistry)
  37. buddyHandler := handler.NewBuddyService()
  38. oserviceHandler := handler.NewOServiceService(cfg, sessionManager, feedbagStore)
  39. oserviceBOSHandler := handler.NewOServiceServiceForBOS(*oserviceHandler, chatRegistry)
  40. locateHandler := handler.NewLocateService(sessionManager, feedbagStore, feedbagStore)
  41. newChatSessMgr := func() handler.SessionManager { return state.NewInMemorySessionManager(logger) }
  42. chatNavHandler := handler.NewChatNavService(logger, chatRegistry, state.NewChatRoom, newChatSessMgr)
  43. feedbagHandler := handler.NewFeedbagService(sessionManager, feedbagStore)
  44. icbmHandler := handler.NewICBMService(sessionManager, feedbagStore)
  45. server.BOSService{
  46. AuthHandler: authHandler,
  47. OServiceBOSRouter: server.NewOServiceRouterForBOS(logger, oserviceHandler, oserviceBOSHandler),
  48. Config: cfg,
  49. BOSRouter: server.BOSRootRouter{
  50. AlertRouter: server.NewAlertRouter(logger),
  51. BuddyRouter: server.NewBuddyRouter(logger, buddyHandler),
  52. ChatNavRouter: server.NewChatNavRouter(chatNavHandler, logger),
  53. FeedbagRouter: server.NewFeedbagRouter(logger, feedbagHandler),
  54. ICBMRouter: server.NewICBMRouter(logger, icbmHandler),
  55. LocateRouter: server.NewLocateRouter(locateHandler, logger),
  56. OServiceBOSRouter: server.NewOServiceRouterForBOS(logger, oserviceHandler, oserviceBOSHandler),
  57. Config: cfg,
  58. RouteLogger: server.RouteLogger{
  59. Logger: logger,
  60. },
  61. },
  62. }.Start()
  63. wg.Done()
  64. }(logger)
  65. go func(logger *slog.Logger) {
  66. logger = logger.With("svc", "CHAT")
  67. authHandler := handler.NewAuthService(cfg, sessionManager, sessionManager, feedbagStore, feedbagStore, chatRegistry)
  68. oserviceHandler := handler.NewOServiceService(cfg, sessionManager, feedbagStore)
  69. chatHandler := handler.NewChatService(chatRegistry)
  70. oserviceChatHandler := handler.NewOServiceServiceForChat(*oserviceHandler, chatRegistry)
  71. server.ChatService{
  72. AuthHandler: authHandler,
  73. ChatServiceRouter: server.ChatServiceRooterRouter{
  74. ChatRouter: server.NewChatRouter(logger, chatHandler),
  75. Config: cfg,
  76. OServiceChatRouter: server.NewOServiceRouterForChat(logger, oserviceHandler, oserviceChatHandler),
  77. },
  78. Config: cfg,
  79. OServiceChatRouter: server.NewOServiceRouterForChat(logger, oserviceHandler, oserviceChatHandler),
  80. }.Start()
  81. wg.Done()
  82. }(logger)
  83. go func(logger *slog.Logger) {
  84. logger = logger.With("svc", "AUTH")
  85. authHandler := handler.NewAuthService(cfg, sessionManager, nil, feedbagStore, feedbagStore, chatRegistry)
  86. server.BUCPAuthService{
  87. AuthHandler: authHandler,
  88. Config: cfg,
  89. RouteLogger: server.RouteLogger{
  90. Logger: logger,
  91. },
  92. }.Start()
  93. wg.Done()
  94. }(logger)
  95. wg.Wait()
  96. }