64 lines
1.1 KiB
Go
Raw Normal View History

2024-05-09 16:37:50 +03:00
package machine
import (
"gitea.neur0tx.site/Neur0toxine/vegapokerbot/internal/handler/fsm/fsmcontract"
"sync"
)
var (
2024-05-09 17:42:42 +03:00
userMachines = newStore[int64, fsmcontract.Machine]()
pollMachines = newStore[int64, fsmcontract.Machine]()
2024-05-09 16:37:50 +03:00
)
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
}
2024-05-09 17:42:42 +03:00
func ForUser(id int64) fsmcontract.Machine {
2024-05-09 16:37:50 +03:00
val, ok := userMachines.Load(id)
if !ok {
machine := newUserMachine()
userMachines.Store(id, machine)
return machine
}
return val
}
2024-05-09 17:42:42 +03:00
func ForPoll(id int64) fsmcontract.Machine {
2024-05-09 16:37:50 +03:00
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")
}