64 lines
1.1 KiB
Go

package machine
import (
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/internal/handler/fsm/fsmcontract"
"sync"
)
var (
userMachines = newStore[int64, fsmcontract.Machine]()
pollMachines = newStore[int64, fsmcontract.Machine]()
)
type store[K comparable, V any] struct {
m map[K]V
l sync.RWMutex
}
func newStore[K comparable, V any]() *store[K, V] {
return &store[K, V]{m: map[K]V{}}
}
func (s *store[K, V]) Store(k K, v V) {
defer s.l.Unlock()
s.l.Lock()
s.m[k] = v
}
func (s *store[K, V]) Load(k K) (v V, ok bool) {
defer s.l.RUnlock()
s.l.RLock()
v, ok = s.m[k]
return
}
func ForUser(id int64) fsmcontract.Machine {
val, ok := userMachines.Load(id)
if !ok {
machine := newUserMachine()
userMachines.Store(id, machine)
return machine
}
return val
}
func ForPoll(id int64) fsmcontract.Machine {
val, ok := pollMachines.Load(id)
if !ok {
machine := newPollMachine()
pollMachines.Store(id, machine)
return machine
}
return val
}
func newUserMachine() fsmcontract.Machine {
// todo implement this
panic("not implemented yet")
}
func newPollMachine() fsmcontract.Machine {
// todo implement this
panic("not implemented yet")
}