annotate socket/conn.go @ 9:228ab74e8321

Add index.html
author Dennis C. M. <dennis@denniscm.com>
date Thu, 13 Mar 2025 18:27:25 +0000
parents e9df3bb010f4
children 5c124578fed2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 package socket
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 import (
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 "encoding/json"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 "fmt"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 "log"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7 "net/url"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 "os"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9 "os/signal"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 "strings"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 "time"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13 "github.com/denniscmcom/pacobot/bot"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
14 "github.com/denniscmcom/pacobot/event"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15 "github.com/gorilla/websocket"
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 )
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18 func Connect(authToken string) {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
19 interrupt := make(chan os.Signal, 1)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 signal.Notify(interrupt, os.Interrupt)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 baseUrl := url.URL{Scheme: "wss", Host: "eventsub.wss.twitch.tv", Path: "/ws"}
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 log.Println("socket: connecting...")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 conn, _, err := websocket.DefaultDialer.Dial(baseUrl.String(), nil)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
31 defer conn.Close()
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33 log.Println("socket: connected")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35 var timeout time.Ticker
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 done := make(chan bool)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
38 go readMsg(done, conn, &timeout, authToken)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
39
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
40 for {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
41 select {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
42 case <-interrupt:
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
43 closeConn(conn)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
44
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
45 select {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
46 case <-done:
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
47 case <-time.After(time.Second):
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
48 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
49 return
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50 case <-done:
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
51 log.Println("socket: connection closed by server")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
52 Connect(authToken)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
53 case <-timeout.C:
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
54 log.Println("socket: connection lost")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
55 timeout.Stop()
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
56 Connect(authToken)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
57 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
58 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
59 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
60
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
61 func readMsg(done chan bool, conn *websocket.Conn, timeout *time.Ticker, authToken string) {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62 var timeout_secs time.Duration
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
63
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
64 for {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
65 log.Println("socket: waiting for msg...")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
66 _, msg, err := conn.ReadMessage()
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69 break
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 var resMetadata Res_Metadata
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
74 if err := json.Unmarshal(msg, &resMetadata); err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
75 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
76 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
77
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
78 msgType := resMetadata.Metadata.MsgType
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79 log.Printf("socket: %s msg received", msgType)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
81 switch msgType {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
82 case "session_welcome":
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
83 var resWelcome Res_Welcome
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
84
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
85 if err := json.Unmarshal(msg, &resWelcome); err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
86 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
87 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 timeout_secs = time.Duration(resWelcome.Payload.Session.KeepaliveTimeout+3) * time.Second
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 timeout = time.NewTicker(timeout_secs)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
91 defer timeout.Stop()
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
93 event.ChannelChatMsgSub(authToken, resWelcome.Payload.Session.Id)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
94
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
95 case "session_keepalive":
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
96 timeout.Reset(timeout_secs)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
97 log.Println("socket: timeout resetted")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
98
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
99 case "notification":
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
100 var resMetadataNotif Res_Metadata_Notif
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
101
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
102 if err := json.Unmarshal(msg, &resMetadataNotif); err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
103 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
104 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
105
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
106 subType := resMetadataNotif.Metadata.SubType
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
107 log.Printf("socket: %s event received", subType)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
108
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
109 switch subType {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
110 case "channel.chat.message":
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
111 var resNotifChannelChatMsg Res_Notif_ChannelChatMsg
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
112
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
113 if err := json.Unmarshal(msg, &resNotifChannelChatMsg); err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
114 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
115 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
116
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
117 // TODO: Add to a function
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
118 jsonFormatted, err := json.MarshalIndent(resNotifChannelChatMsg, "", " ")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
119
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
120 if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
121 log.Fatalf("socket: error al formatear")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
122 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
123
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
124 // log.Println(resNotifChannelChatMsg.Payload.Event)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
125 fmt.Print(string(jsonFormatted))
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
126
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
127 chatMsg := resNotifChannelChatMsg.Payload.Event.Msg.Text
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
128 log.Println(chatMsg)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
129
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
130 if strings.HasPrefix(chatMsg, "!") {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
131 bot.HandleCmd(strings.Split(chatMsg[1:], " "))
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
132 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
133 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
134 default:
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
135 log.Fatalf("%s: message type not implemented", msgType)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
136 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
137 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
138
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
139 done <- true
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
140 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
141
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
142 func closeConn(conn *websocket.Conn) {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
143 err := conn.WriteMessage(
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
144 websocket.CloseMessage,
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
145 websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
146
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
147 if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
148 log.Fatal(err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
149 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
150
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
151 log.Println("socket: connection closed")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
152 }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
153
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
154 // func test() {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
155 // var res Response
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
156
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
157 // // Deserializas
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
158 // err := json.Unmarshal([]byte(jsonData), &res)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
159
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
160 // if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
161 // fmt.Println("Error al deserializar:", err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
162 // return
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
163 // }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
164
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
165 // // Conviertes la estructura nuevamente a JSON formateado
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
166
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
167 // formattedJSON, err := json.MarshalIndent(res, "", " ")
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
168
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
169 // if err != nil {
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
170 // fmt.Println("Error al formatear JSON:", err)
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
171 // return
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
172 // }
e9df3bb010f4 fix issues
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
173 // }