ExBroker.php 1.7 KB
<?php

namespace trader\exchange\bybit;

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

use trader\struct\ApiInfo;
use trader\exchange\bybit\Api as BbApi;
use Jiaoyin\Websocket;
use function Jiaoyin\output;

class ExBroker
{
    private $host = 'wss://stream.bybit.com';
    private $pathPri = '/v5/private'; //账户信息path
    private $pathPub = '/v5/public/linear'; //行情信息path 永续
    private ?ApiInfo $apiInfo;
    private BbApi $api;
    private ?Websocket $wsAcc;
    private ?Websocket $wsKline;

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

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

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

    public function accListen(callable $onData) {}

    public function klineListen($symbol, $interval, callable $onData)
    {
        $this->wsKline = new Websocket($this->host . $this->pathPub);
        $this->wsKline->connect(
            function () use ($symbol, $interval) {
                $this->wsKline->push(json_encode([
                    'op' => 'subscribe',
                    'args' => [
                        "kline.{$interval}.{$symbol}"
                    ]
                ]));
            },
            function ($data) use ($onData) {
                $data = json_decode($data, true);
                if (isset($data['data'])) {
                    $onData($data);
                }
            },
        );
    }
}