WebSocketServer/modules/redis/redis.go

70 lines
1.5 KiB
Go

package redis
import (
"context"
gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper"
"github.com/redis/go-redis/v9"
)
var ctx = context.Background()
var rdb *redis.Client
func Init() {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
err := rdb.Ping(ctx).Err()
if err != nil {
gocnjhelper.LogFatal("Redis ping failed")
}
}
func AddUserWebSocketSessionId(userId string, wsSessionId string) (sessionAlreadyConnected bool) {
res, err := rdb.SAdd(ctx, userId, wsSessionId).Result()
if err != nil {
gocnjhelper.LogErrorf("Failed to add key, err: %s", err.Error())
}
gocnjhelper.LogDebugf("redis SAdd %v", res, userId, wsSessionId)
return res == 0
}
func RemoveUserWebSocketSessionId(userId string, wsSessionId string) {
res, err := rdb.SRem(ctx, userId, wsSessionId).Result()
if err != nil {
gocnjhelper.LogErrorf("Failed to rem key, err: %s", err.Error())
}
gocnjhelper.LogDebugf("redis rem key %v", res)
}
func IsUserConnectedToAnyWebSocketServer(userId string) bool {
sessions, err := rdb.SMembers(ctx, userId).Result()
if err != nil {
gocnjhelper.LogErrorf("SMembers, err: %s", err.Error())
return false
}
return len(sessions) > 0
}
func ExistsUserWebSocketSessionId(userId string, wsSessionId string) bool {
res, err := rdb.SIsMember(ctx, userId, wsSessionId).Result()
if err != nil {
gocnjhelper.LogErrorf("SIsMember, err: %s", err.Error())
return false
}
return res
}