123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- namespace easyTask;
- use \Closure as Closure;
- /**
- * Class Command
- * @package easyTask
- */
- class Command
- {
- /**
- * 通讯文件
- */
- private $msgFile;
- /**
- * 构造函数
- * @throws
- */
- public function __construct()
- {
- $this->initMsgFile();
- }
- /**
- * 初始化文件
- */
- private function initMsgFile()
- {
- //创建文件
- $path = Helper::getCsgPath();
- $file = $path . '%s.csg';
- $this->msgFile = sprintf($file, md5(__FILE__));
- if (!file_exists($this->msgFile))
- {
- if (!file_put_contents($this->msgFile, '[]', LOCK_EX))
- {
- Helper::showError('failed to create msgFile');
- }
- }
- }
- /**
- * 获取数据
- * @return array
- * @throws
- */
- public function get()
- {
- $content = @file_get_contents($this->msgFile);
- if (!$content)
- {
- return [];
- }
- $data = json_decode($content, true);
- return is_array($data) ? $data : [];
- }
- /**
- * 重置数据
- * @param array $data
- */
- public function set($data)
- {
- file_put_contents($this->msgFile, json_encode($data), LOCK_EX);
- }
- /**
- * 投递数据
- * @param array $command
- */
- public function push($command)
- {
- $data = $this->get();
- array_push($data, $command);
- $this->set($data);
- }
- /**
- * 发送命令
- * @param array $command
- */
- public function send($command)
- {
- $command['time'] = time();
- $this->push($command);
- }
- /**
- * 接收命令
- * @param string $msgType 消息类型
- * @param mixed $command 收到的命令
- */
- public function receive($msgType, &$command)
- {
- $data = $this->get();
- if (empty($data)) {
- return;
- }
- foreach ($data as $key => $item)
- {
- if ($item['msgType'] == $msgType)
- {
- $command = $item;
- unset($data[$key]);
- break;
- }
- }
- $this->set($data);
- }
- /**
- * 根据命令执行对应操作
- * @param int $msgType 消息类型
- * @param Closure $func 执行函数
- * @param int $time 等待方时间戳
- */
- public function waitCommandForExecute($msgType, $func, $time)
- {
- $command = '';
- $this->receive($msgType, $command);
- if (!$command || (!empty($command['time']) && $command['time'] < $time))
- {
- return;
- }
- $func($command);
- }
- }
|