diff --git a/lua/channelAdd.lua b/lua/channelAdd.lua index b1037df..8f82259 100644 --- a/lua/channelAdd.lua +++ b/lua/channelAdd.lua @@ -3,18 +3,12 @@ local chnl_key = ARGV[1] local chnl_arg = ARGV[2] local chnl_str = redis.call('HGET', key, chnl_key) -for match in chnl_str:gmatch('([^,]+)') do - if chnl_arg == match then - return 0 - end -end +local index = string.find(chnl_str, ','..chnl_arg..',') -if chnl_str == '' then - chnl_str = chnl_arg -else - chnl_str = chnl_str .. ',' .. chnl_arg +if index then + return 0 end -redis.call('HSET', key, chnl_key, chnl_str) +redis.call('HSET', key, chnl_key, chnl_str..chnl_arg..',') return 1 \ No newline at end of file diff --git a/lua/channelRemove.lua b/lua/channelRemove.lua index 46b1663..910c286 100644 --- a/lua/channelRemove.lua +++ b/lua/channelRemove.lua @@ -3,19 +3,10 @@ local chnl_key = ARGV[1] local chnl_arg = ARGV[2] local chnl_str = redis.call('HGET', key, chnl_key) +local chnl, cnt = string.gsub(chnl_str, ','..chnl_arg..',', ',') -local chnl = {} -local removed = false -for match in chnl_str:gmatch('([^,]+)') do - if match ~= chnl_arg then - table.insert(chnl, match) - else - removed = true - end -end - -if removed then - redis.call('HSET', key, chnl_key, table.concat(chnl, ',')) +if cnt > 0 then + redis.call('HSET', key, chnl_key, chnl) return 1 end diff --git a/src/index.ts b/src/index.ts index 63519a1..63c5c32 100644 --- a/src/index.ts +++ b/src/index.ts @@ -161,7 +161,7 @@ export class WSDiscovery { ttl || this.ttlClient, SRVR, serverId, SID, sessionId, - CHNL, '', + CHNL, ',', ) return clientId @@ -174,7 +174,7 @@ export class WSDiscovery { async getClientChannels(clientId: number) { const channels = await this.redis.hget(this.getClientKey(clientId), CHNL) - return channels ? channels.split(',') : [] + return channels ? channels.split(',').slice(1, -1) : [] } async updateClientTTL(clientId: number, ttl?: number) {