this repo has no description
1package main 2 3import ( 4 "context" 5 "log" 6 "os" 7 "os/signal" 8 "syscall" 9 10 "github.com/gorilla/websocket" 11) 12 13const JetstreamUrl = `ws://localhost:6008/subscribe?wantedCollections=app.bsky.feed.post` 14 15func main() { 16 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM) 17 defer stop() 18 19 conn, _, err := websocket.DefaultDialer.Dial(JetstreamUrl, nil) 20 if err != nil { 21 log.Fatalf("failed to open websocket: %v\n", err) 22 } 23 defer func() { 24 if err := conn.Close(); err != nil { 25 log.Printf("failed to close websocket: %v\n", err) 26 } 27 log.Printf("websocket closed\n") 28 }() 29 30 jetstreamEvents := make(chan []byte) 31 go processPosts(ctx, jetstreamEvents) 32 33 log.Printf("starting up\n") 34 go func() { 35 for { 36 _, message, err := conn.ReadMessage() 37 if err != nil { 38 stop() 39 break 40 } 41 jetstreamEvents <- message 42 } 43 }() 44 45 <-ctx.Done() 46 log.Printf("shutting down\n") 47}