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}