HTTP_EMPTY_ARGS(next, 0);
HTTP_EMPTY_ARGS(rewind, 0);
+HTTP_EMPTY_ARGS(getAttachedRequests, 0);
+HTTP_EMPTY_ARGS(getFinishedRequests, 0);
+
#define http_requestpool_object_declare_default_properties() _http_requestpool_object_declare_default_properties(TSRMLS_C)
static inline void _http_requestpool_object_declare_default_properties(TSRMLS_D);
HTTP_REQPOOL_ME(key, ZEND_ACC_PUBLIC)
HTTP_REQPOOL_ME(next, ZEND_ACC_PUBLIC)
HTTP_REQPOOL_ME(rewind, ZEND_ACC_PUBLIC)
+
+ HTTP_REQPOOL_ME(getAttachedRequests, ZEND_ACC_PUBLIC)
+ HTTP_REQPOOL_ME(getFinishedRequests, ZEND_ACC_PUBLIC)
EMPTY_FUNCTION_ENTRY
};
efree(o);
}
+#define http_requestpool_object_llist2array _http_requestpool_object_llist2array
+static void _http_requestpool_object_llist2array(zval **req, zval *array TSRMLS_DC)
+{
+ zval_add_ref(req);
+ Z_OBJ_ADDREF_PP(req);
+ add_next_index_zval(array, *req);
+}
+
/* ### USERLAND ### */
/* {{{ proto void HttpRequestPool::__construct([HttpRequest request[, ...]])
* Usage:
* <pre>
* <?php
- * while ($pool->socketPerform()) {
- * do_something_else();
- * if (!$pool->socketSelect()) {
- * die('Socket error');
+ * class MyPool extends HttpRequestPool
+ * {
+ * public function send()
+ * {
+ * while ($this->socketPerform()) {
+ * $this->handleRequests();
+ * if (!$this->socketSelect()) {
+ * throw new HttpSocketExcpetion;
+ * }
+ * }
+ * $this->handleRequests();
+ * }
+ *
+ * private function handleRequests()
+ * {
+ * foreach ($this->getFinishedRequests() as $r) {
+ * $this->detach($r);
+ * // handle response of finished request
* }
* }
+ * }
* ?>
* </pre>
*/
if (0 < http_request_pool_perform(&obj->pool)) {
RETURN_TRUE;
} else {
- zend_llist_apply(&obj->pool.handles, (llist_apply_func_t) http_request_pool_responsehandler TSRMLS_CC);
RETURN_FALSE;
}
}
}
/* }}} */
+/* {{{ proto array HttpRequestPool::getAttachedRequests()
+ *
+ * Get attached HttpRequest objects.
+ *
+ * Returns an array containing all currently attached HttpRequest objects.
+ */
+PHP_METHOD(HttpRequestPool, getAttachedRequests)
+{
+ getObject(http_requestpool_object, obj);
+
+ NO_ARGS;
+
+ array_init(return_value);
+ zend_llist_apply_with_argument(&obj->pool.handles,
+ (llist_apply_with_arg_func_t) http_requestpool_object_llist2array,
+ return_value TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ proto array HttpRequestPool::getFinishedRequests()
+ *
+ * Get attached HttpRequest objects that already have finished their work.
+ *
+ * Returns an array containing all attached HttpRequest objects that
+ * already have finished their work.
+ */
+PHP_METHOD(HttpRequestPool, getFinishedRequests)
+{
+ getObject(http_requestpool_object, obj);
+
+ NO_ARGS;
+
+ array_init(return_value);
+ zend_llist_apply_with_argument(&obj->pool.finished,
+ (llist_apply_with_arg_func_t) http_requestpool_object_llist2array,
+ return_value TSRMLS_CC);
+}
+/* }}} */
+
#endif /* ZEND_ENGINE_2 && HTTP_HAVE_CURL */
/*