package main import ( "bufio" "context" "crypto/rand" "fmt" "os" "time" "github.com/gogo/protobuf/proto" pubsub "github.com/libp2p/go-libp2p-pubsub" ) func chatInputLoop(ctx context.Context, topic *pubsub.Topic, donec chan struct{}) { scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { msg := scanner.Text() msgId := make([]byte, 10) _, err := rand.Read(msgId) if err != nil { fmt.Fprintln(os.Stderr, err) continue } now := time.Now().Unix() req := &Request{ Type: Request_SEND_MESSAGE.Enum(), SendMessage: &SendMessage{ Id: msgId, Data: []byte(msg), Created: &now, }, } msgBytes, err := proto.Marshal(req) if err != nil { fmt.Fprintln(os.Stderr, err) continue } err = topic.Publish(ctx, msgBytes) if err != nil { fmt.Fprintln(os.Stderr, err) continue } } donec <- struct{}{} }