forked from jshiffer/matterbridge
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
|
package gomatrix
|
||
|
|
||
|
// Storer is an interface which must be satisfied to store client data.
|
||
|
//
|
||
|
// You can either write a struct which persists this data to disk, or you can use the
|
||
|
// provided "InMemoryStore" which just keeps data around in-memory which is lost on
|
||
|
// restarts.
|
||
|
type Storer interface {
|
||
|
SaveFilterID(userID, filterID string)
|
||
|
LoadFilterID(userID string) string
|
||
|
SaveNextBatch(userID, nextBatchToken string)
|
||
|
LoadNextBatch(userID string) string
|
||
|
SaveRoom(room *Room)
|
||
|
LoadRoom(roomID string) *Room
|
||
|
}
|
||
|
|
||
|
// InMemoryStore implements the Storer interface.
|
||
|
//
|
||
|
// Everything is persisted in-memory as maps. It is not safe to load/save filter IDs
|
||
|
// or next batch tokens on any goroutine other than the syncing goroutine: the one
|
||
|
// which called Client.Sync().
|
||
|
type InMemoryStore struct {
|
||
|
Filters map[string]string
|
||
|
NextBatch map[string]string
|
||
|
Rooms map[string]*Room
|
||
|
}
|
||
|
|
||
|
// SaveFilterID to memory.
|
||
|
func (s *InMemoryStore) SaveFilterID(userID, filterID string) {
|
||
|
s.Filters[userID] = filterID
|
||
|
}
|
||
|
|
||
|
// LoadFilterID from memory.
|
||
|
func (s *InMemoryStore) LoadFilterID(userID string) string {
|
||
|
return s.Filters[userID]
|
||
|
}
|
||
|
|
||
|
// SaveNextBatch to memory.
|
||
|
func (s *InMemoryStore) SaveNextBatch(userID, nextBatchToken string) {
|
||
|
s.NextBatch[userID] = nextBatchToken
|
||
|
}
|
||
|
|
||
|
// LoadNextBatch from memory.
|
||
|
func (s *InMemoryStore) LoadNextBatch(userID string) string {
|
||
|
return s.NextBatch[userID]
|
||
|
}
|
||
|
|
||
|
// SaveRoom to memory.
|
||
|
func (s *InMemoryStore) SaveRoom(room *Room) {
|
||
|
s.Rooms[room.ID] = room
|
||
|
}
|
||
|
|
||
|
// LoadRoom from memory.
|
||
|
func (s *InMemoryStore) LoadRoom(roomID string) *Room {
|
||
|
return s.Rooms[roomID]
|
||
|
}
|
||
|
|
||
|
// NewInMemoryStore constructs a new InMemoryStore.
|
||
|
func NewInMemoryStore() *InMemoryStore {
|
||
|
return &InMemoryStore{
|
||
|
Filters: make(map[string]string),
|
||
|
NextBatch: make(map[string]string),
|
||
|
Rooms: make(map[string]*Room),
|
||
|
}
|
||
|
}
|