github.com/lei006/gmqtt-broker@v0.0.1/broker/lib/sessions/memprovider.go (about)

     1  package sessions
     2  
     3  import (
     4  	"fmt"
     5  	"sync"
     6  )
     7  
     8  var _ SessionsProvider = (*memProvider)(nil)
     9  
    10  func init() {
    11  	Register("mem", NewMemProvider())
    12  }
    13  
    14  type memProvider struct {
    15  	st map[string]*Session
    16  	mu sync.RWMutex
    17  }
    18  
    19  func NewMemProvider() *memProvider {
    20  	return &memProvider{
    21  		st: make(map[string]*Session),
    22  	}
    23  }
    24  
    25  func (this *memProvider) New(id string) (*Session, error) {
    26  	this.mu.Lock()
    27  	defer this.mu.Unlock()
    28  
    29  	this.st[id] = &Session{id: id}
    30  	return this.st[id], nil
    31  }
    32  
    33  func (this *memProvider) Get(id string) (*Session, error) {
    34  	this.mu.RLock()
    35  	defer this.mu.RUnlock()
    36  
    37  	sess, ok := this.st[id]
    38  	if !ok {
    39  		return nil, fmt.Errorf("store/Get: No session found for key %s", id)
    40  	}
    41  
    42  	return sess, nil
    43  }
    44  
    45  func (this *memProvider) Del(id string) {
    46  	this.mu.Lock()
    47  	defer this.mu.Unlock()
    48  	delete(this.st, id)
    49  }
    50  
    51  func (this *memProvider) Save(id string) error {
    52  	return nil
    53  }
    54  
    55  func (this *memProvider) Count() int {
    56  	return len(this.st)
    57  }
    58  
    59  func (this *memProvider) Close() error {
    60  	this.st = make(map[string]*Session)
    61  	return nil
    62  }