flash on 2011-2-12
A simple Union example application showing how to build a basic
lobby with Reactor.
♥0 |
Line 146 |
Modified 2011-02-12 16:29:20 |
MIT License
archived:2017-03-20 05:17:16
ActionScript3 source code
/**
* Copyright Nackybear ( http://wonderfl.net/user/Nackybear )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3pnB
*/
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import net.user1.logger.Logger;
import net.user1.reactor.*;
// A simple Union example application showing how to build a basic
// lobby with Reactor.
public class UnionLobby extends Sprite {
protected var reactor:Reactor;
protected var roomList:TextField;
protected var joinRoomA:TextField;
protected var joinRoomB:TextField;
protected var leaveRoomA:TextField;
protected var removeRoomA:TextField;
// Constructor.
public function UnionLobby () {
// Create the interface.
createUI();
// Create the Reactor object and connect to Union.
reactor = new Reactor();
reactor.getLog().setLevel(Logger.DEBUG);
reactor.addEventListener(ReactorEvent.READY, readyListener);
reactor.connect("tryunion.com", 80);
}
// Event listener triggered when the connection is ready.
protected function readyListener (e:ReactorEvent):void {
// Ask to be notified when a room with the qualifier "lobbyexample" is
// added to or removed from the server. In response to this
// watchForRooms() call, the RoomManager will trigger
// RoomManagerEvent.ROOM_ADDED and RoomManagerEvent.ROOM_REMOVED events.
reactor.getRoomManager().watchForRooms("lobbyexample");
// Register for the RoomManagerEvent.ROOM_ADDED and
// RoomManagerEvent.ROOM_REMOVED events.
reactor.getRoomManager().addEventListener(RoomManagerEvent.ROOM_ADDED,
roomAddedListener);
reactor.getRoomManager().addEventListener(RoomManagerEvent.ROOM_REMOVED,
roomRemovedListener);
// Create three example rooms that will appear in the lobby. Use a
// RoomSettings object to specify that the rooms should not
// "die on empty"; otherwise, each room would automatically be removed
// when its last occupant leaves.
var roomSettings:RoomSettings = new RoomSettings();
roomSettings.dieOnEmpty = false;
reactor.getRoomManager().createRoom("lobbyexample.roomA", roomSettings);
reactor.getRoomManager().createRoom("lobbyexample.roomB", roomSettings);
reactor.getRoomManager().createRoom("lobbyexample.roomC", roomSettings);
}
// Event listener triggered when a room is added to the
// room manager's room list.
protected function roomAddedListener (e:RoomManagerEvent):void {
// There's a new room, so update the on-screen room list.
updateRoomList();
// Ask to be notified when the new room's client-count changes. Once the
// room is observed, if other clients join the room, this client will
// be notified. UpdateLevel values specify how much information this
// client should be told about the room. This is a lobby, so we want
// the room's occupant count only.
var updateLevels:UpdateLevels = new UpdateLevels();
updateLevels.clearAll();
updateLevels.occupantCount = true;
e.getRoom().observe(null, updateLevels);
// Register to be notified any time the new room's client count changes.
e.getRoom().addEventListener(RoomEvent.OCCUPANT_COUNT,
roomClientCountListener);
}
// Event listener triggered when a room is removed from the
// room manager's room list.
protected function roomRemovedListener (e:RoomManagerEvent):void {
// A room is gone, so update the on-screen room list.
updateRoomList();
}
// The number of clients in one of the rooms changed, so update
// the on-screen room list to show the new client count.
protected function roomClientCountListener (e:RoomEvent):void {
updateRoomList();
}
// Display the list of rooms in a text field.
protected function updateRoomList ():void {
roomList.text = "";
for each (var room:Room in
reactor.getRoomManager().getRoomsWithQualifier("lobbyexample")) {
roomList.appendText(room.getRoomID()
+ " (" + room.getNumOccupants() + ")\n");
}
}
// Join-Room button click listener.
protected function joinRoomAClickListener (e:MouseEvent):void {
var roomA:Room = reactor.getRoomManager().getRoom("lobbyexample.roomA");
if (roomA != null) {
roomA.join();
}
}
// Join-Room button click listener.
protected function joinRoomBClickListener (e:MouseEvent):void {
var roomB:Room = reactor.getRoomManager().getRoom("lobbyexample.roomB");
if (roomB != null) {
roomB.join();
}
}
// Leave-Room button click listener.
protected function leaveRoomAClickListener (e:MouseEvent):void {
var roomA:Room = reactor.getRoomManager().getRoom("lobbyexample.roomA");
if (roomA != null) {
roomA.leave();
}
}
// Remove-Room button click listener.
protected function removeRoomAClickListener (e:MouseEvent):void {
var roomA:Room = reactor.getRoomManager().getRoom("lobbyexample.roomA");
if (roomA != null) {
reactor.getRoomManager().getRoom("lobbyexample.roomA").remove();
}
}
// Create the user interface
protected function createUI ():void {
// A text field for the room list
roomList = new TextField();
roomList.background = true;
roomList.border = true;
roomList.x = 150;
roomList.y = 20;
roomList.width = 150;
roomList.height = 100;
addChild(roomList);
// The join-room Abutton
joinRoomA = new TextField();
joinRoomA.selectable = false;
joinRoomA.background = true;
joinRoomA.border = true;
joinRoomA.x = 80;
joinRoomA.y = 130;
joinRoomA.width = 90;
joinRoomA.height = 20;
joinRoomA.text = "Join Room A";
joinRoomA.addEventListener(MouseEvent.CLICK, joinRoomAClickListener);
addChild(joinRoomA);
// The join-room Bbutton
joinRoomB = new TextField();
joinRoomB.selectable = false;
joinRoomB.background = true;
joinRoomB.border = true;
joinRoomB.x = 80;
joinRoomB.y = 200;
joinRoomB.width = 90;
joinRoomB.height = 20;
joinRoomB.text = "Join Room B";
joinRoomB.addEventListener(MouseEvent.CLICK, joinRoomBClickListener);
addChild(joinRoomB);
// The leave-room button
leaveRoomA = new TextField();
leaveRoomA.selectable = false;
leaveRoomA.background = true;
leaveRoomA.border = true;
leaveRoomA.x = 180;
leaveRoomA.y = 130;
leaveRoomA.width = 90;
leaveRoomA.height = 20;
leaveRoomA.text = "Leave Room A";
leaveRoomA.addEventListener(MouseEvent.CLICK, leaveRoomAClickListener);
addChild(leaveRoomA);
// The leave-room button
leaveRoomA = new TextField();
leaveRoomA.selectable = false;
leaveRoomA.background = true;
leaveRoomA.border = true;
leaveRoomA.x = 180;
leaveRoomA.y = 130;
leaveRoomA.width = 90;
leaveRoomA.height = 20;
leaveRoomA.text = "Leave Room A";
leaveRoomA.addEventListener(MouseEvent.CLICK, leaveRoomAClickListener);
addChild(leaveRoomA);
// The remove-room button
removeRoomA = new TextField();
removeRoomA.selectable = false;
removeRoomA.background = true;
removeRoomA.border = true;
removeRoomA.x = 280;
removeRoomA.y = 130;
removeRoomA.width = 90;
removeRoomA.height = 20;
removeRoomA.text = "Remove Room A";
removeRoomA.addEventListener(MouseEvent.CLICK, removeRoomAClickListener);
addChild(removeRoomA);
}
}
}