From d96c30d2cdb27c9314474b8902f70fe69d88119b Mon Sep 17 00:00:00 2001 From: "Matteo Nastasi (mop)" Date: Thu, 5 Jul 2012 08:06:15 +0200 Subject: [PATCH] sac-a-push daemon added to the current brisk tree --- INSTALL.sh | 4 + web/spush/.htaccess | 3 + web/spush/brisk-spush.phh | 27 ++++ web/spush/brisk-spush.php | 318 ++++++++++++++++++++++++++++++++++++++ web/spush/sac-a-push.phh | 53 +++++++ 5 files changed, 405 insertions(+) create mode 100644 web/spush/.htaccess create mode 100644 web/spush/brisk-spush.phh create mode 100755 web/spush/brisk-spush.php create mode 100644 web/spush/sac-a-push.phh diff --git a/INSTALL.sh b/INSTALL.sh index df595c9..d31f1e1 100755 --- a/INSTALL.sh +++ b/INSTALL.sh @@ -5,6 +5,9 @@ # CONFIG_FILE="$HOME/.brisk_install" +apache_path="/etc/apache2/sites-available/" +apache_conf="default" + players_n=3 tables_n=44 tables_auth_n=12 @@ -280,6 +283,7 @@ done for i in $(find web -name '.htaccess' -o -name '*.php' -o -name '*.phh' -o -name '*.pho' -o -name '*.css' -o -name '*.js' -o -name '*.mp3' -o -name '*.swf' | sed 's/^....//g'); do install -m 644 "web/$i" "${web_path}__/$i" done +chmod 755 "${web_path}__/spush/brisk-spush.php" if [ $players_n -eq 5 ]; then send_time=250 diff --git a/web/spush/.htaccess b/web/spush/.htaccess new file mode 100644 index 0000000..481dad6 --- /dev/null +++ b/web/spush/.htaccess @@ -0,0 +1,3 @@ +Order Deny,Allow +Deny from All + diff --git a/web/spush/brisk-spush.phh b/web/spush/brisk-spush.phh new file mode 100644 index 0000000..0038038 --- /dev/null +++ b/web/spush/brisk-spush.phh @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/web/spush/brisk-spush.php b/web/spush/brisk-spush.php new file mode 100755 index 0000000..7d893da --- /dev/null +++ b/web/spush/brisk-spush.php @@ -0,0 +1,318 @@ +#!/usr/bin/php +id = $id; + $this->cnt = -1; + $this->sock = NULL; + } + + function enable($sock, $sess) + { + $this->sess = $sess; + $this->cnt = 0; + $this->sock = $sock; + + return ($this->id); + } + + function disable() + { + $this->cnt = -1; + $this->sock = NULL; + } + + function is_enable() + { + return ($this->cnt < 0 ? FALSE : TRUE); + } + + function sock_get() + { + return $this->sock; + } + + function sock_set($sock) + { + $this->sock = $sock; + } + + function id_get() + { + return $this->id; + } + + function sess_get() + { + return $this->sess; + } + + function cnt_get() + { + return $this->cnt; + } + + function cnt_inc() + { + return $this->cnt++; + } +} + +function user_get_free($user_arr) +{ + foreach ($user_arr as $i => $user) { + if (!$user->is_enable()) { + return ($user); + } + } + return FALSE; +} + +function user_get_sess($user_arr, $sess) +{ + foreach ($user_arr as $i => $user) { + printf("SESS: [%s] cur: [%s]\n", $user->sess_get(), $sess); + if ($user->sess_get() == $sess) { + return ($user); + } + } + return FALSE; +} + + +function shutta() +{ + log_rd2("SHUTTA [".connection_status()."] !"); +} + +register_shutdown_function(shutta); + +/* + * MAIN + */ +$shutdown = FALSE; + +function main() +{ + GLOBAL $G_lang, $mlang_indrd, $is_page_streaming; + // GLOBAL $first_loop; + GLOBAL $G_with_splash, $G_splash_content, $G_splash_interval, $G_splash_idx; + GLOBAL $G_splash_w, $G_splash_h, $G_splash_timeout; + $CO_splashdate = "CO_splashdate".$G_splash_idx; + GLOBAL $$CO_splashdate; + + GLOBAL $S_load_stat; + + + + GLOBAL $shutdown; + $main_loop = TRUE; + + $user_a = array(); + $s2u = array(); + for ($i = 0 ; $i < 10 ; $i++) { + $user_a[$i] = new SPUser($i, 0, NULL); + } + + $rndstr = ""; + for ($i = 0 ; $i < 4096 ; $i++) { + $rndstr .= chr(mt_rand(65, 90)); + } + + $FILE_SOCKET = "/tmp/test001.sock"; + $UNIX_SOCKET = "unix://$FILE_SOCKET"; + $debug = 0; + $fixed_fd = 2; + + $blocking_mode = 0; // 0 for non-blocking + + if (file_exists($FILE_SOCKET)) { + unlink($FILE_SOCKET); + } + + $old_umask = umask(0); + if (($list = stream_socket_server($UNIX_SOCKET, $err, $errs)) === FALSE) { + exit(11); + } + umask($old_umask); + + $socks = array(); + + if (($in = fopen("php://stdin", "r")) === FALSE) { + exit(11); + } + + stream_set_blocking($list, $blocking_mode); # Set the stream to non-blocking + + while ($main_loop) { + echo "IN LOOP\n"; + /* Prepare the read array */ + if ($shutdown) + $read = array_merge(array("$in" => $in), $socks); + else + $read = array_merge(array("$list" => $list, "$in" => $in), $socks); + + if ($debug > 1) { + printf("PRE_SELECT\n"); + print_r($read); + } + $write = NULL; + $except = NULL; + $num_changed_sockets = stream_select($read, $write, $except, 5); + + if ($num_changed_sockets === FALSE) { + printf("No data in 5 secs"); + } + else if ($num_changed_sockets > 0) { + printf("num sock %d num_of_socket: %d\n", $num_changed_sockets, count($read)); + if ($debug > 1) { + print_r($read); + } + /* At least at one of the sockets something interesting happened */ + foreach ($read as $i => $sock) { + if ($sock === $list) { + printf("NUOVA CONNEX\n"); + $new_unix = stream_socket_accept($list); + $stream_info = ""; + if (($new_socket = ancillary_getstream($new_unix, $stream_info)) !== FALSE) { + printf("RECEIVED HEADER:\n%s", $stream_info); + $m = spu_process_info($stream_info, $header, $get, $post); + printf("M: %s\nHEADER:\n", $m); + print_r($header); + printf("GET:\n"); + print_r($get); + printf("POST:\n"); + print_r($post); + + /* TODO: here stuff to decide if it is old or new user */ + if (($user_cur = user_get_sess($user_a, $get['sess'])) != FALSE) { + /* close the previous socket */ + unset($s2u[intval($user_cur->sock_get())]); + unset($socks[intval($user_cur->sock_get())]); + fclose($user_cur->sock_get()); + /* assign the new socket */ + $user_cur->sock_set($new_socket); + $id = $user_cur->id_get(); + $s2u[intval($new_socket)] = $id; + $socks[intval($new_socket)] = $new_socket; + fwrite($new_socket, $rndstr); + fflush($new_socket); + } + else if (($user_cur = user_get_free($user_a)) != FALSE) { + stream_set_blocking($new_socket, $blocking_mode); // Set the stream to non-blocking + $socks[intval($new_socket)] = $new_socket; + + $id = $user_cur->id_get(); + $user_a[$id]->enable($new_socket, $get['sess']); + printf("s2u: ci passo %d\n", intval($new_socket)); + $s2u[intval($new_socket)] = $id; + + fwrite($new_socket, $rndstr); + fflush($new_socket); + } + else { + printf("Too many opened users\n"); + fclose($new_socket); + } + } + else { + printf("WARNING: ancillary_getstream failed\n"); + } + } + else { + if (($buf = fread($sock, 512)) === FALSE) { + printf("error read\n"); + exit(123); + } + else if (strlen($buf) === 0) { + if ($sock === $list) { + printf("Arrivati %d bytes da list\n", strlen($buf)); + } + else if ($sock === $in) { + printf("Arrivati %d bytes da stdin\n", strlen($buf)); + } + else { + unset($socks[intval($sock)]); + $user_a[$s2u[intval($sock)]]->disable(); + unset($s2u[intval($sock)]); + fclose($sock); + } + if ($debug > 1) { + printf("post unset\n"); + print_r($socks); + } + } + else { + if ($debug > 1) { + print_r($read); + } + if ($sock === $list) { + printf("Arrivati %d bytes da list\n", strlen($buf)); + } + else if ($sock === $in) { + printf("Arrivati %d bytes da stdin\n", strlen($buf)); + } + else { + $key = array_search("$sock", $socks); + printf("Arrivati %d bytes dalla socket n. %d\n", strlen($buf), $key); + } + } + } + } + } + + + + + + + if (0 == 1) { // WRITE PART EXAMPLE + // sleep(3); + foreach ($socks as $k => $sock) { + fwrite($sock, sprintf("DI QUI CI PASSO [%d]\n", $user_a[$s2u[intval($sock)]]->cnt_inc())); + fflush($sock); + } + } + } + + exit(0); +} + +main(); +?> \ No newline at end of file diff --git a/web/spush/sac-a-push.phh b/web/spush/sac-a-push.phh new file mode 100644 index 0000000..8dfea84 --- /dev/null +++ b/web/spush/sac-a-push.phh @@ -0,0 +1,53 @@ + 1) { + $a = explode('&', $get_vars[1]); + printf("A COUNT: [%s] %d\n", $a[0], count($a)); + for ($i = 0 ; $i < count($a) ; $i++) { + $b = explode('=', $a[$i]); + $get[$b[0]] = urldecode($b[1]); + } + } + // POST params management + if ($req[0] == 'POST') { + if ($header['Content-Type'] != 'application/x-www-form-urlencoded' + || !isset($header['Content-Length'])) { + return FALSE; + } + $post_len = mb_strlen($line, "latin1"); + $a = explode('&', $line); + for ($i = 0 ; $i < count($a) ; $i++) { + $b = explode('=', $a[$i]); + $post[$b[0]] = urldecode($b[1]); + } + printf("INFO: postlen: %d\n", $post_len); + } + break; + } + if ($line == "") { + $check_post = TRUE; + continue; + } + $split = explode(":", $line, 2); + $header[$split[0]] = $split[1]; + } + return $method; +} + +?> \ No newline at end of file -- 2.17.1