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) wrappedSlogger := logger.NewWrappedSlogger(os.Stdout, verbose) 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) go tp.Handle() for { conn, err := ts.Accept() if err != nil { log.Fatal(err) } go ts.Handle(conn) } }