Skip to content
This repository was archived by the owner on May 20, 2025. It is now read-only.

Commit 6816e61

Browse files
committed
fix: update code for new go SDK
1 parent 715e936 commit 6816e61

File tree

1 file changed

+36
-48
lines changed

1 file changed

+36
-48
lines changed

src/pages/guides/go/realtime-messaging.mdx

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -74,31 +74,34 @@ Let's begin by setting up the WebSocket application. First, create a new folder
7474
package main
7575

7676
import (
77-
"context"
78-
"fmt"
77+
"context"
78+
"fmt"
7979

80-
"github.com/nitrictech/go-sdk/handler"
81-
"github.com/nitrictech/go-sdk/nitric"
80+
"github.com/nitrictech/go-sdk/nitric"
81+
"github.com/nitrictech/go-sdk/nitric/keyvalue"
82+
"github.com/nitrictech/go-sdk/nitric/websockets"
8283
)
8384

8485
func main() {
85-
ws, err := nitric.NewWebsocket("public")
86-
if err != nil {
87-
fmt.Println("Error creating WebSocket:", err)
88-
return
89-
}
86+
// Create a WebSocket endpoint named "public".
87+
ws := nitric.NewWebsocket("public")
9088

91-
connections, err := nitric.NewKv("connections").Allow(nitric.KvStoreGet, nitric.KvStoreSet, nitric.KvStoreDelete)
92-
if err != nil {
93-
fmt.Println("Error creating KV store:", err)
94-
return
95-
}
89+
// Initialize a KV store named "connections" with Get, Set, and Delete permissions.
90+
connections := nitric.NewKv("connections").Allow(keyvalue.KvStoreGet, keyvalue.KvStoreSet, keyvalue.KvStoreDelete)
91+
92+
// Handle new WebSocket connections by storing the connection ID in the KV store.
93+
ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) {
94+
err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{
95+
"connectionId": ctx.Request.ConnectionID(),
96+
})
97+
if err != nil {
98+
return
99+
}
100+
})
96101

97102
// Add event handlers here
98103

99-
if err := nitric.Run(); err != nil {
100-
fmt.Println("Error running Nitric service:", err)
101-
}
104+
nitric.Run()
102105
}
103106
```
104107

@@ -117,40 +120,35 @@ From here, let's add some features to that function that allow us to manage conn
117120
### Register connections on connect
118121

119122
```go
120-
ws.On(handler.WebsocketConnect, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
123+
ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) {
121124
err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{
122125
"connectionId": ctx.Request.ConnectionID(),
123126
})
124127
if err != nil {
125-
return ctx, err
128+
return
126129
}
127-
128-
return next(ctx)
129130
})
130131
```
131132

132133
### Remove connections on disconnect
133134

134135
```go
135-
ws.On(handler.WebsocketDisconnect, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
136+
ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) {
136137
err := connections.Delete(context.TODO(), ctx.Request.ConnectionID())
137138
if err != nil {
138-
return ctx, err
139+
return
139140
}
140-
141-
return next(ctx)
142141
})
143142
```
144143

145144
### Broadcast messages to all connected clients
146145

147146
```go
148-
ws.On(handler.WebsocketMessage, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
147+
ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) {
149148
connectionStream, err := connections.Keys(context.TODO())
150149
if err != nil {
151-
return ctx, err
150+
return
152151
}
153-
154152
senderId := ctx.Request.ConnectionID()
155153

156154
for {
@@ -166,11 +164,9 @@ ws.On(handler.WebsocketMessage, func(ctx *handler.WebsocketContext, next handler
166164
message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message())
167165
err = ws.Send(context.TODO(), connectionId, []byte(message))
168166
if err != nil {
169-
return ctx, err
167+
return
170168
}
171169
}
172-
173-
return next(ctx)
174170
})
175171
```
176172

@@ -186,8 +182,8 @@ import (
186182
"context"
187183
"fmt"
188184

189-
"github.com/nitrictech/go-sdk/handler"
190185
"github.com/nitrictech/go-sdk/nitric"
186+
"github.com/nitrictech/go-sdk/nitric/websockets"
191187
)
192188

193189
func main() {
@@ -203,30 +199,26 @@ func main() {
203199
return
204200
}
205201

206-
ws.On(handler.WebsocketConnect, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
202+
ws.On(websockets.EventType_Connect, func(ctx *websockets.Ctx) {
207203
err := connections.Set(context.TODO(), ctx.Request.ConnectionID(), map[string]interface{}{
208204
"connectionId": ctx.Request.ConnectionID(),
209205
})
210206
if err != nil {
211-
return ctx, err
207+
return
212208
}
213-
214-
return next(ctx)
215209
})
216210

217-
ws.On(handler.WebsocketDisconnect, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
211+
ws.On(websockets.EventType_Disconnect, func(ctx *websockets.Ctx) {
218212
err := connections.Delete(context.TODO(), ctx.Request.ConnectionID())
219213
if err != nil {
220-
return ctx, err
214+
return
221215
}
222-
223-
return next(ctx)
224216
})
225217

226-
ws.On(handler.WebsocketMessage, func(ctx *handler.WebsocketContext, next handler.WebsocketHandler) (*handler.WebsocketContext, error) {
218+
ws.On(websockets.EventType_Message, func(ctx *websockets.Ctx) {
227219
connectionStream, err := connections.Keys(context.TODO())
228220
if err != nil {
229-
return ctx, err
221+
return
230222
}
231223

232224
senderId := ctx.Request.ConnectionID()
@@ -244,16 +236,12 @@ func main() {
244236
message := fmt.Sprintf("%s: %s", senderId, ctx.Request.Message())
245237
err = ws.Send(context.TODO(), connectionId, []byte(message))
246238
if err != nil {
247-
return ctx, err
239+
return
248240
}
249241
}
250-
251-
return next(ctx)
252242
})
253243

254-
if err := nitric.Run(); err != nil {
255-
fmt.Println("Error running Nitric service:", err)
256-
}
244+
nitric.Run()
257245
}
258246
```
259247

0 commit comments

Comments
 (0)