Build Status Coverage Status

Package that provide implementations of PSR-7 StreamInterface and PSR-17 StreamFactoryInterface but also adds stream and socket related funcitonality. It is designed for use with socket connections.


Install with Composer;

composer require phrity/net-stream

Stream class

The Phrity\Net\Stream class is fully compatible with PSR-7 StreamInterface, implementing specified methods but no extras. Can be used anywhere where PSR-7 StreamInterface compability is expected.

class Stream implements StreamInterface {

    // Constructor

    public function __construct(resource $resource); // Must be a resource of type stream

    // PSR-7 methods

    public function __toString(): string;
    public function close(): void;
    public function detach(): ?resource;
    public function getSize(): ?int;
    public function tell(): int;
    public function eof(): bool;
    public function isSeekable(): bool;
    public function seek(int $offset, int $whence = SEEK_SET): void;
    public function rewind(): void;
    public function isWritable(): bool;
    public function write(string $string): int;
    public function isReadable(): bool;
    public function read(int $length): string;
    public function getContents(): string;
    public function getMetadata(?string $key = null): mixed;

SocketStream class

The Phrity\Net\SocketStream class extends Phrity\Net\Stream and adds extra methods usable on a socket stream.

class SocketStream extends Stream {

    // Methods

    public function getRemoteName(): ?string; // Returns remote name
    public function isBlocking(): ?bool; // If stream is blocking or not
    public function setBlocking(bool $enable): bool; // Change blocking mode

SocketServer class

The Phrity\Net\SocketServer class enables a server on local socket.

class SocketServer extends Stream {

    // Constructor

    public function __construct(UriInterface $uri, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN);

    // Methods

    public function accept(?int $timeout = null): ?SocketStream; // Accept connection on socket server
    public function getTransports(): array; // Ge available transports
    public function isBlocking(): ?bool; // If stream is blocking or not
    public function setBlocking(bool $enable): bool; // Change blocking mode

StreamCollection class

The Phrity\Net\StreamCollection class to handle zero to many connections.

class StreamCollection implements Countable, Iterator {

    // Constructor

   public function __construct();

    // Collectors and selectors

    public function attach(Stream $attach, ?string $key = null): string; // Attach stream to collection
    public function detach($detach): bool; // Detach stream from collection
    public function getReadable(): self; // Get collection of readable streams
    public function getWritable(): self; // Get collection of writable streams
    public function waitRead(int $seconds = 60): self; // Wait for and get collection of streams with data to read

    // Countable interface implementation

    public function count(): int;

    // Iterator interface implementation

    public function current(): Stream;
    public function key(): string;
    public function next(): void;
    public function rewind(): void;
    public function valid(): bool;

StreamFactory class

The Phrity\Net\StreamFactory class is fully compatible with PSR-17 StreamFactoryInterface, implementing specified methods and some extras. Can be used anywhere where PSR-17 StreamFactoryInterface compability is expected.

class StreamFactory implements StreamFactoryInterface {

    // Constructor

    public function __construct();

    // PSR-17 methods

    public function createStream(string $content = ''): StreamInterface;
    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface;
    public function createStreamFromResource(resource $resource): StreamInterface; // Must be a resource of type stream

    // Additional methods

    public function createSocketStreamFromResource($resource): SocketStream; // Create a socket stream
    public function createSocketServer(UriInterface $uri, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN): SocketServer; // Create a socket server
    public function createStreamCollection(): StreamCollection; // Create a stream collection


Version PHP
1.0 ^7.4|^8.0 Initial version
1.1 ^7.4|^8.0 Stream collection