<?php

declare(strict_types=1);

/**
 * @author Pavel Djundik
 *
 * @link https://xpaw.me
 * @link https://github.com/xPaw/PHP-Source-Query
 *
 * @license GNU Lesser General Public License, version 2.1
 *
 * @internal
 */

namespace xPaw\SourceQuery\Socket;

use xPaw\SourceQuery\Buffer;

/**
 * Base socket interface
 *
 * @package xPaw\SourceQuery\Socket
 */
interface SocketInterface
{
    /**
     * @return string
     */
    public function getAddress(): string;

    /**
     * @return int
     */
    public function getPort(): int;

    /**
     * @return resource
     */
    public function getSocket();

    /**
     * @return int
     */
    public function getTimeout(): int;

    /**
     * Get the socket type (goldsrc/src).
     */
    public function getType(): int;

    /**
     * @param string $address
     * @param int $port
     * @param int $timeout
     */
    public function open(string $address, int $port, int $timeout): void;

    /**
     * Close
     */
    public function close(): void;

    /**
     * @param int $length
     *
     * @return Buffer
     */
    public function read(int $length = 1400): Buffer;

    /**
     * @param int $header
     * @param string $string
     *
     * @return bool
     */
    public function write(int $header, string $string = ''): bool;
}