BlazeDS源码中“选择房间聊天”示例总结

     效果图大致就是这个样子。左上半部分就是显示的房间列表,下边是创建房间的输入框和提交按钮。而右侧则是显示聊天内容和输入聊天窗口。  

    该示例主要运用了RemoteObject远程对象、Producerconsumer组件来实现的。下面是具体实现:

 

    首先是RemoteObejct. 它在这里的职责主要就是创建房间显示用的。每当玩家创建房间的时候,RemoteObject对象就会向服务器端发送请求,调用服务器方法;服务器端接收请求并响应后,创建该房间。

    其次利用Producer和Consumer发布/订阅模式,订阅某一频道(某一房间)内的信息,并接收。

 

     在选择房间列表的时候,会自动触发ChatRoom类中的room方法:

      <ChatPanel title="Chat" room="{list.selectedItem}" width="716" x="293"/>

 

     public function set room(name:String):void
   {
    if (!name) return;
    
    if (consumer && consumer.subscribed) //如果有订阅
    {
     log.text += "Leaving room " + consumer.destination + "/n"; 
     consumer.unsubscribe();    //取消上一次的订阅
    }
    consumer.destination = name; //定制新的订阅(消息目的地)
    producer.destination = name;
    consumer.subscribe();
    log.text += "Entering room " + name + "/n"; 
   }

 

    而在服务器端.  每当创建一个房间,在服务器端则有一个Destination与之对应:


    public void createRoom(String id) {   // id为玩家创建的房间名称

  if (roomExists(id))
  {
   throw new RuntimeException("Room already exists");
  }
  
  // Create a new Message destination dynamically
  String serviceId = "message-service";
  MessageBroker broker = MessageBroker.getMessageBroker(null);
  MessageService service = (MessageService) broker.getService(serviceId);
  MessageDestination destination = (MessageDestination) service.createDestination(id);

  if (service.isStarted())
  {
   destination.start();
  }

  rooms.add(id);
  
 }
    
    
    所以每当选择房间中的房间时,也就是在更换destination,所以也就只有订阅了该destination的consumer能够收到消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值