亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

EasySwoole 易聯(lián)云打印 (Printer) 組件

EasySwoole 提供了全協(xié)程支持的云打印機(jī) SDK,易于使用的操作接口和風(fēng)格,輕松推送海量任務(wù)至云打印機(jī)。

目前僅支持易聯(lián)云,歡迎 fork 本項(xiàng)目貢獻(xiàn)您的力量

組件要求

  • php: >= 7.1
  • ext-swoole: >= 4.4.23
  • easyswoole/spl: ^1.4
  • easyswoole/http-client: ^1.5
  • psr/simple-cache: 1.0
  • easyswoole/utility: ^1.2
  • ext-json: *

安裝方法

composer require easyswoole/easy-printer

倉庫地址

easyswoole/easy-printer

基本使用

<?php

use EasySwoole\EasyPrinter\Commands\YiLinkCloud\PrintText;
use EasySwoole\EasyPrinter\EasyPrinter;
use EasySwoole\Utility\FileSystem;
use EasySwoole\Utility\File;

require_once __DIR__ . '/vendor/autoload.php';

class CacheConfig
{
    protected $driver;
    protected $dir;
    protected $prefix;

    public function setDriver(string $driver)
    {
        $this->driver = $driver;
    }

    public function getDriver()
    {
        return $this->driver;
    }

    public function setDir(string $dir)
    {
        $this->dir = $dir;
    }

    public function getDir()
    {
        return $this->dir;
    }

    public function setPrefix(string $prefix)
    {
        $this->prefix = $prefix;
    }

    public function getPrefix()
    {
        return $this->prefix;
    }
}

/**
 * 文件緩存
 * Class FileDriver
 */
class FileDriver implements \Psr\SimpleCache\CacheInterface
{
    /** @var string $dir */
    protected $dir;
    /** @var FileSystem $fileSystem */
    protected $fileSystem;
    /** @var string $prefix */
    protected $prefix;

    public function __construct($dir, $prefix)
    {
        if (empty($dir)) {
            $this->dir = sys_get_temp_dir();
        }
        if (empty($prefix)) {
            $this->prefix = 'easyswoole_cache:';
        }
        $this->fileSystem = new FileSystem();
        File::createDirectory($this->dir);
    }

    /**
     * @return string
     */
    protected function getPrefix(): string
    {
        return $this->dir . DIRECTORY_SEPARATOR . $this->prefix;
    }

    /**
     * 獲取緩存的 key
     * @param string $key
     * @return string
     */
    public function getCacheKey(string $key)
    {
        return $this->getPrefix() . $key . '.cache';
    }

    /**
     * 設(shè)置緩存
     * @param string $key
     * @param mixed $value
     * @param null $ttl
     * @return bool
     */
    public function set($key, $value, $ttl = null)
    {
        $file = $this->getCacheKey($key);
        $data = serialize($value);
        $this->fileSystem->put($file, $data);
        if ($ttl < time()) {
            $ttl = $this->getTtlTime($ttl);
        }
        return touch($file, $ttl);
    }

    /**
     * 獲取緩存
     * @param string $key
     * @param null $default
     * @return mixed|null
     * @throws Exception
     */
    public function get($key, $default = null)
    {
        $file = $this->getCacheKey($key);
        if ($this->fileSystem->missing($file)) {
            return $default;
        }
        if ($this->fileSystem->lastModified($file) < time()) {
            return $default;
        }
        return unserialize($this->fileSystem->get($file));
    }

    /**
     * 獲取緩存過期時(shí)間
     * @param null $ttl
     * @return float|int|null
     */
    public function getTtlTime($ttl = null)
    {
        // 如果不設(shè)置時(shí)間 默認(rèn) 100 年
        if (is_null($ttl)) {
            $ttl = 3600 * 24 * 30 * 12 * 100;
        }
        $ttl = $ttl + time();
        return $ttl;
    }

    /**
     * 刪除緩存
     * @param string $key
     * @return bool
     */
    public function delete($key)
    {
        $file = $this->getCacheKey($key);
        return $this->fileSystem->delete($file);
    }

    /**
     * 清空緩存
     * @return bool|void
     */
    public function clear()
    {
        $files = glob($this->getPrefix() . '*');
        foreach ($files as $file) {
            if (is_dir($file)) {
                continue;
            }
            unlink($file);
        }
    }

    /**
     * 批量讀取緩存
     * @param iterable $keys
     * @param null $default
     * @return array|iterable
     * @throws Exception
     */
    public function getMultiple($keys, $default = null)
    {
        if (!is_array($keys)) {
            $keys = [$keys];
        }
        $result = [];
        foreach ($keys as $i => $key) {
            $result[$key] = $this->get($key, $default);
        }
        return $result;
    }

    /**
     * 批量設(shè)置緩存
     * @param iterable $values
     * @param null $ttl
     * @return bool>
     */
    public function setMultiple($values, $ttl = null)
    {
        if (!is_array($values)) {
            $values = [$values];
        }

        $ttl = $this->getTtlTime($ttl);
        foreach ($values as $key => $value) {
            $this->set($key, $value, $ttl);
        }
        return true;
    }

    /**
     * 批量刪除緩存
     * @param iterable $keys
     * @return bool
     */
    public function deleteMultiple($keys)
    {
        if (!is_array($keys)) {
            $keys = [$keys];
        }

        foreach ($keys as $index => $key) {
            $this->delete($key);
        }

        return true;
    }

    /**
     * 緩存是否存在
     * @param string $key
     * @return bool
     */
    public function has($key)
    {
        $file = $this->getCacheKey($key);
        return file_exists($file);
    }
}

class Cache implements \Psr\SimpleCache\CacheInterface
{
    protected $driver;

    public function __construct(CacheConfig $cacheConfig)
    {
        $driver = $cacheConfig->getDriver() ?: FileDriver::class;
        $this->driver = new $driver($cacheConfig->getDir(), $cacheConfig->getPrefix());
    }

    public function __call($name, $arguments)
    {
        return $this->driver->{$name}(...$arguments);
    }

    public function set($key, $value, $ttl = null)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function setMultiple($values, $ttl = null)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function delete($key)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function has($key)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function get($key, $default = null)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function deleteMultiple($keys)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function clear()
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }

    public function getMultiple($keys, $default = null)
    {
        return $this->__call(__FUNCTION__, func_get_args());
    }
}

go(function () {
    $cacheConfig = new CacheConfig();
    $cache = new Cache($cacheConfig); // Cache 需要實(shí)現(xiàn) \Psr\SimpleCache\CacheInterface 接口,示例僅實(shí)現(xiàn)了文件緩存

    $clientId = '您的易聯(lián)云應(yīng)用ID';
    $clientSecret = '您的易聯(lián)云應(yīng)用秘鑰';
    $driver = EasyPrinter::yiLinkCloud($clientId, $clientSecret, $cache);

    // 新建一條命令
    $PrintCommand = new PrintText();
    $PrintCommand->setMachineCode('打印機(jī)編號(hào)');
    $PrintCommand->setContent('歡迎使用EasyPrinter!');
    $PrintCommand->setOriginId(md5(microtime()));

    try {
        $response = $driver->sendCommand($PrintCommand);
        var_dump($response);
    } catch (Throwable $throwable) {

    }
});

上述 Cache 參考 Cache 實(shí)現(xiàn)僅僅實(shí)現(xiàn)了文件緩存,開發(fā)者若想使用其他緩存實(shí)現(xiàn),可以自行實(shí)現(xiàn) PSR-16 CacheInterface 接口 進(jìn)行調(diào)用。

目前已支持的指令

服務(wù)商 說明 Command
易聯(lián)云 終端授權(quán) (永久授權(quán)) AuthorizePrinter
易聯(lián)云 獲取請(qǐng)求令牌 GetAccessToken
易聯(lián)云 獲取機(jī)型打印寬度 GetPrinterInfo
易聯(lián)云 獲取終端狀態(tài) GetPrinterStatus
易聯(lián)云 添加應(yīng)用菜單 PrinterAddMenu
易聯(lián)云 取消所有未打印訂單 PrinterCancelAll
易聯(lián)云 取消單條未打印訂單 PrinterCancelOne
易聯(lián)云 取消LOGO PrinterDeleteIcon
易聯(lián)云 刪除終端授權(quán) PrinterDeletePrinter
易聯(lián)云 刪除內(nèi)置語音 PrinterDeleteVoice
易聯(lián)云 獲取訂單列表 PrinterGetOrderPagingList
易聯(lián)云 獲取訂單狀態(tài) PrinterGetOrderStatus
易聯(lián)云 獲取機(jī)型軟硬件版本 PrinterGetVersion
易聯(lián)云 設(shè)置打印方式 PrinterSetBtnPrinter
易聯(lián)云 設(shè)置LOGO PrinterSetIcon
易聯(lián)云 接單拒單設(shè)置 PrinterSetIfGetOrder
易聯(lián)云 設(shè)置推送URL PrinterSetPushUrl
易聯(lián)云 聲音調(diào)節(jié) PrinterSetSound
易聯(lián)云 設(shè)置內(nèi)置語音 PrinterSetVoice
易聯(lián)云 關(guān)機(jī)重啟 PrinterShutdownRestart
易聯(lián)云 打印圖片 PrintPicture
易聯(lián)云 打印文字 PrintText
亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    久久五月天婷婷| 久久国产精品亚洲va麻豆| 中文字幕一区综合| 欧美日韩亚洲一区二区三区在线观看| 欧美日韩在线播放一区二区| 99精品免费| 国产精品一区二区三区不卡| 欧美另类网站| 欧美破处大片在线视频| 麻豆9191精品国产| 日本一区网站| 日韩亚洲国产精品| 久久波多野结衣| 欧美国产精品| 国产高清在线一区二区| 欧美日韩岛国| 成人欧美一区二区三区在线观看| 日本一区二区三区免费看| 亚洲国产日韩综合一区| 国产伦精品一区二区三区视频免费| 五月天亚洲综合情| 久久国产一二区| 亚洲精品国产精品国自产观看| 国产精品一区二区你懂得| 欧美亚洲精品日韩| 久久精品电影| 欧美日韩免费精品| 精品国产一区二区三区久久久久久| 欧美日韩mv| 欧洲国产精品| 5566中文字幕一区二区| 欧美粗暴jizz性欧美20| 久久xxxx精品视频| 国产一区二区无遮挡| 免费亚洲一区二区| 久久人人97超碰国产公开结果| 欧美一区二区三区在线免费观看 | 亚洲激情网站| 亚洲成人自拍视频| 91青青草免费观看| 国产在线精品二区| 日韩亚洲视频在线| 国产麻豆乱码精品一区二区三区| 韩日在线一区| 亚洲资源视频| 久久艳妇乳肉豪妇荡乳av| 国产偷自视频区视频一区二区| 亚洲国产一区二区三区在线 | 午夜视频久久久| 精品久久久久久一区| 亚洲一区一卡| 亚洲福利精品| 欧美精品一区在线发布| 久久免费99精品久久久久久| 97人人模人人爽人人少妇| 一区二区三区四区五区在线| 午夜国产精品视频免费体验区| 久久久影院一区二区三区| 91视频免费在线观看| 国产精品视区| 亚洲综合欧美日韩| 亚洲国产综合在线看不卡| 午夜日韩福利| 午夜日韩福利| 欧美日韩国产在线一区| 欧美成人一品| 欧美日韩高清在线一区| 欧美午夜不卡| 亚洲国产网站| 国产精品视区| 亚洲一区二三| 久久中文精品| 国产精品乱子乱xxxx| 精品高清视频| 欧美一级日本a级v片| 日韩中文字幕av在线| 西游记1978| 欧美午夜国产| 亚洲黄色av| 久久久久欧美| 91高跟黑色丝袜呻吟在线观看| 91久久精品国产91久久性色tv | 亚洲一级特黄| 国产一区二区精品| 91久久国产综合久久蜜月精品| 国产精品福利视频| 狠狠色噜噜狠狠色综合久| 国内精品二区| 日本一区免费看| 欧美视频福利| 麻豆亚洲精品| 欧美日韩天天操| 亚洲韩国在线| 亚洲国产精品123| 香蕉亚洲视频| 久久综合福利| 黄色在线一区| av一区和二区| 午夜精品亚洲一区二区三区嫩草| 欧美三级不卡| 99se婷婷在线视频观看| 欧洲精品在线一区| 黄色av日韩| 成人高清在线观看| 欧美伊人影院| 99re在线| 欧美~级网站不卡| 亚洲在线免费| 欧美一级爽aaaaa大片| 亚洲午夜精品一区二区| 成人91免费视频| 中文字幕中文字幕99| 国产精品一区在线播放| 久久久久久一区| 亚洲经典在线| 久久综合九色综合久99| 亚洲国产免费看| 久久国产精品精品国产色婷婷| 好吊日精品视频| 国产亚洲欧美一区二区三区| 欧美日一区二区在线观看| 99视频网站| 亚洲私人影院| 鲁丝一区二区三区免费| 亚洲精品资源| 亚洲一区二区三区免费看| 91av免费看| 亚洲国产日韩欧美一区二区三区| 国内一区在线| 亚洲欧美日韩国产一区二区| 亚州欧美一区三区三区在线| 久久人人超碰| 在线观看成人av| 亚洲国产婷婷香蕉久久久久久99| 99久久一区三区四区免费| 欧美国产综合| 日本在线播放不卡| 国产日韩欧美亚洲一区| 亚洲激情综合| 欧美三级黄美女| 五月天亚洲综合情| 国产乱码精品一区二区三区日韩精品| 国产一区日韩欧美| 色一情一乱一伦一区二区三区 | 九九九九精品| 国产亚洲激情| 一区二区在线不卡| 一区二区三区在线视频111| 鬼打鬼之黄金道士1992林正英| 好看不卡的中文字幕| 亚洲开发第一视频在线播放| 国产麻豆日韩| av色综合网| 91九色在线免费视频| 一本色道精品久久一区二区三区| 在线观看福利一区| 视频一区二区三区在线观看| 久久久精彩视频| 国内精品久久国产| 成人欧美一区二区三区视频| 久久大逼视频| 性欧美xxxx大乳国产app| 国产午夜久久| 性欧美长视频| 久久综合久久综合这里只有精品| 国产一级一区二区| 免费在线欧美黄色| 久久亚洲国产精品一区二区| 美女黄网久久| 91文字幕巨乱亚洲香蕉| 久久久久九九九| 久热精品在线| 国产欧美一区二区三区不卡高清| 97久久夜色精品国产九色 | 视频一区视频二区视频三区高| 久久国产主播精品| 日韩av高清| 亚洲一区综合| 亚洲一级特黄| 免费久久99精品国产自| 久久天堂成人| 国产98在线|日韩| 欧美成人蜜桃| 欧美一区二区在线| 一本不卡影院| 国产精品v欧美精品v日韩精品| 久久99精品国产99久久| 欧洲在线视频一区| 欧美一区亚洲| 亚洲精品中文字幕在线| 久久综合图片| 欧美高清一区二区| 综合网五月天| 亚洲一区二区三区免费观看 | 欧美福利在线| 亚洲欧美日本国产专区一区| 国产精品theporn88| 色阁综合av| 国产欧美高清| 麻豆传媒一区二区|