Controlling data flow
This page applies to Harlequin v13.1r0 and later; and to Harlequin MultiRIP but not Harlequin Core
Because the RIP cannot guarantee that it will consume a portion of data within a certain time limit, or that it will be able to buffer an entire job, every channel class is required to be able to stop the flow of data temporarily to allow the RIP to catch up.
Your channel classes should be able to do this even though large amounts of buffer space can be allocated to the plugin explicitly, along with the limited amounts of internal buffer memory that can be obtained: at some point, buffer space will be exhausted, and the flow of data will have to be stopped.
How the channel class should do this depends on the data transfer protocol. If data is sent in a continuous stream, the input plugin could tell the source to stop sending. If data is sent in portions of some agreed size, and only when the plugin asks for it, then the input plugin can simply wait for the RIP to catch up before asking for more data.
The plugin can judge the readiness of the RIP to accept data when it uses functions in the plugin library to try to reserve space with which to send data to the RIP. The returns from these functions indicate if the RIP is ready to accept the amount of data specified by the plugin. (Functions for sending input to the RIP describes these functions.)