接続を確立したあとでサーバーとだけ切断してみる

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]

ネットコネクションまわりでエラーがでるので、やはり接続をきってはいけない仕様になっているようですね。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月05日 20:25
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。