チャット

by paq forked from colin challenge for professionals (diff: 236)
♥0 | Line 126 | Modified 2009-08-21 10:54:53 | MIT License
play

ActionScript3 source code

/**
 * Copyright paq ( http://wonderfl.net/user/paq )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/brtI
 */

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="465" height="465" applicationComplete="init()" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#444444, #1B1B1B]" color="#000000">
	
	<mx:Script>
		<![CDATA[
			/*
			 * 途中から参加した人にログを表示するようにした。
			*/
			import mx.collections.ArrayCollection;
			import flash.display.Sprite;
			import flash.events.KeyboardEvent;
			import flash.text.TextField;
			import flash.text.TextFieldType;
			import flash.ui.Keyboard;
			import net.user1.reactor.IClient;
			import net.user1.reactor.Room;
			import net.user1.reactor.RoomEvent;
			import net.user1.reactor.Reactor;
			import net.user1.reactor.ReactorEvent;
			import net.user1.logger.Logger;
		 
			protected var _reactor:Reactor;
			protected var _room:Room;
			
			private var _message:ArrayCollection = new ArrayCollection();
			private var _number:uint;
		 
			public function init():void
			{
				_reactor = new Reactor();
				_reactor.addEventListener(ReactorEvent.READY,readyListener);
				_reactor.connect("tryunion.com", 9100);
				_reactor.getLog().setLevel(Logger.DEBUG);
			}
		 
			protected function readyListener(e:ReactorEvent):void
			{
				//_message.addItem({No:_number, Name:"System", Comment:"Connected to Union!"});
				_room = _reactor.getRoomManager().createRoom("wonderfl.paq.chat02");
				_room.addMessageListener("CHAT_MESSAGE",chatMessageListener);
				_room.join();
				_room.addEventListener(RoomEvent.SYNCHRONIZE, onSynchronize);
				_reactor.getMessageManager().addMessageListener("GIVE_ME_LOG", sendLog);
				_reactor.getMessageManager().addMessageListener("THIS_IS_LOG", receiveLog);
				
				datagrid.dataProvider=_message;
			}
			
			protected function sendLog(from:IClient):void
			{
				var data:String = "";
				for(var i:uint=0; i < _message.length; i++)
				{
					data = data + _message[i].No + "^-" + _message[i].Name + "^-" + _message[i].Comment + ",-";
				}
				from.sendMessage("THIS_IS_LOG", data);
			}
			
			protected function receiveLog(from:IClient, data:String):void
			{
				var log_temp:Array = data.split(",-");
				var log:Array = [];
				
				for(var i:uint=0; i < log_temp.length-1; i++)
				{
					log[i] = log_temp[i].toString().split("^-");
				}
				for(i=0; i < log.length; i++)
				{
					_message.addItem({No:log[i][0], Name:log[i][1], Comment:log[i][2]});
					_number++;
				}
				start();
			}
			
			protected function onSynchronize(e:RoomEvent):void
			{
				if ( _room.getClients().length == 1 )
				{
					start();
				}
				else
				{
					var topClient:IClient = _room.getClients()[0];
					topClient.sendMessage("GIVE_ME_LOG");
				}
			}
			
			protected function keyUpListener(e:KeyboardEvent):void
			{
				if( !datagrid.visible ) return;
				if (e.keyCode == Keyboard.ENTER)
				{
					_room.sendMessage("CHAT_MESSAGE",true,null,outgoingMessages.text);
					outgoingMessages.text = "";
				}
			}
			
			protected function nameChangeListener():void {
				if( !datagrid.visible ) return;
				var self:IClient;
				self = _reactor.getClientManager().self();
				self.setAttribute("username", nameInput.text);
			}
		 
			protected function chatMessageListener(fromClient:IClient, messageText:String):void
			{
				var username:String = getUserName(fromClient);
				_message.addItem({No:_number, Name:username, Comment:messageText});
				_number++;
			}
			
			protected function getUserName(client:IClient):String
			{
				var username:String = client.getAttribute(null, "username");
				if (username == null)
				{
					return "Guest" + client.getClientID();
				}
				else
				{
					return username;
				}
			}
			
			private function start():void
			{
				datagrid.visible=true;
				outgoingMessages.addEventListener(KeyboardEvent.KEY_UP,keyUpListener);
			}
			
		]]>
	</mx:Script>

	<mx:DataGrid x="10" y="46" width="445" height="349" id="datagrid" visible="false">
		<mx:columns>
			<mx:DataGridColumn headerText="No." dataField="No" width="30"/>
			<mx:DataGridColumn headerText="Name" dataField="Name" width="100"/>
			<mx:DataGridColumn headerText="Comment" dataField="Comment"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:TextInput x="119" y="428" width="336" id="outgoingMessages" tabIndex="2"/>
	<mx:TextInput x="10" y="428" width="101" id="nameInput" tabIndex="1" change="nameChangeListener()"/>
	<mx:Label x="10" y="406" text="Name:" color="#FFFFFF"/>
	<mx:Label x="119" y="406" text="Comment:" color="#FFFFFF"/>
	<mx:Label x="10" y="10" text="Union Platfrom Sample" width="270.55" height="28" fontSize="20" color="#FFFFFF" fontFamily="Arial" textDecoration="normal"/>
</mx:Application>