func (self *Phase) Schedule(c common.SkinnyContext) error { if !self.Resolved { ep, err := epoch.Get(c.DB()) if err != nil { return err } timeout := self.Deadline - ep c.BetweenTransactions(func(c common.SkinnyContext) { if timeout > 0 { time.AfterFunc(timeout, func() { if err := self.autoResolve(c); err != nil { c.Errorf("Failed resolving %+v after %v: %v", self, timeout, err) } }) c.Debugf("Scheduled resolution of %v/%v in %v at %v", self.GameId, self.Id, timeout, time.Now().Add(timeout)) } else { c.Debugf("Resolving %v/%v immediately, it is %v overdue", self.GameId, self.Id, -timeout) if err := self.autoResolve(c); err != nil { c.Errorf("Failed resolving %+v immediately: %v", self, err) } } }) } return nil }