main.go 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "sync"
  6. "github.com/kelseyhightower/envconfig"
  7. "github.com/mkaminski/goaim/server"
  8. )
  9. func main() {
  10. var cfg server.Config
  11. err := envconfig.Process("", &cfg)
  12. if err != nil {
  13. _, _ = fmt.Fprintf(os.Stderr, "unable to process app config: %s", err.Error())
  14. os.Exit(1)
  15. }
  16. fm, err := server.NewFeedbagStore(cfg.DBPath)
  17. if err != nil {
  18. _, _ = fmt.Fprintf(os.Stderr, "unable to create feedbag store: %s", err.Error())
  19. os.Exit(1)
  20. }
  21. logger := server.NewLogger(cfg)
  22. sm := server.NewSessionManager(logger)
  23. cr := server.NewChatRegistry()
  24. wg := sync.WaitGroup{}
  25. wg.Add(4)
  26. go func() {
  27. server.StartManagementAPI(fm, logger)
  28. wg.Done()
  29. }()
  30. go func() {
  31. server.ListenBOS(cfg, sm, fm, cr, logger.With("svc", "BOS"))
  32. wg.Done()
  33. }()
  34. go func() {
  35. server.ListenChat(cfg, fm, cr, logger.With("svc", "CHAT"))
  36. wg.Done()
  37. }()
  38. go func() {
  39. server.ListenBUCPLogin(cfg, err, logger, sm, fm)
  40. wg.Done()
  41. }()
  42. wg.Wait()
  43. }