Skip to content

Commit

Permalink
set state expire
Browse files Browse the repository at this point in the history
  • Loading branch information
eyasliu committed Jan 21, 2021
1 parent 1f03730 commit 29e0292
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
20 changes: 13 additions & 7 deletions srv.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ package cmdsrv
import (
"errors"
"sync"
"time"

"github.com/gogf/gf/os/gcache"
)

// Srv 基于命令的消息处理框架
type Srv struct {
Server []ServerAdapter // 服务器适配器
Server []ServerAdapter // 服务器适配器
serverMu sync.Mutex
isRunning bool // 服务是否已经正在运行
runErr chan error // 服务运行错误通知
middleware []HandlerFunc // 全局路由中间件
Expand All @@ -27,11 +29,9 @@ func New(server ...ServerAdapter) *Srv {
}
}

var serverMu sync.RWMutex

// AddServer 增加服务适配器
func (s *Srv) AddServer(server ...ServerAdapter) *Srv {
serverMu.Lock()
s.serverMu.Lock()
s.Server = append(s.Server, server...)

// 如果服务已经正在 running 了,增加的时候自动启动
Expand All @@ -40,7 +40,13 @@ func (s *Srv) AddServer(server ...ServerAdapter) *Srv {
go s.startServer(ser)
}
}
serverMu.Unlock()
s.serverMu.Unlock()
return s
}

// SetStateExpire 设置会话的状态有效时长
func (s *Srv) SetStateExpire(t time.Duration) *Srv {
s.state.keyExpireTimeout = t
return s
}

Expand Down Expand Up @@ -236,12 +242,12 @@ func (s *Srv) getSidServer(sid string) (ServerAdapter, error) {

// Run 开始接收命令消息,运行框架,会阻塞当前 goroutine
func (s *Srv) Run() error {
serverMu.Lock()
s.serverMu.Lock()
s.isRunning = true
for _, server := range s.Server {
go s.startServer(server)
}
serverMu.Unlock()
s.serverMu.Unlock()
err := <-s.runErr
return err
// if err := s.receive(); err != nil {
Expand Down
7 changes: 3 additions & 4 deletions state.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ import (

// State 会话的状态数据管理
type State struct {
cache *gcache.Cache
cache *gcache.Cache
keyExpireTimeout time.Duration
}

const keyExpireTimeout = 24 * time.Hour

// Get 获取指定会话的指定 key 的状态值
func (s *State) Get(sid, key string) interface{} {
ck := s.getCacheKey(sid, key)
Expand All @@ -24,7 +23,7 @@ func (s *State) Get(sid, key string) interface{} {
// Set 设置指定会话的状态键值对
func (s *State) Set(sid, key string, val interface{}) {
ck := s.getCacheKey(sid, key)
s.cache.Set(ck, val, keyExpireTimeout)
s.cache.Set(ck, val, s.keyExpireTimeout)
}

// 销毁指定会话的所有状态
Expand Down

0 comments on commit 29e0292

Please sign in to comment.