rtmfpのグループへの接続が確立した状態でCirrusのサーバーから切断するとどうなるか・・・をやってみる。
model動作部のプログラムは以下
package com.xxxx.model {
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.media.Camera;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
import flash.net.NetStream;
import mx.logging.ILogger;
import mx.logging.Log;
/**
* Rtmfpの接続まわりを実行するモデル
*/
public class RtmfpModel {
private var log:ILogger = Log.getLogger("com.xxxx.model.RtmfpModel");
private var _nc:NetConnection;
private var _ng:NetGroup;
private var _ns:NetStream;
private var server:String = "rtmfp://p2p.rtmfp.net/";
private var devkey:String = "xxxxxxxxxxx";
/**
* コンストラクタ
*/
public function RtmfpModel() {
log.info("rtmfpのコネクションをためしてみる。");
_nc = new NetConnection;
_nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler, false, 0, true);
_nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
_nc.connect(server + devkey);
}
/**
* ネット関連イベント
*/
private function netStatusHandler(event:NetStatusEvent):void {
log.info(event.info.code);
switch(event.info.code) {
case "NetConnection.Connect.Success":
log.info("接続に成功したので、自分のIDを取得する。");
log.info(_nc.nearID);
setupGroup();
break;
case "NetGroup.Connect.Success":
log.info("ネットグループの接続成功はたぶんこれ");
break;
}
}
/**
* セキュリティーイベント
*/
private function securityErrorHandler(event:SecurityErrorEvent):void {
log.error(""+event);
}
/**
* netGroupを作成する。
*/
private function setupGroup():void {
var groupSpec:GroupSpecifier = new GroupSpecifier("akasatana");
groupSpec.serverChannelEnabled = true;
groupSpec.postingEnabled = true;
_ng = new NetGroup(_nc, groupSpec.groupspecWithAuthorizations());
log.info(groupSpec.groupspecWithAuthorizations());
_ng.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
}
/**
* テスト用、ボタンクリックで動作させます。
*/
private var count:int = 0;
public function test(id:String):void {
// _nc.close(); ←ここでネットを切ってみる
log.info("クリックイベント");
var netGroupMessage:Object = new Object;
log.info(_nc.nearID);
netGroupMessage.sender = _nc.nearID;
netGroupMessage.user = "aiueo";
netGroupMessage.text = "kakikukeko";
netGroupMessage.sequence = ++ count;
_ng.post(netGroupMessage);
log.info("クリックイベント送信完了?");
}
}
}
実行結果(ログ)
20:16:54 RtmfpModel [INFO] rtmfpのコネクションをためしてみる。
20:16:55 RtmfpModel [INFO] NetConnection.Connect.Success
20:16:55 RtmfpModel [INFO] 接続に成功したので、自分のIDを取得する。
20:16:55 RtmfpModel [INFO] 5dc598ce869be77e2d020b371de788c23555e90ac817e7d60c68339ab5f551ce
20:16:55 RtmfpModel [INFO] G:0103010c0a0e616b61736174616e6100
20:16:55 RtmfpModel [INFO] NetGroup.Connect.Success
20:16:55 RtmfpModel [INFO] ネットグループの接続成功はたぶんこれ
20:16:55 RtmfpModel [INFO] NetGroup.Neighbor.Connect
(ボタン押す)
20:17:13 RtmfpModel [INFO] NetConnection.Connect.Closed
20:17:13 RtmfpModel [INFO] クリックイベント
ArgumentError: Error #2126: NetConnection オブジェクトを接続する必要があります。
at flash.net::NetConnection/get nearID()
at com.xxxx.model::RtmfpModel/test()[/Users/xxxx/Documents/Adobe Flash Builder 4/AdobeCirrusTest/src/com/xxxx/model/RtmfpModel.as:74]
at com.xxxx.controller::MainController/click()[/Users/xxxx/Documents/Adobe Flash Builder 4/AdobeCirrusTest/src/com/xxxx/controller/MainController.as:43]
at com.xxxx.view::AdobeCirrusTest/___AdobeCirrusTest_Button1_click()[/Users/xxxx/Documents/Adobe Flash Builder 4/AdobeCirrusTest/src/com/xxxx/view/AdobeCirrusTest.mxml:16]
ネットコネクションまわりでエラーがでるので、やはり接続をきってはいけない仕様になっているようですね。
最終更新:2011年02月05日 20:25