`
ynp
  • 浏览: 439783 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

理解消息订阅发布机制1-----聊天室改写

阅读更多

  原始的例子是和后台结合写的,下面的是分开写的,其实也没有改什么,主要是熟悉下这种机制,以后被遗忘之神光临了,好有个线索找回来 ,呵呵。

------》前台
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"
	creationComplete="initComp()">

	<mx:Script>
		<![CDATA[
			import mx.messaging.channels.StreamingAMFChannel;
			import mx.messaging.ChannelSet;
			import mx.messaging.channels.AMFChannel;
			import mx.messaging.events.MessageEvent;
			import mx.messaging.messages.AsyncMessage;
			import mx.messaging.messages.IMessage;


			private function initComp():void
			{
				var myStreamingAMF:AMFChannel = new StreamingAMFChannel("my-streaming-amf", "http://localhost:8400/samples/messagebroker/streamingamf");
				var myPollingAMF:AMFChannel = new AMFChannel("my-polling-amf", "http://localhost:8400/samples/messagebroker/amfpolling");
				myPollingAMF.pollingEnabled = true;
				myPollingAMF.pollingInterval = 2000;
				var channelSet:ChannelSet = new ChannelSet();
				channelSet.addChannel(myStreamingAMF);
				channelSet.addChannel(myPollingAMF);
				consumer.channelSet = channelSet;				
				producer.channelSet = channelSet;
			}

			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";	
			}
			
			private function send():void
			{
				var message:IMessage = new AsyncMessage();
				message.body = msg.text;
				producer.send(message);
				msg.text = "";
			}
							
			private function messageHandler(event:MessageEvent):void
			{
				log.text += event.message.body + "\n";	
			}
		]]>
	</mx:Script>

	<mx:Producer id="producer"/>
	<mx:Consumer id="consumer" message="messageHandler(event)"/>

	<mx:TextArea id="log" width="100%" height="100%"/>
	
	<mx:ControlBar>
		<mx:TextInput id="msg" width="100%" enter="send()" enabled="{consumer.subscribed}"/>
		<mx:Button label="Send" click="send()" enabled="{consumer.subscribed}"/>
	</mx:ControlBar>
	
</mx:Panel>

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="horizontal"
	creationComplete="srv.getRoomList()">

	<mx:RemoteObject id="srv" destination="chat-room-service" endpoint="http://localhost:8400/samples/messagebroker/amf"
		fault="Alert.show(event.fault.rootCause.message, 'Error')"/>

	<mx:Panel title="Room List" width="100%" height="100%" paddingTop="4" paddingLeft="4" paddingBottom="4" paddingRight="4">

		<mx:Label text="Select a room and start chatting in the right panel:"/>
		<mx:List id="list" dataProvider="{srv.getRoomList.lastResult}" width="100%" height="100%"/>

		<mx:ControlBar>
			<mx:VBox width="100%">
				<mx:Button label="Refresh" click="srv.getRoomList()"/>
				<mx:Spacer height="2"/>
				<mx:HRule width="100%" height="1"/>
				<mx:Label text="Create a room:"/>
				<mx:HBox>
					<mx:TextInput id="room"/>
					<mx:Button label="Create" click="srv.createRoom(room.text)" enabled="{room.text.length>0}"/>
				</mx:HBox>
			</mx:VBox>
		</mx:ControlBar>		
		
	</mx:Panel>
	
	<ChatPanel title="Chat" room="{list.selectedItem}"/>

	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
		]]>
	</mx:Script>
	
</mx:Application>


------》后台
package com.xj.manager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.springframework.stereotype.Service;

import flex.messaging.MessageBroker;
import flex.messaging.MessageDestination;
//import flex.messaging.config.ServerSettings;
import flex.messaging.services.MessageService;

/**
 * Simplistic implementation of a chat room management service. Clients can add rooms,
 * and obtain a list of rooms. The interesting part of this example is the "on-the-fly" 
 * creation of a message destination. The same technique can be used to create DataService
 * and Remoting destinations. 
 */
@Service
public class ChatRoomService {

	private List rooms;
	
	public ChatRoomService()
	{
		rooms = Collections.synchronizedList(new ArrayList());
	}

	public List getRoomList()
	{
		return rooms;
	}
	
	public void createRoom(String 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);
		
	}
	
	public boolean roomExists(String id)
	{
		int size = rooms.size();
		for (int i=0; i<size; i++)
		{
			if ( ((String)rooms.get(i)).equals(id) ) 
			{
				return true;
			}
		}
		return false;
	}
}
  • 大小: 11.5 KB
分享到:
评论

相关推荐

    结构体指针应用-改写选票系统c++源码.zip

    结构体指针应用-改写选票系统c++源码.zip结构体指针应用-改写选票系统c++源码.zip结构体指针应用-改写选票系统c++源码.zip结构体指针应用-改写选票系统c++源码.zip结构体指针应用-改写选票系统c++源码.zip结构体指针...

    自考英语语法-改写句子练习.doc

    【自考英语语法-改写句子练习】 在自学英语语法的过程中,改写句子是一项重要的练习,旨在提升语言的灵活性和多样性。以下是一些改写句子的常见方法: 1. 使用疑问标签(Question Tags): - 原句:Bob rarely ...

    基于UDP的聊天室编程2(客户端)

    基于UDP的聊天室编程2(客户端)--由于该程序内含两个小程序,受上传权限20M的影响,只能将两个小程序分开,此为该聊天室程序的客户端,请继续下载基于UDP的聊天室编程1(服务器端),下载完后请放在同一个文件夹中...

    Java多用户聊天室程序

    3. **消息广播机制**:服务器接收到任一客户端的消息后,需要将此消息广播给所有已连接的客户端,实现多用户实时聊天。 客户端部分可能包括以下组件: 1. **客户端连接类**:创建Socket对象,与服务器建立连接,并...

    大数的认识-整万数的改写与省略-说课教案.docx

    本课的目标在于帮助学生理解并掌握整万数的改写以及用“四舍五入”法省略万位后的尾数,从而求出数的近似值。以下是详细的知识点讲解: 1. **整万数的改写**: - **概念理解**:整万数指的是末尾带有四个零的正...

    把蜡烛改写成消息.docx

    1. 文档标题和描述中提到的“把蜡烛改写成消息”,实际上是在引导我们将传统蜡烛制作过程转化为信息传播的形式。这里包含了两篇不同的内容:一篇是关于如何手工制作小蜡烛,另一篇是关于《蜡烛》这篇课文的教学设计...

    cambridge-english-key-sample-paper-1-reading-and-writing v2.pdf

    从提供的文件信息来看,该文档是剑桥英语KET(Key English Test)的样卷1,包括阅读和写作部分。KET是剑桥大学英语考试系列中的初级英语水平测试,用于评估学习者使用英语的能力,属于剑桥英语五级证书考试系统...

    1-6单元句子改写答案

    1. **理解“挂名作者”(Gift Authorship)的概念及其在科研领域的不正当性** - **定义**: “挂名作者”指的是那些对研究项目没有作出实质性贡献却被列为作者的人。 - **不正当性**: 在科学研究领域,“挂名作者...

    cocos2d-x改写《魔塔》案例 2.1.1 中期

    《cocos2d-x改写《魔塔》案例 2.1.1 中期》是一个基于cocos2d-x 2.1.1版本的手机游戏开发项目,它旨在通过重制经典游戏《魔塔》来教授和展示cocos2d-x引擎的使用技巧。在这一中期阶段的代码中,开发者已经完成了游戏...

    五年级数学上册1-3单元测试题精选.doc

    - (1)选择题涉及到小数的近似值、乘法和比较,需要理解小数的性质和运算规则。 - (2)乘法分配律的应用,选择题要求填入符号使等式成立,考察了运算定律。 - (3)乘法和除法的混合运算,以及小数的保留位数...

    改写的新闻发布系统代码

    【标题】:“改写的新闻发布系统代码” 新闻发布系统是一种用于发布、管理和分享新闻内容的软件应用,它在网站运营、企业内部沟通、媒体发布等领域有着广泛的应用。在本项目中,“改写的新闻发布系统代码”指的是对...

    古诗改写的写作指导.doc

    1. **改写定义**:改写是对原文进行形式上的创新,如人称、表达方式、体裁或语言的变换,而不大幅度改变其核心思想。改写常用于考试作文,因为它提供了一种公正评价标准。 2. **改写形式**: - 改变人称:由第一...

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    《Oracle查询优化改写技巧与案例》PDF版本下载.txt

    根据提供的文件信息,本文将对《Oracle查询优化改写技巧与案例》这一主题进行详细的解析,涵盖Oracle查询优化的基本概念、重要性、改写技巧及其实际应用案例。 ### 一、Oracle查询优化概述 #### 1.1 查询优化定义 ...

    cocos2d-x改写《魔塔》案例 2.1.1 前期

    1. **资源管理**:cocos2d-x有强大的资源管理机制,如纹理精灵(Sprite)、动画(Animation)和音频(Audio)等。开发者可能已经将《魔塔》中的各种图片、音效等资源导入并组织起来,便于在游戏中加载和使用。 2. *...

    写作学习改写教案.doc

    1. **改写的目标**: - 掌握改写的技巧,保持主题一致,确保内容详略得当,语言得体。 - 学习如何根据原文主题进行联想和想象,但避免离题太远。 - 通过改写提升对原文的理解,并培养创新能力。 2. **课时安排**...

    最新人教版四年级数学上册《多位数的改写》教学反思--.pdf

    最新人教版四年级数学上册《多位数的改写》教学反思--.pdf

    JAVA项目暗箱和改写项目的图片

    了解项目暗箱有助于理解项目的运行机制,是进行项目改写或维护的重要基础。可能涉及到的技术包括数据库访问、并发处理、异常处理等。 3. **进销存系统**:进销存(Inventory Management System)是企业管理中不可或...

    二分搜索 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。

    C# Scoket聊天室

    C# 使用Socket的聊天室例程,服务器端和客户端收发信息。(2008年写的聊天室是在不太理解的情况下改写的,时隔9年,现在编写的聊天室是在理解的情况下编写的。)

Global site tag (gtag.js) - Google Analytics