1 Star 0 Fork 0

岛民阿强 / video_server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ops.go 1.60 KB
一键复制 编辑 原始数据 按行查看 历史
岛民阿强 提交于 2022-01-18 18:07 . init
/*
* @Descripttion:
* @version:
* @Author: congsir
* @Date: 2022-01-05 11:52:21
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-01-09 13:48:17
*/
package session
import (
"sync"
"time"
"gitee.com/shanghaitech-university-codec_0/video_server/api/dbops"
"gitee.com/shanghaitech-university-codec_0/video_server/api/defs"
"gitee.com/shanghaitech-university-codec_0/video_server/api/utils"
)
var sessionMap *sync.Map
func init() {
sessionMap = &sync.Map{}
}
func nowInMilli() int64 {
return time.Now().UnixNano() / 1000000
}
func deleteExpiredSession(sid string) {
sessionMap.Delete(sid)
dbops.DeleteSession(sid)
}
func LoadSessionsFromDB() {
r, err := dbops.RetrieveAllSessions()
if err != nil {
return
}
r.Range(func(k, v interface{}) bool {
ss := v.(*defs.SimpleSession)
sessionMap.Store(k, ss)
return true
})
}
func GenerateNewSessionId(un string) string {
id, _ := utils.NewUUID()
ct := nowInMilli()
ttl := ct + 30*60*1000 // Severside session valid time: 30 min
ss := &defs.SimpleSession{Username: un, TTL: ttl}
sessionMap.Store(id, ss)
dbops.InsertSession(id, ttl, un)
return id
}
func IsSessionExpired(sid string) (string, bool) {
ss, ok := sessionMap.Load(sid)
ct := nowInMilli()
if ok {
if ss.(*defs.SimpleSession).TTL < ct {
deleteExpiredSession(sid)
return "", true
}
return ss.(*defs.SimpleSession).Username, false
} else {
ss, err := dbops.RetrieveSession(sid)
if err != nil || ss == nil {
return "", true
}
if ss.TTL < ct {
deleteExpiredSession(sid)
return "", true
}
sessionMap.Store(sid, ss)
return ss.Username, false
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/shanghaitech-university-codec_0/video_server.git
git@gitee.com:shanghaitech-university-codec_0/video_server.git
shanghaitech-university-codec_0
video_server
video_server
v0.0.5

搜索帮助

344bd9b3 5694891 D2dac590 5694891