diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/discord/gateway.go | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/pkg/discord/gateway.go b/pkg/discord/gateway.go index cfabdc7..13726b7 100644 --- a/pkg/discord/gateway.go +++ b/pkg/discord/gateway.go @@ -31,6 +31,7 @@ type GatewayImpl struct { logger *zerolog.Logger conn *cancellablewebsocket.CancellableWebSocket eventHandler EventHandler + lastSeq uint64 } func NewGateway(logger *zerolog.Logger, eventHandler EventHandler) *GatewayImpl { @@ -39,6 +40,7 @@ func NewGateway(logger *zerolog.Logger, eventHandler EventHandler) *GatewayImpl logger: logger, conn: nil, eventHandler: eventHandler, + lastSeq: 0, } } @@ -61,7 +63,7 @@ func (g *GatewayImpl) Close() error { func (g *GatewayImpl) Hello() (GatewayHelloEvent, error) { var msg GatewayPayload[GatewayHelloEvent] - if err := g.receive(&msg); err != nil { + if err := receive(g, &msg); err != nil { return GatewayHelloEvent{}, err } @@ -92,7 +94,7 @@ func (g *GatewayImpl) Identify(token string) error { } var res GatewayPayload[GatewayReadyEvent] - if err := g.receive(&res); err != nil { + if err := receive(g, &res); err != nil { return err } @@ -112,7 +114,7 @@ func (g *GatewayImpl) Identify(token string) error { func (g *GatewayImpl) Listen() { for { var msg GatewayPayload[json.RawMessage] - if err := g.receive(&msg); err != nil { + if err := receive(g, &msg); err != nil { g.logger.Error().Err(err).Msgf("error reading message") continue } @@ -165,10 +167,19 @@ func (g *GatewayImpl) onDispatch(eventName string, body json.RawMessage) error { return nil } -func (g *GatewayImpl) receive(res interface{}) error { - return g.conn.ReadJSON(res) +func (g *GatewayImpl) send(payload any) error { + return g.conn.WriteJSON(payload) } -func (g *GatewayImpl) send(payload interface{}) error { - return g.conn.WriteJSON(payload) +func receive[D any](g *GatewayImpl, res *GatewayPayload[D]) error { + err := g.conn.ReadJSON(&res) + if err != nil { + return err + } + + if res.Sequence != 0 { + g.lastSeq = res.Sequence + } + + return nil } |
