try_judge.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace refill;
  3. class try_judge
  4. {
  5. private $mReloadTime;
  6. private $mMchTimeings;
  7. const MAX_LEFT_SECS = 600;
  8. public function __construct()
  9. {
  10. $this->load();
  11. }
  12. public function load()
  13. {
  14. global $config;
  15. $mch_times = $config['cancel_retry_time'] ?? [];
  16. $date = date('Y-m-d',time());
  17. $this->mReloadTime = strtotime($date) + 86400;
  18. $this->mMchTimeings = [];
  19. if(empty($mch_times)) return;
  20. foreach ($mch_times as $mchid => $timings)
  21. {
  22. $tstamps = [];
  23. foreach ($timings as $timing) {
  24. $tstamps[] = strtotime("{$date} {$timing}");
  25. }
  26. rsort($tstamps);
  27. if(!empty($tstamps)) {
  28. $this->mMchTimeings[$mchid] = $tstamps;
  29. }
  30. }
  31. }
  32. public function can_try($mchid,$quality)
  33. {
  34. if($quality != Quality::Normal) {
  35. return true;
  36. }
  37. if(time() >= $this->mReloadTime) {
  38. $this->load();
  39. }
  40. if(array_key_exists($mchid,$this->mMchTimeings))
  41. {
  42. $tstamps = $this->mMchTimeings[$mchid];
  43. $cursec = time();
  44. foreach ($tstamps as $tstamp)
  45. {
  46. if($cursec < $tstamp && $cursec + try_judge::MAX_LEFT_SECS > $tstamp) {
  47. return false;
  48. }
  49. }
  50. }
  51. return true;
  52. }
  53. }