about summary refs log tree commit diff
path: root/pkg
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-04-07 18:17:24 +0200
committerMel <einebeere@gmail.com>2022-04-07 18:17:24 +0200
commit782e75b403c0d14beabdd7b74ad12388087b1321 (patch)
treef5a4e5f383b7b45cbf1369247f12f18bb5f7136c /pkg
parent4baf8edf31a2fc10f401a770636d8c98535264cc (diff)
downloadjinx-782e75b403c0d14beabdd7b74ad12388087b1321.tar.zst
jinx-782e75b403c0d14beabdd7b74ad12388087b1321.zip
Count sequence in gateway
Diffstat (limited to 'pkg')
-rw-r--r--pkg/discord/gateway.go25
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
 }