agent/taskengine/sessionfactory.go (47 lines of code) (raw):

package taskengine import ( "sync" ) var sessionFactory *SessionFactory var session_lock sync.Mutex type SessionFactory struct { tasks map[string]*SessionTask m sync.Mutex } func GetSessionFactory() *SessionFactory { session_lock.Lock() defer session_lock.Unlock() if sessionFactory == nil { sessionFactory = &SessionFactory{ tasks: make(map[string]*SessionTask), } } return sessionFactory } func (t *SessionFactory) AddSessionTask(task *SessionTask) { t.m.Lock() defer t.m.Unlock() t.tasks[task.sessionId] = task } func (t *SessionFactory) GetTask(name string) (*SessionTask, bool) { t.m.Lock() defer t.m.Unlock() task, ok := t.tasks[name] return task, ok } func (t *SessionFactory) RemoveTask(name string) { t.m.Lock() defer t.m.Unlock() delete(t.tasks, name) } func (t *SessionFactory) ContainsTask(name string) bool { t.m.Lock() defer t.m.Unlock() _, ok := t.tasks[name] return ok } func (t *SessionFactory) IsAnyTaskRunning() bool { t.m.Lock() defer t.m.Unlock() return len(t.tasks) > 0 }