<?php
// GENERATED CODE -- DO NOT EDIT!

// Original file comments:
//
// Сервис реализует функционал управления приборами учёта(ПУ)
namespace Keyapis\TelemetryControl\V1;

/**
 * Сервис приборов учёта (ПУ).
 * Авторизация:
 *   - Authorization: Bearer token.
 *   - X-Api-Key: apiKey
 */
class DeviceServiceClient extends \Grpc\BaseStub {

    /**
     * @param string $hostname hostname
     * @param array $opts channel options
     * @param \Grpc\Channel $channel (optional) re-use channel object
     */
    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * Полнодуплексный метод отправки команд на сервер и получения изменения со стороны сервера.
     * Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений.
     * Метод доступен для: ApiKey: Без учета разрешений
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\BidiStreamingCall
     */
    public function PostDeviceFullDuplex($metadata = [], $options = []) {
        return $this->_bidiRequest('/keyapis.telemetry_control.v1.DeviceService/PostDeviceFullDuplex',
        ['\Keyapis\TelemetryControl\V1\PostDeviceFullDuplexResponse','decode'],
        $metadata, $options);
    }

    /**
     * Метод получения ПУ.
     * Разрешения: telemetry_control:device:card, telemetry_control:device:card:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDevice(\Keyapis\TelemetryControl\V1\GetDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDevice',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка приборов учета.
     * Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceList(\Keyapis\TelemetryControl\V1\GetDeviceListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества приборов учета.
     * Разрешения: telemetry_control:device:list, telemetry_control:device:list:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee, master. При наличии разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceCount(\Keyapis\TelemetryControl\V1\GetDeviceCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод замены прибора учета.
     * Создает ПУ и привязывает его индикаторы к ТУ исходного ПУ.
     * Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\PostDeviceReplaceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceReplace(\Keyapis\TelemetryControl\V1\PostDeviceReplaceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PostDeviceReplace',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PostDeviceReplaceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения прибора учета.
     * Поддерживает создание и обновление.
     * Разрешения: telemetry_control:device:save, telemetry_control:device:save:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\PostDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDevice(\Keyapis\TelemetryControl\V1\PostDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PostDevice',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PostDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления прибора учета.
     * Разрешения: telemetry_control:device:remove, telemetry_control:device:remove:own.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\DeleteDeviceRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteDevice(\Keyapis\TelemetryControl\V1\DeleteDeviceRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/DeleteDevice',
        $argument,
        ['\Keyapis\TelemetryControl\V1\DeleteDeviceResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения индикатора.
     * Поддерживает создание и обновление.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PostDeviceIndicatorRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostDeviceIndicator(\Keyapis\TelemetryControl\V1\PostDeviceIndicatorRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PostDeviceIndicator',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PostDeviceIndicatorResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения индикатора.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceIndicatorRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceIndicator(\Keyapis\TelemetryControl\V1\GetDeviceIndicatorRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicator',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceIndicatorResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка индикаторов.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceIndicatorListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceIndicatorList(\Keyapis\TelemetryControl\V1\GetDeviceIndicatorListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceIndicatorListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества индикаторов.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceIndicatorCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceIndicatorCount(\Keyapis\TelemetryControl\V1\GetDeviceIndicatorCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceIndicatorCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления индикаторa.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\DeleteDeviceIndicatorRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteDeviceIndicator(\Keyapis\TelemetryControl\V1\DeleteDeviceIndicatorRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/DeleteDeviceIndicator',
        $argument,
        ['\Keyapis\TelemetryControl\V1\DeleteDeviceIndicatorResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей индикаторов и ТУ.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceIndicatorMetricPointList(\Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorMetricPointList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества связей индикаторов и ТУ.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений.
     * Метод доступен для: ApiKey: При наличии разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceIndicatorMetricPointCount(\Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceIndicatorMetricPointCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceIndicatorMetricPointCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связи индикаторов и ТУ.
     * Поддерживает только создание связи.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutDeviceIndicatorMetricPointAttach(\Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PutDeviceIndicatorMetricPointAttach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления связи индикаторов и ТУ.
     * Метод доступен для: Token: admin, service, bti, seller, application, owner, employee. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutDeviceIndicatorMetricPointDetach(\Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PutDeviceIndicatorMetricPointDetach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutDeviceIndicatorMetricPointDetachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей ПУ и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceGroupListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetDeviceGroupList(\Keyapis\TelemetryControl\V1\GetDeviceGroupListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceGroupList',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceGroupListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества связей ПУ и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\GetDeviceGroupCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetDeviceGroupCount(\Keyapis\TelemetryControl\V1\GetDeviceGroupCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/GetDeviceGroupCount',
        $argument,
        ['\Keyapis\TelemetryControl\V1\GetDeviceGroupCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения связей ПУ и группы пользователя.
     * Поддерживает только создание.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutDeviceGroupAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutDeviceGroupAttach(\Keyapis\TelemetryControl\V1\PutDeviceGroupAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PutDeviceGroupAttach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutDeviceGroupAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления связей ПУ и группы пользователя.
     * Метод доступен для: Token: admin, service, bti, seller. Без учета разрешений
     * @param \Keyapis\TelemetryControl\V1\PutDeviceGroupDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutDeviceGroupDetach(\Keyapis\TelemetryControl\V1\PutDeviceGroupDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.telemetry_control.v1.DeviceService/PutDeviceGroupDetach',
        $argument,
        ['\Keyapis\TelemetryControl\V1\PutDeviceGroupDetachResponse', 'decode'],
        $metadata, $options);
    }

}
