Reactor (Flash Client)

Reactor is Union's full featured ActionScript 3.0 framework for creating connected applications and content for Adobe Flash. With Reactor, you can create chat, whiteboards, real-time multiplayer games, meeting applications, collaborative editing tools, and shared interfaces that run on the Web in Flash Player or on the desktop in Adobe AIR.
Backed by the battle-tested Union Server, Reactor's clean, easy-to-use API makes it almost trivial to build complex multiuser web applications. Like this fully functional chat application, created with only 74 lines of ActionScript, and not a single line of server-side code:
The complete code for the chat is shown below. To get started building your own multiuser Flash applications, follow the Reactor Chat Tutorial.
package {
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.Reactor;
import net.user1.reactor.ReactorEvent;
import net.user1.reactor.Room;
public class UnionChat extends Sprite {
// Union objects
protected var reactor:Reactor;
protected var chatRoom:Room;
// User interface objects
protected var incomingMessages:TextField;
protected var outgoingMessages:TextField;
public function UnionChat () {
// Create the user interface
buildUI();
// Make the Reactor object
reactor = new Reactor();
// Run readyListener() when the connection is ready
reactor.addEventListener(ReactorEvent.READY, readyListener);
// Connect to the server
reactor.connect("tryunion.com", 80);
}
// Method invoked when the connection is ready
protected function readyListener (e:ReactorEvent):void {
incomingMessages.appendText("Connected to Union\n");
chatRoom = reactor.getRoomManager().createRoom("chatRoom");
chatRoom.addMessageListener("CHAT_MESSAGE", chatMessageListener);
chatRoom.join();
}
// Creates the user interface
protected function buildUI ():void {
incomingMessages = new TextField;
incomingMessages.border = true;
incomingMessages.background = true;
incomingMessages.width = 400;
incomingMessages.height = 200;
outgoingMessages = new TextField;
outgoingMessages.type = TextFieldType.INPUT;
outgoingMessages.border = true;
outgoingMessages.background = true;
outgoingMessages.width = 400;
outgoingMessages.height = 20;
outgoingMessages.y = 210;
outgoingMessages.addEventListener(KeyboardEvent.KEY_UP, keyUpListener);
addChild(incomingMessages);
addChild(outgoingMessages);
}
// Keyboard listener for outgoingMessages
protected function keyUpListener (e:KeyboardEvent):void {
if (e.keyCode == Keyboard.ENTER) {
chatRoom.sendMessage("CHAT_MESSAGE",
true,
null,
outgoingMessages.text);
outgoingMessages.text = "";
}
}
// Method invoked when a chat message is received
protected function chatMessageListener (fromClient:IClient,
messageText:String):void {
incomingMessages.appendText("Guest"
+ fromClient.getClientID()
+ " says: "
+ messageText + "\n");
}
}
}