flash on 2011-2-12

by Nackybear
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
play

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);
    }
  }
}