チャット
forked from colin challenge for professionals (diff: 236)
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>