package main import ( "context" "flag" "fmt" "log" "net" "os" "github.com/ThreeDotsLabs/watermill" "github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message/router/middleware" "github.com/ThreeDotsLabs/watermill/message/router/plugin" "github.com/ThreeDotsLabs/watermill/pubsub/gochannel" "code.ndumas.com/ndumas/gomud/logger" "code.ndumas.com/ndumas/gomud/telnet" ) var ( port int verbose int ) func main() { flag.IntVar(&verbose, "verbose", 0, "-5:Trace, -4:Debug, 0:Info, 4:Warn, 8:Error") flag.IntVar(&port, "port", 5555, "MUD server port") flag.Parse() l, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) if err != nil { log.Fatalf("error binding to port %d\n: %s", port, err) } defer l.Close() wmLogger := watermill.NewStdLogger(false, false) traceFile, err := os.OpenFile("trace.log", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { log.Fatalf("couldn't open trace log: %s\n", err) } traceLogConfig := logger.LogConfig{ Writer: traceFile, Format: "json", Level: -5, } stdoutLogConfig := logger.LogConfig{ Writer: os.Stdout, Format: "text", Level: verbose, } wrappedSlogger := logger.NewWrappedSlogger( traceLogConfig, stdoutLogConfig, ) router, err := message.NewRouter(message.RouterConfig{}, wrappedSlogger) router.AddPlugin(plugin.SignalsHandler) router.AddMiddleware( middleware.CorrelationID, middleware.Recoverer, ) pubSub := gochannel.NewGoChannel(gochannel.Config{}, wmLogger) ctx := context.Background() ts := telnet.NewTELNETServer(ctx, l, pubSub, wrappedSlogger) tp := telnet.NewTELNETParser(ctx, pubSub, wrappedSlogger) wrappedSlogger.Info("booting up, welcome back formers", nil) go tp.Handle() for { conn, err := ts.Accept() if err != nil { log.Fatal(err) } go ts.Handle(conn) } }