Page MenuHomePhorge
Diviner Arcanist Tech Docs PhutilChannelChannel

abstract class PhutilChannelChannel
Arcanist Technical Documentation ()

Channel that wraps some other channel. This class is not interesting on its own and just serves as a no-op proxy, but extending it allows you to compose channels to mutate their characteristics (for instance, to add protocol semantics with PhutilProtocolChannel).

The implementation of this class is entirely uninteresting.

Tasks

Reading and Writing

  • public function read()
  • public function write($message)

Waiting for Activity

  • public static function waitForAny($channels, $options) — Wait for any activity on a list of channels. Convenience wrapper around @{method:waitForActivity}.
  • public static function waitForActivity($reads, $writes, $options) — Wait (using select()) for channels to become ready for reads or writes. This method blocks until some channel is ready to be updated.

Responding to Activity

Channel Implementation

Other Methods

Methods

public function __get($name)
Inherited

This method is not documented.
Parameters
$name
Return
wild

public function __set($name, $value)
Inherited

This method is not documented.
Parameters
$name
$value
Return
wild

public function current()
Inherited

This method is not documented.
Return
wild

public function key()
Inherited

This method is not documented.
Return
wild

public function next()
Inherited

This method is not documented.
Return
wild

public function rewind()
Inherited

This method is not documented.
Return
wild

public function valid()
Inherited

This method is not documented.
Return
wild

private function throwOnAttemptedIteration()
Inherited

This method is not documented.
Return
wild

public function getPhobjectClassConstant($key, $byte_limit)
Inherited

Phobject

Read the value of a class constant.

This is the same as just typing self::CONSTANTNAME, but throws a more useful message if the constant is not defined and allows the constant to be limited to a maximum length.

Parameters
string$keyName of the constant.
int|null$byte_limitMaximum number of bytes permitted in the value.
Return
stringValue of the constant.

public function __construct($channel)

This method is not documented.
Return
this//Implicit.//

public function read()

PhutilChannel

Read from the channel. A channel defines the format of data that is read from it, so this method may return strings, objects, or anything else.

The default implementation returns bytes.

PhutilChannelChannel
This method is not documented.
Return
wildData from the channel, normally bytes.

public function write($message)

PhutilChannel

Write to the channel. A channel defines what data format it accepts, so this method may take strings, objects, or anything else.

The default implementation accepts bytes.

PhutilChannelChannel
This method is not documented.
Parameters
wild$bytesData to write to the channel, normally bytes.
Return
this

public static function waitForAny($channels, $options)
Inherited

PhutilChannel

Wait for any activity on a list of channels. Convenience wrapper around waitForActivity().

Parameters
list<PhutilChannel>$channelsA list of channels to wait for.
dict$optionsOptions, see above.
Return
void

public static function waitForActivity($reads, $writes, $options)
Inherited

PhutilChannel

Wait (using select()) for channels to become ready for reads or writes. This method blocks until some channel is ready to be updated.

It does not provide a way to determine which channels are ready to be updated. The expectation is that you'll just update every channel. This might change eventually.

Available options are:

  • 'read' (list<stream>) Additional streams to select for read.
  • 'write' (list<stream>) Additional streams to select for write.
  • 'except' (list<stream>) Additional streams to select for except.
  • 'timeout' (float) Select timeout, defaults to 1.
NOTE: Extra streams must be streams, not sockets, because this method uses stream_select(), not socket_select().
Parameters
list<PhutilChannel>$readsList of channels to wait for reads on.
list<PhutilChannel>$writesList of channels to wait for writes on.
array$options
Return
void

public function update()

PhutilChannel

Updates the channel, filling input buffers and flushing output buffers. Returns false if the channel has closed.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the channel is still open.

public function setName($name)
Inherited

PhutilChannel

Set a channel name. This is primarily intended to allow you to debug channel code more easily, by naming channels something meaningful.

Parameters
string$nameChannel name.
Return
this

public function getName()
Inherited

PhutilChannel

Get the channel name, as set by setName().

Return
stringName of the channel.

public function isOpen()

PhutilChannel

Test if the channel is open: active, can be read from and written to, etc.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the channel is open.

public function closeWriteChannel()

PhutilChannel

Close the channel for writing.

PhutilChannelChannel
This method is not documented.
Return
void

public function isOpenForReading()

PhutilChannel

Test if the channel is open for reading.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the channel is open for reading.

public function isOpenForWriting()

PhutilChannel

Test if the channel is open for writing.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the channel is open for writing.

protected function readBytes($length)

PhutilChannel

Read from the channel's underlying I/O.

PhutilChannelChannel
This method is not documented.
Parameters
int$lengthMaximum number of bytes to read.
Return
stringBytes, if available.

protected function writeBytes($bytes)

PhutilChannel

Write to the channel's underlying I/O.

PhutilChannelChannel
This method is not documented.
Parameters
string$bytesBytes to write.
Return
intNumber of bytes written.

protected function getReadSockets()

PhutilChannel

Get sockets to select for reading.

PhutilChannelChannel
This method is not documented.
Return
list<stream>Read sockets.

protected function getWriteSockets()

PhutilChannel

Get sockets to select for writing.

PhutilChannelChannel
This method is not documented.
Return
list<stream>Write sockets.

public function setReadBufferSize($size)

PhutilChannel

Set the maximum size of the channel's read buffer. Reads will artificially block once the buffer reaches this size until the in-process buffer is consumed.

PhutilChannelChannel
This method is not documented.
Parameters
int|null$sizeMaximum read buffer size, or `null` for a limitless buffer.
Return
this

public function isReadBufferEmpty()

PhutilChannel

Test state of the read buffer.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the read buffer is empty.

public function isWriteBufferEmpty()

PhutilChannel

Test state of the write buffer.

PhutilChannelChannel
This method is not documented.
Return
boolTrue if the write buffer is empty.

public function getWriteBufferSize()

PhutilChannel

Get the number of bytes we're currently waiting to write.

PhutilChannelChannel
This method is not documented.
Return
intNumber of waiting bytes.

public function flush()

PhutilChannel

Wait for any buffered writes to complete. This is a blocking call. When the call returns, the write buffer will be empty.

PhutilChannelChannel
This method is not documented.
Return
wild

protected function didConstruct()

This method is not documented.
Return
wild

protected function getUnderlyingChannel()

This method is not documented.
Return
wild

private function throwOnRawByteOperations()

This method is not documented.
Return
wild