P2P Chat test ... @author seyself seyself forked:2favorite:3lines:263license : MIT License modified : 2011-05-16 21:14:37 Embed Tweet package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.AsyncErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.events.StatusEvent; import flash.external.ExternalInterface; import flash.media.Camera; import flash.media.Microphone; import flash.net.GroupSpecifier; import flash.net.NetConnection; import flash.net.NetGroup; import flash.net.NetStream; import flash.text.TextField; import flash.text.TextFieldType; /** * ... * @author seyself */ public class Main extends Sprite { private var _connection:PearAssistConnection; private var _inputUserName:TextField; private var _connectButton:DisplayObject; private var _postButton:DisplayObject; private var _userName:String; private var _inputMessage:TextField; private var _outputBox:TextField; private var _loginLabel:TextField; private var _inputLabel:TextField; public function Main():void { stage.align = 'LT'; stage.scaleMode = 'noScale'; init(); } private function init():void { _loginLabel = createTextField('input login name.', this, 5, 5, 0, 0, 0xffffff, 0xffffff, false, false, 1); _inputUserName = createTextField('', this, 5, 25, 120, 20, 0xffffff, 0x000000, false, false, 2); _connectButton = createButton('connect >>', this, 130, 25, entry); _inputLabel = createTextField('input message.', this, 5, 5, 0, 0, 0xffffff, 0xffffff, false, false, 1); _inputMessage = createTextField('', this, 5, 25, 360, 60, 0xffffff, 0x000000, true, false, 2); _postButton = createButton('>> post', this, 5, 90, post); _outputBox = createTextField('', this, 5, 120, 360, 300, 0xffffff, 0x000000, true, false, 1); _inputLabel.visible = false; _outputBox.visible = false; _inputMessage.visible = false; _postButton.visible = false; } private function createButton(label:String, con:Sprite, x:Number, y:Number, onClick:Function):DisplayObject { var t:TextField = createTextField(' '+label+' ', con, x, y, 0, 0, 0xefefef, 0x666666, false, true, 1); t.selectable = false; t.addEventListener('click', function(event:Event):void { onClick(); }); con.addChild(t); return t; } private function createTextField(label:String, con:Sprite, x:Number, y:Number, w:Number, h:Number, bg:uint, border:uint, multiline:Boolean = false, autoSize:Boolean = false, type:int=2):TextField { var t:TextField = new TextField(); if (w) t.width = w; if (h) t.height = h; t.x = x; t.y = y; t.background = true; t.backgroundColor = bg; t.border = true; t.borderColor = border; if (multiline) { t.multiline = true; t.wordWrap = true; } else { t.autoSize = autoSize ? 'left' : 'none'; t.multiline = false; t.wordWrap = false; } t.text = label; t.type = type == 2 ? 'input' : 'dynamic'; addChild(t); return t; } private function entry():void { _userName = _inputUserName.text; connect(); } private function connect():void { if (!_userName) return; _connection = new PearAssistConnection(); _connection.onConnect = onConnect; _connection.onGroup = onGroup; _connection.onPosting = onPosting; _connection.doConnect(); removeChild(_loginLabel); removeChild(_inputUserName); removeChild(_connectButton); } private function onPosting(message:Object):void { _outputBox.appendText(message.user + ' : ' + message.text + '\n'); } private function onGroup():void { _inputLabel.visible = true; _inputMessage.visible = true; _postButton.visible = true; _outputBox.visible = true; } private function onConnect():void { } private function post():void { if (!_inputMessage.text) return; var message:Object = { }; message.user = _userName; message.text = _inputMessage.text; _connection.doPost(message); _inputMessage.text = ''; onPosting(message); } } } import flash.events.NetStatusEvent; import flash.net.GroupSpecifier; import flash.net.NetConnection; import flash.net.NetGroup; class PearAssistGroup { private static var _sequenceNumber:int = 0; private var _group:NetGroup; private var _spec:GroupSpecifier; private var _connection:NetConnection; private var _onPosting:Function; public function get onPosting():Function { return _onPosting; } public function set onPosting(value:Function):void { _onPosting = value; } public function PearAssistGroup() { } public function doConnect(connection:NetConnection, groupName:String):void { _connection = connection; _spec = new GroupSpecifier(groupName); _spec.postingEnabled = true; _spec.serverChannelEnabled = true; _group = new NetGroup(connection, _spec.toString()); _group.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusHandler); } private function onNetStatusHandler(event:NetStatusEvent):void { switch(event.info.code) { case 'NetGroup.Neighbor.Connect' : _sequenceNumber++; break; case 'NetGroup.Posting.Notify' : onPostingCallback(event.info.messageID, event.info.message); break; } } public function doPost(message:Object):void { message.sequence = _sequenceNumber++; message.sender = _connection.nearID; _group.post(message); } private function onPostingCallback(messageID:String, message:Object):void { if (_onPosting is Function) _onPosting(message); } } import flash.events.AsyncErrorEvent; import flash.events.IOErrorEvent; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.net.GroupSpecifier; import flash.net.NetConnection; import flash.net.NetGroup; class PearAssistConnection { public static const SERVER : String = 'rtmfp://p2p.rtmfp.net/'; public static const GROUPNAME : String = 'com.seyself.p2p.test'; //書き換えてね public static const DEVKEY : String = '263f91bdac6be3ec356b51db-e249f567ad93'; private var _connection:NetConnection; private var _group:PearAssistGroup; private var _onConnect:Function; private var _onGroup:Function; private var _onPosting:Function; public function get onConnect():Function { return _onConnect; } public function set onConnect(value:Function):void { _onConnect = value; } public function get onGroup():Function { return _onGroup; } public function set onGroup(value:Function):void { _onGroup = value; } public function get onPosting():Function { if (_group) return _group.onPosting; return _onPosting; } public function set onPosting(value:Function):void { if (_group) _group.onPosting = value; else _onPosting = value; } public function PearAssistConnection() { _connection = new NetConnection(); _connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncErrorHandler); _connection.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler); _connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusHandler); _connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler); } public function doConnect():void { _connection.connect(SERVER + DEVKEY + '/'); } public function doPost(message:Object):void { _group.doPost(message); } private function onConnectCallback():void { _group = new PearAssistGroup(); _group.onPosting = _onPosting; _group.doConnect(_connection, GROUPNAME); } private function onGroupCallback():void { if (_onGroup is Function) _onGroup(); } private function onSecurityErrorHandler(event:SecurityErrorEvent):void { } private function onNetStatusHandler(event:NetStatusEvent):void { switch(event.info.code) { case 'NetConnection.Connect.Success' : onConnectCallback(); break; case 'NetGroup.Connect.Success' : onGroupCallback(); break; case 'NetGroup.Connect.Failed' : case 'NetGroup.Connect.Rejected' : case 'NetGroup.Connect.Closed' : break; } } private function onIOErrorHandler(event:IOErrorEvent):void { } private function onAsyncErrorHandler(event:AsyncErrorEvent):void { } } Code Fullscreen Preview Fullscreen 「作者のアクティビティ」ってなに? by seyself at 2011/05/16 21:24:14 thinktaro tjoen djankey P2P removeChild visible type Object multiline message toString text height width String addEventListener Boolean addChild uint Sprite int Number sort new page view favorite forked pv186 forked from: P2P Chat test umhr forked:0 favorite:1lines:263 (diff:3) pv102 forked from: P2P Chat test heroboy forked:0 favorite:0lines:263 (diff:1)