package datavisor import ( "ripple/errmsgs" "ripple/lockstep" "ripple/state" "ripple/transport" "ripple/types" ) type AccountManager struct { st *state.State d *transport.Data lockstep *lockstep.Lockstep sendMgr *transport.AccountSenderManager } func NewAccountManager( st *state.State, d *transport.Data, lockstep *lockstep.Lockstep, sendMgr *transport.AccountSenderManager, ) *AccountManager { m := &AccountManager{ st: st, d: d, lockstep: lockstep, sendMgr: sendMgr, } m.initializeAccounts() return m } func (m *AccountManager) initializeAccounts() { for id := range m.st.Storage.Accounts { m.lockstep.AddAccount(id) m.sendMgr.AddAccount(id) m.st.Memory.AddAccount(id) } } func (m *AccountManager) AddAccount(id types.UserIdentifier, port int, secretKey [32]byte, turnBit byte) error { if id == m.d.Storage.User.UserIdentifier { return errmsgs.ErrInvalidKey } if err := m.d.AddAccount(id, port, secretKey); err != nil { return err } if err := m.st.AddAccount(id, turnBit); err != nil { return err } m.lockstep.AddAccount(id) m.sendMgr.AddAccount(id) return nil } func (m *AccountManager) RemoveAccount(id types.UserIdentifier) error { m.lockstep.RemoveAccount(id) m.sendMgr.RemoveAccount(id) if err := m.st.RemoveAccount(id); err != nil { return err } return m.d.RemoveAccount(id) }