X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fsac-a-push.phh;h=b931340b629509d865c78d620dc58286cd0f7215;hb=9c35bacfc8208c5201dd2db7821921fd23ba3c08;hp=5d62a37f701121f063eb7f1cfe69b2658ba6a89f;hpb=440015e75749093a64016809118e64572a2ba99e;p=brisk.git diff --git a/web/Obj/sac-a-push.phh b/web/Obj/sac-a-push.phh index 5d62a37..b931340 100644 --- a/web/Obj/sac-a-push.phh +++ b/web/Obj/sac-a-push.phh @@ -1,6 +1,6 @@ s2u = array(); $thiz->pages_flush = array(); + // create a couple of sockets for control management + if (($sockpair = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, + STREAM_IPPROTO_IP)) == FALSE) { + return FALSE; + } + static::$cnt_master = $sockpair[0]; + static::$cnt_slave = $sockpair[1]; + + pcntl_signal(SIGTERM, array("Sac_a_push", "sig_handler")); + pcntl_signal(SIGINT, array("Sac_a_push", "sig_handler")); + pcntl_signal(SIGHUP, array("Sac_a_push", "sig_handler")); + $thiz->blocking_mode = 0; // 0 for non-blocking $thiz->rndstr = ""; for ($i = 0 ; $i < 4096 ; $i++) { if (($i % 128) == 0) - $thiz->rndstr .= "\n"; + $thiz->rndstr .= " "; else $thiz->rndstr .= chr(mt_rand(65, 90)); } @@ -414,7 +519,17 @@ class Sac_a_push { function run() { - GLOBAL $DOCUMENT_ROOT, $HTTP_HOST, $G_with_splash; + GLOBAL $DOCUMENT_ROOT, $HTTP_HOST; + + GLOBAL $G_alarm_passwd, $G_black_list, $G_btrace_pref_sub, $G_dbauth; + GLOBAL $G_dbpfx, $G_donors_all, $G_donors_cur, $G_is_local, $G_lang; + GLOBAL $G_poll_entries, $G_poll_name, $G_poll_title, $G_proxy_white_list; + GLOBAL $G_room_roadmap, $G_shutdown, $G_sidebanner, $G_sidebanner2; + GLOBAL $G_splash_content, $G_splash_contents, $G_splash_cont_idx; + GLOBAL $G_splash_h, $G_splash_idx, $G_splash_interval, $G_splash_timeout; + GLOBAL $G_splash_w, $G_topbanner, $G_with_donors, $G_with_poll; + GLOBAL $G_with_sidebanner, $G_with_sidebanner2, $G_with_splash; + GLOBAL $G_with_topbanner; if ($this->main_loop) { return (FALSE); @@ -431,7 +546,8 @@ class Sac_a_push { /* if ($shutdown) */ /* $read = array_merge(array("$in" => $in), $socks); */ /* else */ - $read = array_merge(array(intval($this->list) => $this->list, intval($this->in) => $this->in), + $read = array_merge(array(intval($this->list) => $this->list, intval($this->in) => $this->in, + intval(static::$cnt_slave) => static::$cnt_slave), $this->socks); if ($this->debug > 1) { @@ -440,7 +556,7 @@ class Sac_a_push { } $write = NULL; $except = NULL; - $num_changed_sockets = stream_select($read, $write, $except, 0, 500000); + $num_changed_sockets = @stream_select($read, $write, $except, 0, 500000); if ($num_changed_sockets == 0) { printf(" no data in 5 secs, splash [%d]\n", $G_with_splash); @@ -510,11 +626,11 @@ class Sac_a_push { } if ($sock === $this->list) { printf("Arrivati %d bytes da list\n", strlen($buf)); - exit(21); + return(21); } - else if ($sock === $this->in) { + else if ($sock === $this->in || $sock === static::$cnt_slave) { printf("Arrivati %d bytes da stdin\n", strlen($buf)); - exit(22); + return(22); } else { // $user_a[$s2u[intval($sock)]]->disable(); @@ -539,11 +655,21 @@ class Sac_a_push { if ($sock === $this->list) { printf("Arrivati %d bytes da list\n", strlen($buf)); } - else if ($sock === $this->in) { + else if ($sock === $this->in || $sock === static::$cnt_slave) { printf("Arrivati %d bytes da stdin\n", strlen($buf)); $line = trim($buf); if ($line == "reload") { require("$DOCUMENT_ROOT/Etc/".BRISK_CONF); + + global_dump(); + } + else if ($line == "shutdown") { + if ($this->app->dump_data()) { + return(0); + } + else { + return(1); + } } } else {