package telnet import ( "bufio" "context" "log" "net" "github.com/ThreeDotsLabs/watermill" "github.com/ThreeDotsLabs/watermill/message" "github.com/ThreeDotsLabs/watermill/message/router/middleware" ) type TELNETServer struct { l net.Listener p message.Publisher c context.Context logger watermill.LoggerAdapter to TELNETOptions } func NewTELNETServer(c context.Context, l net.Listener, p message.Publisher, wml watermill.LoggerAdapter) *TELNETServer { ts := TELNETServer{ c: c, l: l, p: p, logger: wml.With( watermill.LogFields{ "name": "TELNETServer", }, ), } return &ts } func (ts *TELNETServer) Accept() (net.Conn, error) { conn, err := ts.l.Accept() ts.logger.Trace("receiving telnet connection", watermill.LogFields{ "remoteAddr": conn.RemoteAddr(), }, ) return conn, err } func (ts *TELNETServer) Handle(wml watermill.LoggerAdapter) func(conn net.Conn) { logger := wml.With( watermill.LogFields{ // "correlation_id": correlationID, }, ) return func(conn net.Conn) { s := bufio.NewScanner(conn) defer conn.Close() // i need to create an ecs Renderer that targets a iw.Writer (net.Conn) // the renderer correlationID := watermill.NewUUID() for s.Scan() { t := s.Text() m := message.NewMessage(watermill.NewUUID(), []byte(t)) middleware.SetCorrelationID(correlationID, m) err := ts.p.Publish("telnet.raw", m) if err != nil { log.Fatalln("couldn't write to telnet.raw") } logger.Trace("received bytes over telnet", nil) } } }