/** 이미지 크기 변환 * @class file * @param $data: addFile data -dir: 복사본으로 생성할 경우 생성될 경로 -width: 이미지 너비 -height: 이미지 높이 -type: 썸네일 타입 (1일 경우 크기에 맞게 사진을 늘림) -skip_update: 쿼리 업데이트를 생략 */ function resizeImage(&$data, $param = '') { global $mini; $param = param($param); def($param['type'], 0); iss($param['width']); iss($param['height']); iss($param['dir']); // 따로 저장할 경우(i.e 썸네일) 디렉토리 생성 if (!empty($param['dir'])) { $is_thumb = 1; if (!is_dir($param['dir'])) { if (!mkdir($param['dir'], 0707)) { __error("[resizeImage: {$param['dir']}] 디렉토리를 생성할 수 없습니다"); } } } else { $param['dir'] = dirname("{$mini['dir']}{$data['url']}"); if ($param['dir']) { $param['dir'] .= "/"; } } //+debug // __error(preg_replace("/(\s|\n|\t)/", "", htmlspecialchars($image))); // __error("{$mini['pdir']}addon/phpthumb/phpThumb.php?no={$data['no']}&PHPSESSID=".session_id()."&w={$param['width']}&h={$param['height']}&iar={$param['type']}"); // 이미지 저장하기 $file_url = "{$param['dir']}" . basename($data['url']); $fp = fopen($file_url, "w+"); if ($fp) { $image = getSocket("\n\t\t\tmethod: get\n\t\t\turl: {$mini['pdir']}addon/phpthumb/phpThumb.php?no={$data['no']}&PHPSESSID=" . session_id() . "&w={$param['width']}&h={$param['height']}&iar={$param['type']}\n\t\t\tskip_header: 1\n\t\t"); fwrite($fp, $image, strlen($image)); fclose($fp); @chmod($file_url, 0777); $ins = array(); // 이미지 정보 다시 입력 if (empty($is_thumb)) { $img = getimagesize($file_url); $ins['size'] = strlen($image); $ins['width'] = $img[0]; $ins['height'] = $img[1]; $tmp_data = $ins; $tmp_data['path'] = $file_url; $ins['hash'] = getHash($tmp_data); } else { $ins['is_thumb'] = !empty($is_thumb); } if (!empty($param['skip_update'])) { return $ins; } else { sql("UPDATE {$mini['name']['file']} SET " . query($ins, 'update') . " WHERE no={$data['no']}"); return true; } } else { return false; } }
function postaction() { global $DB, $session_id, $player_id, $players_ids; $data = $_POST['data']; if ($players_ids != '') { if (strpos($players_ids, '#' . $player_id . '#') === false) { // Si on ne fait pas partie des "joueurs" (donc on est un spectateur), alors on ne participe pas activement à l'action. echo json_encode(array('id' => -1)); die; } } // TODO Vérifier l'action (à développer dans un second temps) if ($data['action'] == 'sync') { // Gérer l'action 'sync' $socket = getSocket(); stream_set_timeout($socket, 10); // Timeout de 10 secondes. $nbconnections = substr_count($players_ids, '#') - 1; fwrite($socket, $player_id . ',' . $nbconnections . "\n"); // n > 1 = On débloque tout le monde dès que n connexions ont envoyé un nombre > 1 if (fread($socket, 1) == $nbconnections) { // On est le dernier : on ajoute l'action en base connectMysql('dyn'); $DB->query("INSERT INTO actions (session_id, player_id, dateaction, actiondata) VALUES (" . $session_id . ", " . $player_id . ", NOW(), '" . addslashes(json_encode($data)) . "')"); } fwrite($socket, '1'); // On valide l'action @fclose($socket); echo json_encode(array('id' => 0)); die; } // Ajouter l'action en base connectMysql('dyn'); $DB->query("INSERT INTO actions (session_id, player_id, dateaction, actiondata) VALUES (" . $session_id . ", " . $player_id . ", NOW(), '" . addslashes(json_encode($data)) . "')"); $action_id = $DB->lastInsertId(); // "Réveiller" les autres joueurs pour leur indiquer qu'il y a une nouvelle action à lire $socket = getSocket(); stream_set_timeout($socket, 10); // Timeout de 10 secondes. fwrite($socket, $player_id . ",1\n"); // 1 = On débloque tout le monde immédiatement ! @fclose($socket); echo json_encode(array('id' => $action_id)); }
function writeSocket($stmt, $address, $port) { $socket = getSocket($address, $port); //socket_write($socket, $stmt, strlen($stmt)); socket_send($socket, $stmt, strlen($stmt), MSG_DONTROUTE); }
function readBySocket($server, $ip, $message) { // Retrieve socket number $socketNumber = getSocket($server); $socketServerNumber = getSocket("serverPHP"); // Init socket $sock1 = socket_create(AF_INET, SOCK_STREAM, 0); // create connection socket_connect($sock1, $ip, $socketNumber); // send data $message = $socketServerNumber . " 0 " . $message; socket_send($sock1, $message, strlen($message), 0); socket_close($sock1); // Create server for receiving data if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Couldn't create socket: [{$errorcode}] {$errormsg} \n"); } // Bind the source address if (!socket_bind($sock, $ip, $socketServerNumber)) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); socket_close($sock); die("Could not bind socket : [{$errorcode}] {$errormsg} \n"); } if (!socket_listen($sock, 10)) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); socket_close($sock); die("Could not listen on socket : [{$errorcode}] {$errormsg} \n"); } socket_set_nonblock($sock); //start loop to listen for incoming connections $timeout = 4000; $startMillisensond = round(microtime(true) * 1000); while (round(microtime(true) * 1000) - $startMillisensond < $timeout) { // Trick ... usleep(100); //Accept incoming connection - This is a blocking call $client = socket_accept($sock); if ($client !== FALSE) { //read data from the incoming socket $input = socket_read($client, 1024000); socket_close($sock); return $input; } usleep(100); } return "TIMEOUT"; }