現在リアルタイムチャットを作成中なのですが入退室時の通知について質問させていただきます。
下のような入退室中のユーザと退室したユーザーをそれぞれデータベースに格納し、
ajaxを使い変化があった時にだけphpからレスポンスを返すような形をとっていて、
phpからレスポンスを返す際に入室中のユーザーと退室したユーザーを同時に返すようにしているのですが
javascript側で入室中のユーザーと退室中ユーザーの振り分けの方法が思いつきません。
それともphp側で入室した時には入室したユーザーだけを返し
退室した時には退室したユーザーだけを返すと言った具合にphp側で振り分ければいいでしょうか
ゲロ吐くほど意味不な感じですがわかる方お願いします
php
1if (isset($_GET["state"])&&$_GET["state"]==="monitoring") { 2 //最後に入室したユーザーのidを取得 3 $sql=sprintf('SELECT m.* FROM chat_aoimembers mORDER BY m.id DESC LIMIT 1'); 4 $mems=mysqli_query($db,$sql)or die(mysqli_error($db)); 5 $mem=mysqli_fetch_assoc($mems); 6 $lastmem=$mem["id"]; 7 $newmem=$lastmem; 8 //最後にログアウトしたユーザーのidを取得 9 $sql2=sprintf('SELECT o.* FROM chat_aoioutmembers o ORDER BY o.out_id DESC LIMIT 1'); 10 $outmems=mysqli_query($db,$sql2)or die(mysqli_error($db)); 11 $outmem=mysqli_fetch_assoc($outmems); 12 $lastoutmem=$outmem["out_id"]; 13 $newoutmem=$lastoutmem; 14 //変化があるまで待機 15 while($newmem===$lastmem||$newoutmem===$lastoutmem){ 16 set_time_limit(0); 17 $sql=sprintf('SELECT m.* FROM chat_aoimembers m 18 ORDER BY m.id DESC LIMIT 1'); 19 $mems=mysqli_query($db,$sql)or die(mysqli_error($db)); 20 $mem=mysqli_fetch_assoc($mems); 21 $newmem=$mem["id"]; 22 23 $sql2=sprintf('SELECT o.* FROM chat_aoioutmembers o 24 ORDER BY o.out_id DESC LIMIT 1'); 25 $outmems=mysqli_query($db,$sql2)or die(mysqli_error($db)); 26 $outmem=mysqli_fetch_assoc($outmems); 27 $newoutmem=$outmem["out_id"]; 28 $i++; 29 session_write_close(); 30 sleep(1); 31 //もし変化があった場合レスポンスを返す 32 if ($newmem!==$lastmem||$newoutmem!==$lastoutmem||$i===30) { 33 $sql=sprintf('SELECT m.* FROM chat_aoimembers m 34 ORDER BY m.id DESC '); 35 $mems=mysqli_query($db,$sql) or die(mysqli_error($db)); 36 while($mem=mysqli_fetch_assoc($mems)){//入室中の全ユーザーを配列に格納 37 $member[]=array( 38 'postnum'=>5, 39 'membernum'=>$mem['id'], 40 'membername'=>$mem['name'], 41 'logintime'=>$mem['created'] 42 ); 43 } 44 45 $sql2=sprintf('SELECT o.* FROM 46 chat_aoioutmembers o ORDER BY o.out_id DESC LIMIT 1'); 47 $outmems=mysqli_query($db,$sql2)or die(mysqli_error($db)); 48 $outmem=mysqli_fetch_assoc($outmems); 49 //退室したユーザーを取得 50 $outmember[]=array('postnum' => 6, 51 'outnum'=>$outmem["out_id"], 52 'outmem' =>$outmem["out_name"] 53 ); 54 //上で取得した入室中のユーザー($member)と退室したユーザー($outmember)を配列に格納 55 $memstate[]=array('in'=>$member, 56 'out'=>$outmember); 57 header(' Content-type:application/json; charset=utf-8 ' ); 58 header(' X-Content-Type-Option:nosniff ' ); 59 echo json_encode( 60 $memstate,JSON_HEX_TAG | JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | 61 JSON_HEX_QUOT | JSON_HEX_AMP 62 ); 63 break; 64 } 65 } 66 }
あなたの回答
tips
プレビュー