加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 01:36:45 所属栏目:百科 来源:网络整理
导读:???? 效果图大致就是这个样子。左上半部分就是显示的房间列表,下边是创建房间的输入框和提交按钮。而右侧则是显示聊天内容和输入聊天窗口。?? ??? 该示例主要运用了 RemoteObject 远程对象、 Producer 和 consumer 组件来实现的。下面是具体实现: ? ??? 首

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

??? 该示例主要运用了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能够收到消息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读