-
- $this->main_loop = TRUE;
-
- while ($this->main_loop) {
- $curtime = time();
- printf("IN LOOP: Current opened: %d pages_flush: %d\n", count($this->socks), count($this->pages_flush));
-
- /* Prepare the read array */
- /* // when we manage it ... */
- /* if ($shutdown) */
- /* $read = array_merge(array("$in" => $in), $socks); */
- /* else */
- $read = array_merge(array(intval($this->list) => $this->list, intval($this->in) => $this->in),
- $this->socks);
-
- if ($this->debug > 1) {
- printf("PRE_SELECT\n");
- print_r($read);
- }
- $write = NULL;
- $except = NULL;
- $num_changed_sockets = stream_select($read, $write, $except, 0, 250000);
-
- if ($num_changed_sockets == 0) {
- printf("No data in 5 secs\n");
- }
- else if ($num_changed_sockets > 0) {
- printf("num sock %d num_of_socket: %d\n", $num_changed_sockets, count($read));
- if ($this->debug > 1) {
- print_r($read);
- }
- /* At least at one of the sockets something interesting happened */
- foreach ($read as $i => $sock) {
- /* is_resource check is required because there is the possibility that
- during new request an old connection is closed */
- if (!is_resource($sock)) {
- continue;
- }
- if ($sock === $this->list) {
- printf("NUOVA CONNEX\n");
- $new_unix = stream_socket_accept($this->list);
- $stream_info = "";
- $method = "";
- $get = array();
- $post = array();
- $cookie = array();
- if (($new_socket = ancillary_getstream($new_unix, $stream_info)) !== FALSE) {
- stream_set_blocking($new_socket, $this->blocking_mode); // Set the stream to non-blocking
- printf("RECEIVED HEADER:\n%s", $stream_info);
- $path = spu_process_info($stream_info, $method, $header, $get, $post, $cookie);
- printf("PATH: [%s]\n", $path);
- printf("M: %s\nHEADER:\n", $method);
- print_r($header);
- printf("GET:\n");
- print_r($get);
- printf("POST:\n");
- print_r($post);
- printf("COOKIE:\n");
- print_r($cookie);
-
- $addr = stream_socket_get_name($new_socket, TRUE);
- $header_out = array();
-
- switch ($path) {
- case SITE_PREFIX:
- case SITE_PREFIX."index.php":
- ob_start();
- index_main($this->room, $header_out, $addr, $get, $post, $cookie);
- $content = ob_get_contents();
- ob_end_clean();
-
- $pgflush = new PageFlush($new_socket, $curtime, 20, $header_out, $content);
-
- if ($pgflush->try_flush($curtime) == FALSE) {
- // Add $pgflush to the pgflush array
- array_push($this->pages_flush, $pgflush);
- }
-
- break;
- case SITE_PREFIX."index_wr.php":
- ob_start();
- index_wr_main($this->room, $addr, $get, $post, $cookie);
- $content = ob_get_contents();
- ob_end_clean();
-
- $pgflush = new PageFlush($new_socket, $curtime, 20, $header_out, $content);
-
- if ($pgflush->try_flush($curtime) == FALSE) {
- // Add $pgflush to the pgflush array
- array_push($this->pages_flush, $pgflush);
- }
- break;
- case SITE_PREFIX."index_rd_ifra.php":
- do {
- if (!isset($cookie['sess'])
- || (($user = $this->room->get_user($cookie['sess'], $idx)) == FALSE)) {
- $content = User::stream_fini(TRUE);
-
- $pgflush = new PageFlush($new_socket, $curtime, 20, $header_out, $content);
-
- if ($pgflush->try_flush($curtime) == FALSE) {
- // Add $pgflush to the pgflush array
- array_push($this->pages_flush, $pgflush);
- }
- break;
- }
- // close a previous opened index_read_ifra socket, if exists
- if (($prev = $user->rd_socket_get()) != NULL) {
- unset($this->s2u[intval($user->rd_socket_get())]);
- unset($this->socks[intval($user->rd_socket_get())]);
- fclose($user->rd_socket_get());
- printf("CLOSE AND OPEN AGAIN ON IFRA2\n");
- $user->rd_socket_set(NULL);
- }
-
- $content = "";
- $user->stream_init($header_out, $content, $get, $post, $cookie);
-
- $response = headers_render($header_out, -1).chunked_content($content);
- $response_l = mb_strlen($response, "ASCII");