Package: cs.packetstream
A general purpose bidirectional packet stream connection.Latest release 20211208:Packet.eq: only test .rq_type if .is_request.Update tests for changes.ClassPacket(cs.binary.SimpleBinary,types.SimpleNamespace,cs.binary.AbstractBinary,cs.binary.BinaryMixin)A protocol packet.MethodPacket.__str__(self)pylint: disable=signature-differsMethodPacket.parse(bfr)Parse a packet from a buffer.MethodPacket.transcribe(self)Transcribe this packet.ClassPacketConnectionA bidirectional binary connection for exchanging requests and responses.MethodPacketConnection.__init__(self, recv, send, request_handler=None, name=None, packet_grace=None, tick=None)Initialise the PacketConnection.Parameters:recv: inbound binary stream.
If this is anintit is taken to be an OS file descriptor,
otherwise it should be acs.buffer.CornuCopyBufferor a file like object with aread1orreadmethod.send: outbound binary stream.
If this is anintit is taken to be an OS file descriptor,
otherwise it should be a file like object with.write(bytes)and.flush()methods.
For a file descriptor sending is done via an os.dup() of
the supplied descriptor, so the caller remains responsible
for closing the original descriptor.packet_grace:
default pause in the packet sending worker
to allow another packet to be queued
before flushing the output stream.
Default:DEFAULT_PACKET_GRACEs.
A value of0will flush immediately if the queue is empty.request_handler: an optional callable accepting
(rq_type,flags,payload).
The request_handler may return one of 5 values on success:None: response will be 0 flags and an empty payload.int: flags only. Response will be the flags and an empty payload.bytes: payload only. Response will be 0 flags and the payload.str: payload only. Response will be 0 flags and the str
encoded as bytes using UTF-8.(int, bytes): Specify flags and payload for response.
An unsuccessful request should raise an exception, which
will cause a failure response packet.tick: optional tick parameter, defaultNone.
IfNone, do nothing.
If a Boolean, calltick_fd_2if true, otherwise do nothing.
Otherwisetickshould be a callable accepting a byteslike value.MethodPacketConnection.do(self, *a, **kw)Wrapper function to check that this instance is not closed.MethodPacketConnection.join(self)Wait for the receive side of the connection to terminate.MethodPacketConnection.request(self, *a, **kw)Wrapper function to check that this instance is not closed.MethodPacketConnection.shutdown(self, *a, **kw)Shut down the PacketConnection, optionally blocking for outstanding requests.Parameters:block: block for outstanding requests, default False.ClassRequest_State(builtins.tuple)RequestState(decode_response, result)PropertyRequest_State.decode_responseAlias for field number 0PropertyRequest_State.resultAlias for field number 1Functiontick_fd_2(bs)A low level tick function to write a short binary tick
to the standard error file descriptor.This may be called by the send and receive workers to give
an indication of activity type.Release LogRelease 20211208:Packet.eq: only test .rq_type if .is_request.Update tests for changes.Release 20210306:Port to new cs.binary.Binary* classes.Some refactors and small fixes.Release 20191004:PacketConnection: new optional parameterpacket_graceto tune the send delay for additional packets before a flush, default DEFAULT_PACKET_GRACE (0.01s), 0 for no delay.Add a crude packet level activity ticker.Release 20190221:
DISTINFO requirement updates.Release 20181228:
Initial PyPI release.