43 lines
722 B
Go
43 lines
722 B
Go
package main
|
|
|
|
import "sync"
|
|
|
|
type Editor struct {
|
|
Username string
|
|
Time string
|
|
}
|
|
|
|
type EditorStore struct {
|
|
sync.RWMutex
|
|
m map[string]*Editor
|
|
}
|
|
|
|
func NewEditorStore() *EditorStore {
|
|
return &EditorStore{m: make(map[string]*Editor)}
|
|
}
|
|
|
|
func (e *EditorStore) Set(page, username string) *Editor {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
editor := e.m[page]
|
|
if editor != nil {
|
|
return editor
|
|
}
|
|
e.m[page] = &Editor{username, now()}
|
|
return nil
|
|
}
|
|
|
|
func (e *EditorStore) RemoveEditor(page, username string) {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
if editor, ok := e.m[page]; ok {
|
|
if editor.Username == username {
|
|
delete(e.m, page)
|
|
}
|
|
}
|
|
}
|
|
func (e *EditorStore) Remove(page string) {
|
|
e.Lock()
|
|
defer e.Unlock()
|
|
delete(e.m, page)
|
|
}
|