package services import ( "time" "ripple/bug" "ripple/helpers" ) const syncInterval = 20 * time.Second func (pm *PaymentManager) pushFinalizeRoutine() { for paymentID, payment := range pm.st.Storage.Payments { if !payment.Finalizing() || payment.AckPreimage { continue } pm.accSender.Send(payment.Incoming, helpers.BuildFinalizePayment(paymentID, payment.Preimage)) } } func (pm *PaymentManager) pushCancelRoutine() { for paymentID, payment := range pm.st.Storage.Payments { if !payment.Cancelling() || payment.AckPreimage { continue } pm.accSender.Send(payment.Outgoing, helpers.BuildCancelPayment(paymentID, payment.Preimage)) } } func (pm *PaymentManager) pushSyncPayment() { for userID, acc := range pm.st.Storage.Accounts { for paymentID := range acc.Pending { payment, ok := pm.st.Storage.Payments[paymentID] if !ok { panic(bug.BugStateViolated) } if !payment.Syncing() || payment.Outgoing != userID && payment.AckSync { continue } if (payment.Cancelling() || payment.Cleaning()) && !payment.CommitOut { pm.accSender.Send(userID, helpers.BuildVerifyCommit(paymentID)) continue } pm.accSender.Send(userID, helpers.BuildSyncPayment(paymentID, payment.FinalizeOut)) } } } func (pm *PaymentManager) SyncRoutine() { pm.pushFinalizeRoutine() pm.pushCancelRoutine() pm.pushSyncPayment() } func (pm *PaymentManager) RunSyncRoutine() { for { pm.SyncRoutineCh <- struct{}{} time.Sleep(syncInterval) } }