ExBroker.php 2.5 KB
<?php

namespace trader\exchange\binance;

require_once __DIR__ . '/../../struct/ApiInfo.php';
require_once __DIR__ . '/Api.php';
require_once __DIR__ . '/../../../jytools/Websocket.php';
require_once __DIR__ . '/../../../jytools/func.php';

use trader\struct\ApiInfo;
use trader\exchange\binance\Api as BnApi;
use jytools\Websocket;
use function jytools\output;

class ExBroker
{
    private $host = 'wss://fstream.binance.com';
    private $path = '/stream';
    private ApiInfo $apiInfo;
    private BnApi $api;
    private ?Websocket $wsAcc;
    private ?Websocket $wsKline;

    public function __construct(ApiInfo $apiInfo)
    {
        $this->apiInfo = $apiInfo;
        $this->api = new BnApi($apiInfo);
    }

    public function setWsHost($host)
    {
        $this->host = $host;
    }

    public function setRestHost($host)
    {
        $this->api->setHost($host);
    }

    public function accListen(callable $onData)
    {
        $listeneKey = $this->getListenKey();
        $this->wsAcc = new Websocket($this->host . $this->path);
        $this->wsAcc->connect(
            $onOpen = function () use ($listeneKey) {
                $subData = json_encode(['method' => 'SUBSCRIBE', 'params' => [$listeneKey], 'id' => 1]);
                $this->wsAcc->push($subData);
            },
            $onMessage = function ($data) use ($onData) {
                $data = json_decode($data, true);
                if (!$data) {
                    return;
                }
                $onData($data);
            },
            $onClose = null,
        );
    }

    public function klineListen($symbol, $interval, callable $onData) {
        $this->wsKline = new Websocket($this->host. $this->path);
        $this->wsKline->connect(
            $onOpen = function () use ($symbol, $interval) {
                $subData = json_encode(['method' => 'SUBSCRIBE', 'params' => [$symbol. '@kline_'. $interval], 'id' => 1]);
                $this->wsKline->push($subData);
            },
            $onMessage = function ($data) use ($onData) {
                $data = json_decode($data, true);
                if (!$data) {
                    return;
                }
                $onData($data);
            },
            $onClose = null,
        );
    }

    private function getListenKey()
    {
        $res = $this->api->getListenKey([]);
        return $res['listenKey'];
    }
    //获取所有品种资金费率
    public function getAllPremium()
    {
        $res = $this->api->getPremiumIndex([]);
    }
}