123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?php
- namespace refill;
- class chctl
- {
- protected $mSpeedtable;
- static $cache_names = [
- ['quality'=> 1,'name' => 'channel-ctl-oil-common-limit'],
- ['quality'=> 2,'name' => 'channel-ctl-oil-fast-limit'],
- ['quality'=> 1,'name' => 'channel-ctl-phone-common-limit'],
- ['quality'=> 2,'name' => 'channel-ctl-phone-fast-limit']
- ];
- public function __construct()
- {
- }
- public function load()
- {
- foreach (self::$cache_names as $cache)
- {
- $quality = $cache['quality'];
- $cache_name = $cache['name'];
-
- $data = rcache($cache_name,"provider-");
- $data = unserialize($data['data']);
- $cfgs = $data ?? [];
- foreach ($cfgs as $items)
- {
- foreach ($items as $item) {
- $name = $item['name'];
- $amount = $item['amount'];
- $card_type = $item['type'];
- $opened = $item['opened'] == 1 ? true : false;
- $sort = $item['sort'];
- $speed = $item['speed'];
- $key = $this->prefix($name,$amount,$card_type,$quality);
- $this->mSpeedtable[$key] = new ctl_item($name,$card_type,$amount,$speed,$sort,0,$opened);
- }
- }
- }
- }
- public function match($names,int $spec, int $card_type,int $quality)
- {
- $ctl_items = [];
- foreach ($names as $name) {
- $key = $this->prefix($name,$spec,$card_type,$quality);
- $ctl_items[] = $this->mSpeedtable[$key];
- }
- $usable_items = [];
- foreach ($ctl_items as $item) {
- if($item->opened()) {
- $usable_items[] = $item;
- }
- }
- $ascending = function ($l, $r) {
- $lproity = $l->priority();
- $rproity = $r->priority();
- $lover = $l->speed_overload() ? 1 : 0;
- $rover = $r->speed_overload() ? 1 : 0;
- if($lover == $rover) {
- return $lproity < $rproity ? -1 : 1;
- }
- else {
- return $lover < $rover ? -1 : 1;
- }
- };
- usort($usable_items, $ascending);
- $result = [];
- foreach ($usable_items as $item) {
- $result[] = $item->name();
- }
- return $result;
- }
- private function prefix($name,$spec,$card_type,$quality)
- {
- return "{$name}-{$spec}-{$card_type}-{$quality}";
- }
- }
|