Flash Media Server 4.5 (FMS) ⑨ main.ascサンプル
Flash Media Server 4.5 (FMS) ⑨ main.ascサンプル
main.ascは、FMSサーバサイドのActionScriptを記述するファイルになります。
FMSではアプリケーションごとにディレクトリを作成します。
各アプリケーションディレクトリの中に、main.ascというテキストファイルを作り、その中にスクリプトを記述します。
今回は、main.ascで行う処理のサンプルをいくつかご紹介します。
ポイント部分の処理のみ記載していますので、基本的な部分は以下の記事をご参考ください。
※FlashMediaServer4.5(FMS)の環境を利用し、簡易ビデオチャットを作成するまでの流れはこちらをご参考ください。
※main.ascの基本的な構成はこちらをご参考ください。
- 接続チェック
- 接続クライアントを表示する
処理内容
applicationに接続しているクライアント数を取得します。
また、for文内でクライアントのuserNameを表示します。main.asc側
12345c=application.clients;
trace
(c.length);
for
(a=
0
; a<c.length; ++a){
trace
(c[a].userName);
}
クライアント側
この処理は特にクライアント側と連動していません。
ただしこの処理をクライアント側から実行したいときは、後述の「クライアント側から処理を呼び出す」の処理を参考にしてください。ポイント
“userName”は、application.onConnectの引数になります。
たとえば、接続ユーザ数を表示したり、接続ユーザを3人までとするという制限をつけたい時などに使えますね。 - クライアント側から処理を呼び出す
処理内容
クライアント側からmain.ascの処理loginchkを呼び出します。
戻り値(main.ascではb、クライアント側ではcheckresult)をクライアント側で受け取ります。
main.ascの処理内部は、上述の「接続クライアントを表示する」の処理をカスタマイズしています。main.asc側
1234567891011Client.prototype.chk =
function
(un) {
var
a, b, c;
b =
0
;
c = application.clients;
for
(a=
0
; a<c.length; ++a){
if
(c[a].userName == un){
b+=
1
;
}
}
return
b;
};
クライアント側
12345678var
responder:Responder =
new
Responder(CheckResult);
nc.call(
"chk"
, responder, userName);
function
CheckResult(checkresult:
int
) {
if
(checkresult ==
0
){
trace
(
"ログインしていません"
);
}
}
処理内容
クライアント側のconnect時にuserNameとkeyを引数で渡す。
main.asc側で引数値をチェックして、接続を許可するか拒否するかを判定する。
main.asc側
1 2 3 4 5 6 7 | application.onConnect = function (objClient, userName, key) { if (userName == "" ){ application.rejectConnection(objClient); } else { application.acceptConnection(objClient); } }; |
クライアント側
1 2 3 | nc = new NetConnection(); nc.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler); nc.connect( "rtmp://[fmsのアドレス]/room" , userName, key); |
ポイント
クライアント側のconnect処理で引数を追加し、main.asc側でその値に基づいて処理分岐ができる点がポイントです。
上記例では、userNameが空だった場合は接続拒否としています。他にも、key値との組み合わせで処理を切り分けることが可能ですね。
ポイント
クライアントからはcall関数でmain.ascの処理を呼び出します。
main.asc側の関数名、newしたResponder名、userNameの順番で引数を渡します。
戻り値を受け取る関数を定義しておく必要があります。上の例ではCheckResultがそれにあたります。
同じ接続名での接続が存在しないかをチェックしたりできますね。
他のサンプル処理も次回の記事で追加していきます。