package rpc import ( "go.uber.org/zap" ) // NotifyAcks notifies engine about received acknowledgements. func (e *Engine) NotifyAcks(ids []int64) { e.mux.Lock() defer e.mux.Unlock() for _, id := range ids { e.notifyAckUnlocked(id) } } func (e *Engine) notifyAckUnlocked(id int64) { ch, ok := e.ack[id] if ok { close(ch) delete(e.ack, id) } } func (e *Engine) waitAck(id int64) chan struct{} { e.mux.Lock() defer e.mux.Unlock() log := e.log.With(zap.Int64("ack_id", id)) if c, found := e.ack[id]; found { log.Warn("Ack already registered") return c } c := make(chan struct{}) e.ack[id] = c return c } func (e *Engine) removeAck(id int64) { e.mux.Lock() defer e.mux.Unlock() delete(e.ack, id) }