Aaron Piotrowski
a8a5a1b3a5
Fix Emitter
2016-08-16 02:28:47 -05:00
Aaron Piotrowski
888229d667
Use strict types
2016-08-15 23:46:26 -05:00
Bob Weinand
6a87658ad8
Remove bogus .coveralls.yml file
2016-08-15 15:41:28 +02:00
Bob Weinand
e7d629e58f
Fix signals not being dispatched in NativeLoop
...
This was the case when at least one expired and non-expired timer existed.
2016-08-14 22:29:30 +02:00
Niklas Keller
cef92e9770
Doc fixes for Coroutine
2016-08-14 19:17:08 +02:00
Bob Weinand
dcf17e3f98
Optimize Producer & remove wait until first subscribe
...
Also delay first emit in Emitter until next tick
2016-08-14 16:57:17 +02:00
Bob Weinand
08d65bcd63
Make Subscriber not caring about $id type
2016-08-14 04:47:48 +02:00
Bob Weinand
80265b726e
Do not have final methods in Struct, functions may need to be overridden
2016-08-14 04:41:47 +02:00
Aaron Piotrowski
42d9b25c3d
Temp var unnecessary
2016-08-13 10:24:55 -05:00
Aaron Piotrowski
7bc08b9a6a
Replace leftover LogicExceptions exceptions with Error
2016-08-12 16:58:53 -05:00
Aaron Piotrowski
2ff32c2d6b
Remove unnecessary default parameter values
2016-08-12 16:38:36 -05:00
Aaron Piotrowski
66c38e1480
Refactor Amp\coroutine()
...
Any function can now be passed to this function, which now returns a function returning an awaitable.
2016-08-12 14:50:44 -05:00
Aaron Piotrowski
69ec812bc0
Require PHP 7
2016-08-11 14:52:40 -05:00
Aaron Piotrowski
658edf33f7
Use Closure::fromCallable() in 7.1
2016-08-11 13:33:51 -05:00
Aaron Piotrowski
ea66677a50
Update for Driver changes in spec
2016-08-06 08:58:37 -05:00
Aaron Piotrowski
aa7b76e842
Add awaitable/coroutine-aware loop functions
...
These functions mirror the standard loop methods, but run returned Generators as coroutines and invoke rethrow() on returned awaitables.
2016-08-02 12:48:32 -05:00
Aaron Piotrowski
13908fe2e5
Add concat() function
2016-08-01 11:10:59 -05:00
Aaron Piotrowski
9055f159e7
Revert some() to v1 behavior
2016-07-31 00:31:04 -05:00
Aaron Piotrowski
19e6440897
Fix native loop timers
2016-07-25 10:09:40 -05:00
Aaron Piotrowski
c2caca9d02
Fix functions using Subscriber as Awaitable
...
Use PHP_INT_MAX instead of 0 for infinite interval() count.
2016-07-20 08:53:18 -05:00
Aaron Piotrowski
7adc7d8452
Remove missed emit() default value
2016-07-20 08:52:19 -05:00
Aaron Piotrowski
8e794ba1d7
Fix stream()
2016-07-19 15:24:05 -05:00
Aaron Piotrowski
24142496d8
Rethrow subscriber callback exceptions from loop
2016-07-19 15:13:56 -05:00
Bob Weinand
1642bf9195
s/settle/any/ which now returns [$errors, $succeeds]
2016-07-19 21:39:09 +02:00
Aaron Piotrowski
bec838b693
Remove leftover exception class
...
No longer needed as Subscriber is not an awaitable.
2016-07-19 13:30:28 -05:00
Aaron Piotrowski
70123b9a44
Update Producer::resolve(); fix emitting observable
2016-07-19 13:19:44 -05:00
Aaron Piotrowski
9839343bbb
Remove default value from emit
2016-07-19 13:10:15 -05:00
Aaron Piotrowski
13a6fc59c4
Producer::init() -> private
2016-07-19 12:42:58 -05:00
Aaron Piotrowski
32b4721c5e
Subscriber no longer implements Awaitable
2016-07-19 12:40:16 -05:00
Aaron Piotrowski
90d744537e
protected -> private in internal traits
2016-07-19 12:32:43 -05:00
Aaron Piotrowski
3e170639c3
Remove final from Observer and Subscriber
2016-07-19 11:58:20 -05:00
Aaron Piotrowski
dad93a6da0
Merge branch 'observable' into v2
2016-07-18 23:29:19 -05:00
Aaron Piotrowski
b9d554dd7b
Add more functions
2016-07-18 23:23:25 -05:00
Aaron Piotrowski
c561197d1d
Remove unused v1 files
2016-07-18 23:22:07 -05:00
Aaron Piotrowski
ade997688a
Merge branch 'awaitable' into v2
2016-07-18 23:20:05 -05:00
Aaron Piotrowski
3f654cbd5b
Initial tests plus some fixes
2016-07-12 11:20:06 -05:00
Bob Weinand
3603d5b1ec
EvLoop::enabled() -> supported()
2016-06-26 17:35:25 +02:00
Aaron Piotrowski
2a1fde0b44
Add automatic loop factory bootstrap
2016-06-23 23:37:06 -05:00
Aaron Piotrowski
4ed8e65468
Cleaner resolution
2016-06-16 23:27:14 -05:00
Aaron Piotrowski
92767755ee
Avoid loosing exception thrown from generator after invalid yield
2016-06-16 22:44:32 -05:00
Aaron Piotrowski
f553e4f08b
Improve coroutine continuation
...
Duplicated some code for faster coroutine continuation.
2016-06-14 23:26:59 -05:00
Aaron Piotrowski
ae182165e5
Remove circular reference check
2016-06-14 21:53:50 -05:00
Aaron Piotrowski
60d560d70e
Add $className param to capture(); other cleanup
2016-06-14 21:40:04 -05:00
Aaron Piotrowski
986b69907f
No need to call keepalive within EvLoop
...
Loop class handles the details necessary to stop the loop if no reference watchers exist.
2016-06-09 12:59:18 -05:00
Aaron Piotrowski
33338324d4
Add UvLoop
2016-06-09 12:57:46 -05:00
Aaron Piotrowski
666cc42a5f
Better ref/unref in EvLoop; fix EvLoopTest
2016-06-08 16:03:37 -05:00
Aaron Piotrowski
543d1c5e66
Fix repeat timer interval
2016-06-08 12:08:00 -05:00
Aaron Piotrowski
a49d333f1b
Add EvLoop; Split shared components into Loop
2016-06-08 09:22:14 -05:00
Aaron Piotrowski
757778c848
Fix check if signal was disabled
...
Plus some minor tweaks
2016-06-08 00:15:36 -05:00
Aaron Piotrowski
8e31310921
Fix repeat timer memory leak
2016-06-07 12:40:35 -05:00
Aaron Piotrowski
93424c1c6e
Enable events in next tick
2016-06-07 12:24:53 -05:00
Aaron Piotrowski
f940934a0b
Update for latest standard changes
...
Plus some minor tweaks and more docs.
2016-06-07 00:18:59 -05:00
Bob Weinand
c9af067b46
Fix delays/intervals being able equal to zero
2016-06-04 00:10:47 +02:00
Aaron Piotrowski
666bb332e1
Fix some bugs, refactor disable/unreference
2016-06-03 10:00:29 -05:00
Aaron Piotrowski
808ce32e3c
Fix leftover mentions of Disposable
2016-06-02 17:11:25 -05:00
Aaron Piotrowski
548a9fd556
Fix bug when emitting failed awaitable and waiting for a subscriber
2016-06-02 17:05:22 -05:00
Aaron Piotrowski
7fb57141d2
Cleanup yielded value handling
2016-06-02 10:46:22 -05:00
Aaron Piotrowski
5715bec9e1
Refactor functions with Emitter
2016-06-02 10:43:46 -05:00
Aaron Piotrowski
cef5c90168
Drop disposable interface; rename dispose() to unsubscribe()
2016-06-02 10:42:22 -05:00
Aaron Piotrowski
acbe2c8237
Add Registry; support streams with multiple watchers
2016-06-02 09:45:04 -05:00
Aaron Piotrowski
055d7d4c52
Update docblocks
2016-06-01 12:18:11 -05:00
Aaron Piotrowski
cd6939db5a
Build awaitable in when()
2016-06-01 12:10:46 -05:00
Aaron Piotrowski
b705c144c6
Minor tweaks
2016-06-01 12:06:43 -05:00
Aaron Piotrowski
906d6db47a
Update docblocks
2016-06-01 11:37:12 -05:00
Aaron Piotrowski
c4e9a19095
Rename Emitter to Producer; add new Emitter class
...
Emitter uses a coroutine to emit values. Updated examples.
2016-06-01 11:19:19 -05:00
Aaron Piotrowski
cc431a0374
Prevent emit without subscribers
2016-05-31 23:02:59 -05:00
Aaron Piotrowski
eb49e6e8ff
Resolve emit with observable result instead of emitting
...
Emitting another observable will emit values from the emitted observable, then resolve the awaitable returned from emit with the observable result
2016-05-31 16:23:01 -05:00
Aaron Piotrowski
a52e1e4c33
Rename Observer methods
2016-05-31 14:45:14 -05:00
Aaron Piotrowski
1b079bb336
Fix Observer
2016-05-30 00:34:44 -05:00
Aaron Piotrowski
57e25f9354
Simpler implementation
2016-05-29 11:46:58 -05:00
Aaron Piotrowski
da3bbdf90c
Null default for Success
2016-05-29 10:40:00 -05:00
Aaron Piotrowski
4a2baa670e
Subscriber model
2016-05-27 15:44:01 -05:00
Aaron Piotrowski
ca827319ec
Standard updates and more
...
Update for changes in async-interop/event-loop.
Do not invalidate delay and defer on disable.
Better watcher ID generation.
Throw if enabling invalid watcher.
2016-05-27 10:16:36 -05:00
Aaron Piotrowski
99eecc1a3f
Refactor
2016-05-26 18:20:05 -05:00
Aaron Piotrowski
3edab2dfd3
Put Loop::get() back
...
Why do I keep thinking null uses the current loop... bah
2016-05-26 18:15:33 -05:00
Aaron Piotrowski
dd70850682
Remove driver argument
2016-05-26 00:09:50 -05:00
Aaron Piotrowski
ae225835f2
Drop exception namespace
2016-05-25 23:24:06 -05:00
Aaron Piotrowski
a68bde6449
Eliminate watcher constructors
2016-05-25 23:21:49 -05:00
Aaron Piotrowski
b436a56869
Remove unused property
2016-05-24 12:09:52 -05:00
Aaron Piotrowski
a9362780ed
Initial commit
2016-05-24 11:47:14 -05:00
Aaron Piotrowski
ccec7acc94
Remove Exception namespace
2016-05-24 10:39:19 -05:00
Aaron Piotrowski
5cd2c33d5c
Fix defer queue invocation
2016-05-24 09:36:16 -05:00
Aaron Piotrowski
6d263ffb84
Drop Awaitable from namespace
2016-05-23 22:48:28 -05:00
Aaron Piotrowski
8b42994ec9
Fix exception creation
2016-05-23 21:36:29 -05:00
Aaron Piotrowski
13e807d564
Throw on repeated resolution
2016-05-23 21:32:41 -05:00
Aaron Piotrowski
6fc6ad1ab5
Throw instead of returning Failure object
2016-05-23 10:19:48 -05:00
Aaron Piotrowski
28577cf6e6
Add Pause; update for timer watcher changes in loop
2016-05-23 00:44:35 -05:00
Aaron Piotrowski
27a4569b8b
Improve defer queue invocation
2016-05-23 00:37:56 -05:00
Aaron Piotrowski
e1a2e99ca8
Avoid namespace lookup on built-in functions
2016-05-22 23:08:31 -05:00
Aaron Piotrowski
55e0971be1
Update for changes in async-interop
...
Remove use of Registry; switch Yoda conditionals
2016-05-22 22:59:09 -05:00
Aaron Piotrowski
378990fe86
Use $exception instead of passing as callback data
...
Less code this way
2016-05-22 13:43:37 -05:00
Aaron Piotrowski
918e792093
Fix LazyAwaitable
2016-05-22 13:42:38 -05:00
Aaron Piotrowski
b572f9be40
Rename and move Promise
2016-05-22 13:26:53 -05:00
Aaron Piotrowski
de3ada9014
Cleanup functions; rename any() to first(); remove resolve()
2016-05-22 10:53:13 -05:00
Aaron Piotrowski
b4ea37576e
Execute after CoroutineResult
2016-05-22 09:25:40 -05:00
Niklas Keller
0b954b2515
Fix wait to reuse current default loop
2016-05-22 10:57:31 +02:00
Niklas Keller
9f4d38471d
Remove 'fail', clean up signatures
2016-05-22 10:57:10 +02:00
Aaron Piotrowski
1864b3cbe6
Refactor coroutine return for 5.x
2016-05-22 00:11:03 -05:00
Aaron Piotrowski
9c541b0faa
Rename Lazy to LazyAwaitable
2016-05-21 23:47:50 -05:00
Aaron Piotrowski
a6fbc13d89
Remove defined check
2016-05-21 12:19:48 -05:00
Aaron Piotrowski
345bf78ac2
Double-quote strings
2016-05-21 12:12:55 -05:00
Aaron Piotrowski
a309a243c2
Fix formatting
2016-05-21 12:07:08 -05:00
Aaron Piotrowski
c7f64ce2c0
Initial commit
2016-05-21 09:44:52 -05:00
Aaron Piotrowski
deb45e2cc2
Initial commit
2016-05-19 11:13:07 -05:00
Bob Weinand
4f2161da5f
Fix notices in NativeReactor; prepare tag 1.2.2
2016-05-12 14:54:59 +02:00
Bob Weinand
87a5f29ab4
Fix potential infinite loop in UvReactor::run(); prepare tag 1.2.1
2016-05-12 07:51:11 +02:00
Bob Weinand
452c9b7295
Force leading backslashes everywhere
2016-05-11 18:53:20 +02:00
Niklas Keller
d9aa8573f0
Throw InvalidArgumentException if argument to resolve() is neither callable nor an instance of Generator
2016-05-11 18:49:25 +02:00
Bob Weinand
92e004264c
resolve() accepts callables returning generators - added to changelog
2016-05-11 18:28:19 +02:00
Chris Wright
3ab10de2a2
Accept callables to resolve()
2016-05-11 17:13:15 +01:00
Bob Weinand
cc7db038b3
Fix mem leaks & circular reference; prepare tag 1.1.1
2016-05-11 03:36:46 +02:00
Niklas Keller
7046ca47e1
Expose combined exceptions in combinator exception
...
Also fix indent, escape sequences and docs
2016-03-09 14:09:15 +01:00
Bob Weinand
d3212d4638
NativeReactor needs to always end in stopped state
...
(under normal circumstances)
2016-03-08 12:14:19 +01:00
Danack
a78cc09dac
Avoid invalid escape sequences.
2016-02-24 12:56:47 +00:00
Bob Weinand
e925017519
If no timer has ever been defined, also block indef
...
Instead of a loop being uselessly repeated each one second (but that doesn't matter in real world actually)
2016-02-22 23:29:31 +01:00
Bob Weinand
4b667478f4
Fixed bug causing NativeReactor to run at 100% CPU
...
See also https://github.com/amphp/aerys/issues/68
2016-02-22 23:17:50 +01:00
Bob Weinand
5341a4cb92
Fix combinator functions, prepare tag 1.0.7
...
$struct->remaining may be negative in case of bare values passed to combinator functions
2016-01-09 15:19:56 +01:00
Bob Weinand
9f76a3f16e
Fix NativeReactor::stop() being delayed, prepare tag 1.0.6
2015-11-16 03:02:13 +01:00
Bob Weinand
3057329a5c
Update tests for CombinatorException, prepare tag 1.0.5
2015-09-30 14:31:53 +02:00
Niklas Keller
00898cd6af
Convert RuntimeException to CombinatorException
2015-09-23 22:56:55 +02:00
Bob Weinand
63055f0784
AssertionException => AssertionError
2015-09-19 17:43:57 +02:00
Bob Weinand
de205d29e1
LibeventReactor::repeat() interpreted $msInterval as microseconds
2015-09-10 21:21:57 +02:00
Bob Weinand
8f884b0b9d
Fix bug causing infinite busy wait with active immediates
2015-08-20 03:28:14 +02:00
Bob Weinand
e74926e7da
Fix buggy keepAliveCount in NativeReactor
2015-08-20 02:21:20 +02:00
Markus Staab
f170acee71
Check array index instead of error suppression
2015-08-18 16:01:08 +02:00
Niklas Keller
8031623a8f
Check array index instead of error suppression
2015-08-18 14:46:34 +02:00
Niklas Keller
2fe4c65faa
Catch Throwables in __coroutineSend on PHP 7
2015-08-18 08:55:44 +02:00
Daniel Lowrey
861fca1ebd
Fix outdated docblocks
2015-08-16 20:33:07 -04:00
Daniel Lowrey
3d1fde0812
Use correct uv flags to prevent UvReactor::tick() from hanging in edge-case scenarios
2015-08-11 20:01:25 -04:00
Daniel Lowrey
7df9b175ef
Perform manual GC prior to run loop end
2015-08-10 13:36:25 -04:00
Daniel Lowrey
6612bb84df
Revert "gc just to be safe prior to run loop exit"
...
This reverts commit ad4831888f
.
2015-08-08 11:50:22 -04:00
Daniel Lowrey
5cad406795
Normalize coroutine() return to Promise type
2015-08-07 11:01:36 -04:00
Daniel Lowrey
ad4831888f
gc just to be safe prior to run loop exit
2015-08-06 14:37:29 -04:00
Niklas Keller
39d3212fb0
Fix documentation for Failure
2015-08-05 23:45:29 +02:00
Niklas Keller
e00d5a7c41
Fix documentation for Failure
2015-08-05 22:49:32 +02:00
Daniel Lowrey
e209ee189d
Don't unload watchers when the run loop finishes
2015-08-05 13:13:16 -04:00
Daniel Lowrey
a7b057ace1
Add leading namespace slash for built-in functions
2015-08-04 23:58:49 -04:00
Daniel Lowrey
cf206dd898
Add "state" key to Amp\info() return array
2015-08-04 23:47:20 -04:00
Daniel Lowrey
70f4971ae1
Remove stream() in favor of PromiseStream
2015-08-04 23:46:49 -04:00
Daniel Lowrey
7c35dc7efd
Fix keep_alive refcount off-by-one error in reactor implementations
2015-08-04 23:11:52 -04:00
Daniel Lowrey
98f609a99a
Clear watchers on run() loop exit, throw on invalid run/tick/stop calls
2015-08-04 11:07:13 -04:00
Daniel Lowrey
f840ee4334
update incorrect docblock
2015-08-01 23:03:25 -04:00
Daniel Lowrey
2c8727133e
functor argument is now optional in Amp\filter()
...
If no functor parameter is supplied, all results equal to FALSE
using a (bool) cast will be removed.
2015-08-01 13:28:41 -04:00
Daniel Lowrey
705c57483b
Fail promise timeout() operations using TimeoutException
2015-07-31 15:50:27 -04:00
Daniel Lowrey
094899a74b
Add boolean "keep_alive" option for all watcher types
...
This option determines if the watcher will keep the run() loop
from returning. By default all watchers set "keep_alive" => true.
Setting this value to false is ideal for registering non-crucial
watchers (e.g. cache invalidation timers) that should run for the
life of the program but shouldn't prevent the event loop from
returning if all essential tasks have completed.
<?php
echo "before run\n";
run(function () {
immediately(function () {
echo "immediately\n";
});
once(function () {
echo "once\n";
}, 100, ["keep_alive" => false]);
repeat(function () {
echo "repeat\n";
}, 500, ["keep_alive" => false]);
echo "onStart end\n";
});
echo "after run\n";
The above snippet will have the following output:
before run
immediately
after run
The Amp\info() function now also reports the number of
keep_alive watchers currently registered via the "keep_alive" key.
2015-07-31 09:32:22 -04:00
Daniel Lowrey
bdd8503cbe
init() -> driver()
2015-07-31 09:32:21 -04:00
Daniel Lowrey
b1f400cad5
misc v1 cleanup
2015-07-29 23:23:53 -04:00
Daniel Lowrey
56b6330114
Use object hashes as watcher IDs
2015-07-29 22:12:53 -04:00
Daniel Lowrey
8bcbba41a0
Move to procedural API
2015-07-29 16:59:53 -04:00
Daniel Lowrey
1d9d572ee5
promise updates are no longer variadic + misc formatting
2015-07-27 10:08:02 -04:00
Daniel Lowrey
38b3fbbbbb
move PromiseStream functionality into Amp\stream()
2015-07-23 15:23:45 -04:00
Daniel Lowrey
e18b090902
use fully qualified namespace for global functions
2015-07-23 01:32:52 -04:00
Daniel Lowrey
55e379e332
Rollback static coroutine methods to namespaced functions
2015-07-23 01:30:53 -04:00
Daniel Lowrey
a4636851d6
remove deprecated functions
2015-07-22 14:49:40 -04:00
Daniel Lowrey
7335cb2517
use explicit FQDN for compile time optimizations
2015-07-22 13:54:29 -04:00
Daniel Lowrey
09e000a6d7
allow nested tick
2015-07-22 13:12:21 -04:00
Daniel Lowrey
1fa9771dde
update coverage ignore
2015-07-22 13:12:14 -04:00
Daniel Lowrey
505c59d0e3
minor cleanup
2015-07-22 12:34:42 -04:00
Daniel Lowrey
f6be176a07
cleanup + tests
2015-07-22 11:38:17 -04:00
Daniel Lowrey
cdc5fecd47
Remove Streamable interface
2015-07-22 00:10:09 -04:00
Daniel Lowrey
79a33c09fe
misc + testing
2015-07-21 23:59:20 -04:00
Daniel Lowrey
2cea028b1c
filter() updates and tests
2015-07-21 20:09:27 -04:00
Daniel Lowrey
33fd20acb3
add tests
2015-07-21 17:25:18 -04:00
Daniel Lowrey
dcab6907c0
minor cleanup
2015-07-21 17:25:11 -04:00
Daniel Lowrey
d6b674b93b
Move coroutine functions into new Coroutine class
2015-07-21 16:14:50 -04:00
Daniel Lowrey
564a81c519
misc updates + tests
2015-07-21 12:25:34 -04:00
Daniel Lowrey
c8bbf8208f
misc updates
2015-07-20 22:40:06 -04:00
Daniel Lowrey
0e6560070b
misc updates and tests
2015-07-20 22:27:11 -04:00
Daniel Lowrey
10037fe859
Miscellaneous reactor cleanup
2015-07-20 15:42:56 -04:00
Daniel Lowrey
288530d296
Add EvReactor
2015-07-20 15:42:42 -04:00
Daniel Lowrey
28154b4d70
Fix missing stream property assignment
2015-07-19 13:53:26 -04:00
Daniel Lowrey
d8a0c147e6
Add manual watcher refcount manipulation methods
2015-07-10 15:36:13 -04:00
Daniel Lowrey
4d4e9bad32
Replace BaseException refs with Throwable
2015-07-07 10:15:57 -04:00
Daniel Lowrey
ad96a584d5
Check coroutine nesting level before incurring "next tick" overhead
2015-06-16 12:08:24 -04:00
Daniel Lowrey
c7d0f3f86e
error traceback improvement
2015-06-16 11:10:53 -04:00
Daniel Lowrey
40fbb6e16d
Minor coroutine refactoring/optimization; add makeGeneratorError()
2015-06-16 10:59:44 -04:00
Daniel Lowrey
1d777c7e3e
Remove custom coroutine promisifier support
2015-06-15 17:53:58 -04:00
Markus Staab
f06f803e76
fixed code to adhere to the phpdoc'ed description
2015-06-15 17:47:02 -04:00
Daniel Lowrey
1a891f54ac
Remove streamable support in coroutine resolution
2015-06-15 13:17:27 -04:00
Daniel Lowrey
57c0f222ea
Support extended generator error debugging output in PHP7
2015-06-15 11:56:42 -04:00
Daniel Lowrey
deedb4a7fa
minor coroutine optimization to avoid extra valid() fcall
2015-06-15 10:58:24 -04:00
Bob Weinand
298357f760
We need to check for Generator::getReturn() in ≥ PHP 7
2015-06-13 18:37:04 +02:00
Daniel Lowrey
8a8930c8fd
Fix exception breakage across 5.x/7 environments
2015-06-11 15:22:14 -04:00
Daniel Lowrey
7ce6734976
Fix potential illegal offset access
2015-06-10 15:32:02 -04:00
Bob Weinand
80fb080470
I/O watchers must be always cleared, even if disabled
...
Not clearing I/O watcher lead to a leftover disabled watcher, so that streamIdPollMap still contains a disabled watcher with the flag.
Which may lead to a new watcher of same type not triggering an uv_poll_start().
2015-06-10 20:10:33 +02:00
Daniel Lowrey
f2a0488d87
Add Amp\promises() to coalesce values/promises/promisors to promises
2015-06-09 11:49:22 -04:00
Daniel Lowrey
1ac3d96d24
Remove Exception hint because it breaks on PHP7 BaseException
2015-06-08 15:11:17 -04:00
Daniel Lowrey
e923ea3fde
minor timeout function/test cleanup
2015-05-31 20:18:42 -04:00
Daniel Lowrey
34088cbf52
Add timeout() function
2015-05-31 20:13:39 -04:00
Daniel Lowrey
905d5bfc2c
update docblock
2015-05-31 19:51:09 -04:00
Daniel Lowrey
954eaabcf5
Make promise updates variadic (ugly)
2015-05-31 19:33:55 -04:00
Daniel Lowrey
48d8aaf0e5
Correctly clear UvReactor once() watchers
2015-05-31 12:06:25 -04:00
Daniel Lowrey
31f21da9e9
Improve Deferred performance switching
2015-05-27 22:03:08 -04:00
Daniel Lowrey
0c4f04c6ab
Fix missing parameter if coroutine invoked without args
2015-05-27 18:33:57 -04:00
Bob Weinand
6c440b2797
Fix fatal error upon wrong key type
2015-05-27 23:36:22 +02:00
Daniel Lowrey
05e3ecc423
Fix bug incorrectly clearing repeat watcher when disabled
2015-05-26 03:03:32 -04:00
Daniel Lowrey
5e7d6ff095
Fix coroutine fatal if initial advance errored
2015-05-25 12:51:50 -04:00
Daniel Lowrey
0c0395f7a0
Fix UvReactor bugs
2015-05-25 12:47:04 -04:00
Daniel Lowrey
f024061d22
Fix buggy PromiseStream behavior
2015-05-23 16:46:55 -04:00
Daniel Lowrey
35a601964e
don't use 0b constant values because bitwise comparisons aren't used
2015-05-20 21:28:34 -04:00
Daniel Lowrey
e8ac57db31
make function name consistent with others
2015-05-20 20:09:30 -04:00
Daniel Lowrey
29cde175b3
Minor coroutine resolution updates
2015-05-20 19:51:03 -04:00
Daniel Lowrey
c86d6cc930
don't swallow caught exception
2015-05-20 18:29:45 -04:00
Daniel Lowrey
0255049bbb
Don't use php7 ReflectionGenerator in PHP5.x branch
2015-05-20 18:19:23 -04:00
Daniel Lowrey
e6f1386b31
Fix double promisor resolve under error condition
2015-05-20 18:16:42 -04:00
Daniel Lowrey
71f9687cff
Reactor watcher option "callback_data" renamed "cb_data"
2015-05-20 15:21:59 -04:00
Daniel Lowrey
c7e4e8d0c3
Miscellaneous function changes (more after jump)
...
- Combinator functions optimized for performance
- Amp\reactor() now accepts an optional assignment parameter for
modifying the global default event reactor instance to allow for
third-party Reactor implementations.
- Renamed functions:
. Amp\getReactor() -> Amp\reactor()
- Removed functions:
. Amp\chooseReactor()
. Amp\tick()
. Amp\immediately()
. Amp\once()
. Amp\repeat()
. Amp\onReadable()
. Amp\onWritable()
. Amp\onSignal()
. Amp\enable()
. Amp\disable()
. Amp\cancel()
2015-05-20 15:18:30 -04:00
Daniel Lowrey
9fa6010f19
Optimize non-promise pipe() case
2015-05-19 23:12:32 -04:00
Daniel Lowrey
c8d6a0b5b3
Optimize coroutine resolution for performance
2015-05-19 23:07:29 -04:00
Daniel Lowrey
fc600d46ab
Pass optional data parameter to when/watch callbacks
2015-05-19 18:49:38 -04:00
Daniel Lowrey
879b1229d1
Minor PromiseStream fixes
2015-05-19 16:20:53 -04:00
Daniel Lowrey
ca82ac5362
Fix NativeReactor bug breaking tick sleep timing
2015-05-19 16:13:53 -04:00
Daniel Lowrey
44d52cdf2f
Rename AMP_DEBUG -> AMP_PRODUCTION_MODE
2015-05-19 14:56:22 -04:00
Daniel Lowrey
de905a6104
Correct Pause implementation for use with new trait system
2015-05-19 14:10:53 -04:00
Daniel Lowrey
7e16326871
remove scalar typehint from 5.x-compatible code
2015-05-19 14:05:41 -04:00
Daniel Lowrey
e3e01c993c
Add Amp\Streamable interface for buffered generator resolution
2015-05-19 12:03:26 -04:00
Daniel Lowrey
2a0486cb3c
Add Amp\pipe() function to pipe eventual results through a functor
2015-05-19 11:31:01 -04:00
Daniel Lowrey
30245d6817
Add optional callback data param in Deferred::__construct()
2015-05-19 11:16:04 -04:00
Daniel Lowrey
1ed5e69c52
Move buffering to PromiseStream for custom behavior in extended instances
2015-05-19 01:09:23 -04:00
Daniel Lowrey
68719d8023
Unresolved -> PrivatePlaceholder
2015-05-19 00:29:27 -04:00
Daniel Lowrey
953c4612e6
Future -> Deferred
2015-05-19 00:21:33 -04:00
Daniel Lowrey
3af013d418
Expose boolean AMP_DEBUG for performance tuning
...
Amp Future instances double both as Promisor and Promise
implementations when AMP_DEBUG is defined and set to false.
This switch allows private Promise resolution safety by
default at the expense of performance.
Amp applications should set AMP_DEBUG to false in production
environments to maximize performance.
2015-05-18 23:57:34 -04:00
Daniel Lowrey
0973bba5ef
Add PromiseStream to stream Promise updates without callback hell
2015-05-18 17:39:09 -04:00
Daniel Lowrey
02e85b29c6
Fix high cpu usage in timer loop from broken "nextTimerAt" caching
2015-05-18 11:40:09 -04:00
Daniel Lowrey
aa27ab7a10
Fixed bug causing every NativeReactor tick to last one second (lol)
2015-05-17 19:52:41 -04:00
Daniel Lowrey
631a6089d9
Resolve correct Success arg in empty any\(\) combinator
2015-05-15 15:59:57 -04:00
Daniel Lowrey
93eb8ad8de
Suggest nearby property name in Struct error messages
2015-05-13 10:05:56 -04:00
Daniel Lowrey
2c3a3e65bd
Add offending generator key to coroutine resolution error messages
2015-05-13 01:15:35 -04:00
Daniel Lowrey
4a45502ae9
Correctly update nextTimerAt timestamp for repeat watchers
2015-05-10 02:36:39 -04:00
Daniel Lowrey
ed6084c333
Fix incorrect additional increment
2015-05-10 00:54:02 -04:00
Daniel Lowrey
cddb8e9f08
Backport API changes to 5.5+ compat
2015-05-04 12:48:29 -04:00
Daniel Lowrey
b9819d85b4
kill reference to removed function
2015-04-29 13:45:06 -04:00
Daniel Lowrey
06981ab6ea
fix bad anon class syntax
2015-04-29 11:24:26 -04:00
Daniel Lowrey
1565e23d46
replace call_user_func() reference
2015-04-27 14:33:41 -04:00
Daniel Lowrey
7cb09edf29
Use anonymous classes
2015-04-27 14:33:17 -04:00
Daniel Lowrey
446eded441
Remove superfluous parameter
2015-04-27 14:30:07 -04:00
Daniel Lowrey
60f1b4484e
update docblock
2015-04-03 12:52:17 -04:00
Daniel Lowrey
812e1fb6b4
Reactor API updates, NativeReactor refactor
2015-04-03 11:56:16 -04:00
Daniel Lowrey
2aa4c0c357
Remove libevent reactor until pecl/libevent supports php7
2015-04-03 11:55:23 -04:00
Daniel Lowrey
b57f6eb6bf
Add explanatory comment
2015-03-28 10:05:09 -04:00
Daniel Lowrey
fa080b66aa
Remove superfluous is_object() check
2015-03-28 10:03:27 -04:00
Daniel Lowrey
9a1581c91d
Bind local vars to closure
2015-03-25 14:17:26 -04:00
Daniel Lowrey
654e82f277
minor cleanup
2015-03-23 11:07:40 -04:00
Daniel Lowrey
6375cdd522
Minor documentation rewording
2015-03-19 12:01:09 -04:00
Daniel Lowrey
abd5d34d92
Remove deprecated ReactorFactory
2015-03-19 11:59:20 -04:00
Daniel Lowrey
203855d22c
minor docblock update
2015-03-19 11:39:57 -04:00
Daniel Lowrey
d1b919d9fc
Avoid extra Closure instantiation in PrivateFuture
2015-03-19 11:39:38 -04:00
Daniel Lowrey
68185a6cf1
Promisor::update() now accepts variadic args
2015-03-19 11:26:56 -04:00
Daniel Lowrey
cd84401b6f
Remove superfluous Reactor::at() method
2015-03-19 11:19:19 -04:00
Daniel Lowrey
af2335cf50
Remove deprecated wait functionality
2015-03-19 11:17:50 -04:00
Daniel Lowrey
16be668192
Add scalar types, update docblocks
2015-03-19 11:15:07 -04:00
Daniel Lowrey
620f798b13
Add new Pause promise
2015-03-18 14:05:27 -04:00
Daniel Lowrey
2e1ef0b739
Implement Closure::call()
2015-03-16 15:03:52 -04:00
Daniel Lowrey
834255163c
Refactor coroutine functionality
2015-03-16 15:00:17 -04:00
Daniel Lowrey
a573e195a6
Allow null implicit yields
2015-02-18 09:53:55 -05:00
Daniel Lowrey
24acba4486
Merge branch 'psr' of https://github.com/lyrixx/amp into lyrixx-psr
2015-02-05 23:54:12 -05:00
Grégoire Pineau
01d50d10f9
Fixex typos
2015-02-05 18:17:05 +01:00
Daniel Lowrey
99e38762a7
- Added Reactor::coroutine()
method
...
- Added `Amp\coroutine()` function
- `YieldCommands` "enum" constant class removed -- yield keys now live in
the reactor class
- New optional `"coroutine"` yield key for self-documenting generator
yields.
- New optional `"async"` yield key for self-documenting promise yields.
- New `"return"` yield key for specifying the return value of a resolved
Generator coroutine. If not specified a resolved coroutine result is
equal to null.
- The final value yielded by a resolved `Generator` is *no longer* used
as its "return" value. Instead, generators must manually use the new
`"return"` yield key specifically to designate the value that should
be used to resolve the promise associated with generator resolution.
- `GeneratorResolver` trait renamed to `CoroutineResolver` and is now an
abstract class extended by the various `Reactor` implementations.
- Implicit "all" array combinator resolution is now removed. Use the
explicit form instead:
```php
function() {
list($a, $b, $c) = (yield 'all' => [$promise1, $promise2, $promise3]);
};
```
2015-02-03 19:41:15 -05:00
Daniel Lowrey
7e451251ab
Make Amp\Struct abstract to better represent its purpose
2015-01-28 22:30:02 -05:00
Daniel Lowrey
ab89cb1595
Remove unused variable
2015-01-21 20:19:47 -05:00
Daniel Lowrey
fb60221dcd
Correctly re-enable stream polls in UvReactor
2015-01-21 20:16:33 -05:00
Markus Staab
474c636845
Removed unused var
2015-01-21 23:00:41 +01:00
Bob Weinand
2ff42636aa
Fix waiting for immediates resolution
...
If there are immediates generated in immediates, they have to wait until next tick - which may only be triggered in far future or never, depending on if there are other read/writeWatchers or timers So, now just do a single event run without blocking if there are new immediates generated during immediates execution
2015-01-21 21:39:12 +01:00
Daniel Lowrey
9edef1d5a7
Fix UvReactor notices
2015-01-18 20:13:08 -05:00
Douglas G.R
cf3e13a595
Throws a RuntimeException if php-uv or libevent is not loaded.
...
Using UvReactor or LibeventReactor directly (instead of Amp\getReactor)
doesn't check if php-uv/libevent is loaded and dies with a 'Call to undefined
function' message.
2015-01-06 00:01:07 -02:00
Daniel Lowrey
a99b923819
Remove superfluous if conditional
2014-12-08 11:56:26 -05:00
Daniel Lowrey
0360aec301
Fix NativeReactor::tick() weirdness
2014-12-08 09:50:16 -05:00
Daniel Lowrey
bbfca9f7ac
Avoid unnecessary uv_timer_stop() when cleaning up once timers
2014-12-05 00:09:47 -05:00
Daniel Lowrey
49b7a73a8d
Minor libevent reactor bugfixes
2014-12-04 19:30:23 -05:00
Daniel Lowrey
b11e7a0fd1
Fix combinator function derps (again)
2014-12-04 18:08:13 -05:00
Daniel Lowrey
b93238eb1b
Fix bad instantiation class name
2014-12-04 17:59:27 -05:00
Daniel Lowrey
a8fe6e2e39
Fix combinator function derps
2014-12-04 13:34:42 -05:00
Daniel Lowrey
d795923318
Handle "@" yield key as implicit "nowait"
2014-12-02 14:47:51 -05:00
Daniel Lowrey
934d1aeffb
Return promise/result from bound functions
2014-12-02 12:43:00 -05:00
Daniel Lowrey
62de0cbc18
Implement 'bind' yield command
2014-12-02 11:52:41 -05:00
Daniel Lowrey
090bdf55ed
Rename "wait" yield command -> "pause" to avoid confusion with "nowait" and Amp\wait()
2014-12-02 11:29:19 -05:00
Daniel Lowrey
ba55ae360f
Fix minor inconsistency Reactor::stop() called from immediately watcher
2014-12-02 01:09:51 -05:00
Daniel Lowrey
dd1cbf8ca1
Merge branch 'debugInfo'
...
Conflicts:
lib/LibeventReactor.php
lib/NativeReactor.php
lib/UvReactor.php
2014-12-02 01:06:36 -05:00
Daniel Lowrey
14c209012c
Add Reactor::__debugInfo() for easier debugging
2014-12-02 00:45:12 -05:00
Daniel Lowrey
f32d088c23
Lots of changes ... see CHANGELOG for details
2014-12-01 19:45:57 -05:00
Daniel Lowrey
0d7ab5fc6c
Add Reactor::onError, correctly exit extension reactor loops, replace resolve function with trait
2014-12-01 18:12:26 -05:00
Daniel Lowrey
1480eecaba
Remove newloop protection from UvReactor
2014-12-01 15:39:57 -05:00
Daniel Lowrey
f686691892
Add Reactor::tick()
2014-11-26 15:53:18 -05:00
Daniel Lowrey
6d5e15d662
Apply boolean DeMorgan simplification
2014-11-26 15:49:14 -05:00
Chris Wright
c6b5d4fd17
Don't stop when there are immediates left
2014-11-26 17:03:18 +00:00
Daniel Lowrey
c75a8514a1
Reactor is now optional for combinator functions
2014-11-25 12:46:29 -05:00
Daniel Lowrey
0e9c4a1818
Require Reactor when instantiating Promisor implementations
2014-11-24 23:17:43 -05:00
Daniel Lowrey
1cb293b776
Remove Combinator/Resolver in favor of functions
...
This commit removes the Combinator and Resolver classes altogether.
The relevant functionality is now concentrated entirely in the
analogous functions:
- all()
- some()
- any()
- first()
- map()
- filter()
- resolve()
Additionally, all Promisor implementations now *require* a Reactor
upon instantiation. Previously this parameter could be null and the
static singleton reactor instance would be used automatically.
2014-11-24 23:14:07 -05:00
Daniel Lowrey
398c1a6790
Don't hammer the CPU with NOWAIT ticks
2014-11-18 10:08:34 -05:00
Daniel Lowrey
2d5a1eb643
Allow multiple IO watchers on a stream without borking libuv
2014-11-18 10:08:34 -05:00
Daniel Lowrey
ccc0bdcbe0
Remove unused Reactor constants
2014-11-18 10:08:34 -05:00
Daniel Lowrey
d5c494afb1
Implement safer struct usage
2014-11-18 10:08:34 -05:00
Daniel Lowrey
2a84f46853
Fix breakage if ext/openssl missing in windows
2014-11-18 10:08:34 -05:00
Daniel Lowrey
874e7dab90
Formalize resolver yield commands
2014-11-05 11:56:35 -05:00
Daniel Lowrey
c28e143828
Remove watchStream() ... aliases are bad
2014-11-05 11:50:46 -05:00
Daniel Lowrey
70222364d5
Use singleton reactor instance in functions
2014-11-04 09:46:12 -05:00
Daniel Lowrey
2fd6538e47
Fix infinite loop on nested immediately watchers in LibeventReactor
2014-10-22 22:18:34 -04:00
Daniel Lowrey
7b11a8e0c3
Rename any() -> some(), change any() to never fail
2014-10-22 18:14:43 -04:00
Daniel Lowrey
f1f967e0ce
Fix file permissions
2014-10-22 18:14:15 -04:00
Daniel Lowrey
634d978aeb
Simplify reactor onStart() callback invocation
2014-10-22 18:14:01 -04:00
Daniel Lowrey
21e7ddbff9
Add key shortcuts, fix tick starvation when resolving looped yields
2014-10-22 18:12:36 -04:00
Daniel Lowrey
d719e302a6
Fix syntax error
2014-10-20 12:08:09 -04:00
Andrey Janzen
27a0b8ff2c
add missed $func passing in map() & filter()
2014-10-15 18:07:35 +04:00
Daniel Lowrey
bd1cf64101
Use global reactor if not passed to Future::__construct()
2014-10-08 16:46:08 -04:00
Daniel Lowrey
b73a33da63
Fix bug causing immediate() callback starvation
2014-09-24 12:22:24 -04:00
Daniel Lowrey
969d15ebe8
Add Combinator class
2014-09-23 23:47:20 -04:00
Daniel Lowrey
7064ec5dc8
Migrate repo to amphp/amp
2014-09-23 00:06:03 -04:00
Daniel Lowrey
56e720cd50
Merge concurrency primitives
2014-09-22 22:21:22 -04:00
Daniel Lowrey
df47c6f09b
Use string watcher IDs
2014-08-22 14:08:31 -04:00
Daniel Lowrey
1f2420c80c
Allow access to underlying php-uv loop resource
2014-08-19 14:20:04 -04:00
Daniel Lowrey
c7c5b0ba8f
Standardize all watcher invocation params to: func($reactor, $watcherId, $data)
2014-08-09 10:30:32 -04:00
Daniel Lowrey
92f1ae05f5
Use writability hack to improve zero-delay repeating UV watchers
2014-08-08 17:08:28 -04:00
Daniel Lowrey
609cc2ddfe
Always use fresh call stack for immediatelies in UvReactor
2014-08-08 16:39:11 -04:00
Daniel Lowrey
c1521d6d7c
Always execute immediately watchers in fresh call stack
2014-08-08 14:23:00 -04:00
Daniel Lowrey
1aa1778401
Don't invoke onStart callback in UvReactor::run() when empty
2014-08-08 14:15:23 -04:00
Daniel Lowrey
58137cdb32
Add docblocks
2014-08-08 12:26:08 -04:00
Daniel Lowrey
d71d9cd564
lowercase NULLs
2014-08-07 01:35:05 -04:00
Daniel Lowrey
2dfc44e548
Reactor::at() now accepts unix timestamp as well as strtotime() parsable string
2014-08-06 21:29:08 -04:00
Daniel Lowrey
ba70840e8b
Update documentation
2014-08-06 16:01:24 -04:00
Daniel Lowrey
75e43cdcf8
Reorder Reactor::watchStream() params
2014-08-06 15:52:43 -04:00
Daniel Lowrey
f040981bdf
Fixed bad callback declaration in UvReactor::onSignal watchers
2014-08-06 14:33:27 -04:00
Daniel Lowrey
0dfac49cd2
Fix minor screwups, normalize casing, etc
2014-08-06 14:26:03 -04:00
Daniel Lowrey
15b7b4ad80
Add UvReactor signal handling support
2014-08-06 00:32:13 -04:00
Daniel Lowrey
b375f048d4
Fix UvReactor memory leak where one-time watchers were never cleared
2014-08-06 00:25:47 -04:00
Daniel Lowrey
5878430a0c
Update Reactor WATCH constants, remove Reactor::POLL_SOCK
2014-08-06 00:25:47 -04:00
Daniel Lowrey
d0e98a1498
minor cleanup
2014-08-02 02:10:31 -04:00
Daniel Lowrey
9f9a2d8b6b
Cache static resources to minimize call overhead, add documentation
2014-08-02 02:09:39 -04:00
Daniel Lowrey
c3650dce88
Fixed really epic syntax fail
2014-08-02 01:09:07 -04:00
Daniel Lowrey
6777532a66
Added functions, reactor globals
2014-08-01 15:37:02 -04:00
Daniel Lowrey
d5b6266a82
Pass Reactor instance to onStart callbacks
2014-07-18 16:56:02 -04:00
Daniel Lowrey
bbd2ca2075
Add libuv php-uv event reactor
2014-06-11 12:33:15 -04:00
Daniel Lowrey
c2b311eebb
Miscellaneous changes
2014-06-11 12:24:46 -04:00
Daniel Lowrey
2f039ac6d2
SignalReactor doc updates
2014-06-11 11:01:46 -04:00
Daniel Lowrey
4ad6dae260
Clear stop exception before throwing
2014-06-11 10:16:22 -04:00
Daniel Lowrey
4fda4967b2
Fix broken Reactor::at millisecond resolutions
2014-06-11 10:08:19 -04:00
Daniel Lowrey
b0a76277bb
Fix endless native loop when no watchers remain
2014-06-11 10:03:44 -04:00
Daniel Lowrey
1762f9d69d
Remove concurrency primitives (moved to separate repo)
2014-04-27 00:17:40 -04:00
Daniel Lowrey
d48db61ea9
Use mutable Promisor by default
2014-04-25 22:30:01 -04:00
Daniel Lowrey
3b2feb82bc
Add SignalHandler interface
2014-04-22 23:12:05 -04:00
Daniel Lowrey
c4c65027dd
Removed unnecessary clutter
2014-04-22 20:49:05 -04:00
Daniel Lowrey
62c3503abb
Add libevent onSignal handler
2014-04-22 20:45:20 -04:00
Daniel Lowrey
7b351454f9
Minor edge-case updates
2014-04-14 17:06:08 -04:00
Daniel Lowrey
16c17244e8
Add preliminary future combinators
2014-04-09 10:37:29 -04:00
Daniel Lowrey
6a613c7356
Add immutable Failure/Success futures
2014-04-09 10:34:28 -04:00
Daniel Lowrey
89c78dab6b
Unresolved is now the default pending future implementation
2014-04-09 10:33:50 -04:00
Daniel Lowrey
8a193b1a8e
Future is now an interface
2014-04-09 10:32:07 -04:00
Daniel Lowrey
885969ff84
Time intervals now expressed in milliseconds (was seconds)
2014-03-07 12:02:03 -05:00
Daniel Lowrey
bdd340c3f3
Trim Promise/Future API down to the essentials
2014-03-06 21:34:58 -05:00
Daniel Lowrey
aed5c84c03
Add Future/Promise implementation
2014-03-06 11:47:50 -05:00
Daniel Lowrey
861cb58023
File structure reorganization
2014-03-06 09:53:16 -05:00