|  |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"bufio" | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"log" | 
					
						
							|  |  |  | 	"net" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ThreeDotsLabs/watermill" | 
					
						
							|  |  |  | 	"github.com/ThreeDotsLabs/watermill/message" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type TELNETServer struct { | 
					
						
							|  |  |  | 	l net.Listener | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewTELNETServer(l net.Listener) *TELNETServer { | 
					
						
							|  |  |  | 	ts := TELNETServer{ | 
					
						
							|  |  |  | 		l: l, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return &ts | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (ts *TELNETServer) Run(ctx context.Context) { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		conn, err := ts.l.Accept() | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			log.Fatal(err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		go func(c net.Conn) { | 
					
						
							|  |  |  | 			s := bufio.NewScanner(c) | 
					
						
							|  |  |  | 			defer c.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			for s.Scan() { | 
					
						
							|  |  |  | 				t := s.Text() | 
					
						
							|  |  |  | 				err := ts.Publish("raw_telnet", message.NewMessage(watermill.NewUUID(), []byte(t))) | 
					
						
							|  |  |  | 				if err != nil { | 
					
						
							|  |  |  | 					log.Fatalln("couldn't write to raw_telnet queue") | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				log.Printf("Received user input: %q\n", t) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}(conn) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (ts *TELNETServer) Publish(topic string, messages ...*message.Message) error { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func main() { | 
					
						
							|  |  |  | 	l, err := net.Listen("tcp", ":5555") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer l.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ts := NewTELNETServer(l) | 
					
						
							|  |  |  | 	ts.Run(context.Background()) | 
					
						
							|  |  |  | } |