以降は、バージョン4用サンプルで説明しています。
クライアント自身のタイマーで追い出す方法になります。
サンプルの「CASE1_Timer」を利用します。
JavaScriptのタイマー処理を利用して、
タイムアウト時に退室するよう実装します。
//タイムアウト
function timeOut(){
console.log("timeOut");
leave();
};
//タイマー設定
function startTimer(sec){
console.log("startTimer:" + sec);
tm = setTimeout(timeOut, sec);
}
//タイマー削除
function clearTimer(){
console.log("clearTimer");
clearTimeout(tm);
}
Real-time messaging SDKを利用して他拠点にメッセージ(退室依頼を示す)を送り、
それを受け取った拠点を追い出します。
サンプルの「CASE2_RTM」を利用します。
メッセージ送信/受信の実装部分になります。
//実行ボタンクリック
function leaveOfremote () {
sendChannelMessage(prepMessage("leave",options.remoteuid));
}
//送信メッセージ編集
function prepMessage(msg,id){
console.log(id + ":" + msg);
return id + ":" + msg;
}
//メッセージ送信部分
function sendChannelMessage(localMessage){
rtc.channelRtm.sendMessage({text:localMessage}).then(function(){
console.log("AgoraRTM client succeed in sending channel message: " + localMessage);
}).catch(function(err){
console.log("AgoraRTM client failed to sending role" + err);
});
}
//メッセージ受信部分
function receiveChannelMessage(){
rtc.channelRtm.on("ChannelMessage", function (sentMessage, senderId) {
console.log("AgoraRTM client got message: " + JSON.stringify(sentMessage) + " from " + senderId);
console.log(sentMessage.text == options.uid + ":leave");
if (sentMessage.text == options.uid + ":leave"){
leave();
logoutRtm();
}
});
}
サンプルの「CASE3_Token」を利用します。
$appID = "*Consoleより取得&設定*";
$appCertificate = "*Consoleより取得&設定*";
$channelName = "demo";
$uid = 12345;
$uidStr = "12345";
$expireTimeInSeconds = 60;
レスポンスとしてTokenが画面に出力されます。(それを利用します)
function handleTokenPrivilegeDidExpire() {
leave();
console.log("onTokenPrivilegeDidExpire")
}
サンプルの「CASE4_RESTfulAPI」を利用します。
このAPIをコールすると、指定したChannelへの入室が一定時間禁止されます。
Channel(必須)とユーザID、IPアドレスの粒度で指定できます。
(*各Recording SDKの録画用ユーザ(uid)を追い出しもできます)
function handleConnectionStateChange(curState,revState,reason) {
console.log(curState + ":" + reason);
//ユーザ入室制限
if (reason == "UID_BANNED"){
leave();
}
}
<?php
require 'params.php';
$url = $baseUrl.'/v1/kicking-rule/';
$params = [
'appid' => '***', //APPID
'cname' => 'demo', //Channel名
'uid' => '', //ユーザID
'ip' => '', //IPアドレス
'time' => 3,
'privileges' => ['join_channel']
];
$json_enc = json_encode($params);
$header = array();
$header[] = 'Content-type: application/json;charset=utf-8';
$header[] = 'Authorization: Basic '.base64_encode($plainCredentials);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_enc);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
var_dump($response);
curl_close($curl);