Changed loop() to accept integer seconds and microseconds timeout, with NULL meaning until full completion;
completeRequest() now waits indefinitely when there's no immediate response instead of timing out.
Refined loop() algorithm;
Refined __invoke() test;
Added a test for the "listen" command.
Added the Util class;
Minor CS tweak at Client.
Added Util::exec() and Util::escapeString().
Added Util::filePutContents();
Made the script name available in the variable name "_" in Util::exec().
Indented multi-line docs for readability.
First Util tests;
Changed Util::escapeString() to only escape non-alphanumeric characters;
Renamed StateAlteringFeaturesTest.php to ClientStateAlteringFeaturesTest.php.
More Util tests;
Added persistent variant of the state altering client tests;
More efficient comma separated list filtering at Util::find().
Made Util::exec() parameters type aware;
Added an Util::exec() test;
CS fixes.
Added Util::fileGetContents();
Finished up Unit tests.
Added Util::unsetValue();
Additional tests and doc fixes.
Reworked number targeting at Util;
Added a changelog;
Chnaged the PHAR stub to not fail when reading the hash fails.
Changed Util::find() to use the "find" command when no arguments are specified.
(This significantly improves performance in typical use cases, compared to processing a "print .proplist=.id" collection)
Updated unit tests against RouterOS 6.1;
Minor CS fixes.
Moved the timeout responsibility to the Response object, which will in turn only use it when it's ACTUALLY about to receive - not when it's pulling data out of a Registry or whatever;
Also added a timeout to Client::login() (Client::__construct() uses the connection timeout as a value for it), in order to address an accidentally discovered edge case - a TCP connection that's reported as being established, but never brings back any data.
Moved exception codes into constants at the according exception.
Added docs for the new timeouts;
Changed Util::add() to ignore non-array arguments.
Completely refactored the unit testing process;
Added docs for $crypto;
Improved performance of Util::escapeString() by making the callback operate on sequences of non-alphanumeric characters instead of one-by-one such characters;
Minor doc fixes.
Fixed unit tests.