`

blazeds在服务器端取得发送消息内容

阅读更多

突发奇想看了下源代码,写了个简单的类,因为 messaging -config.xml的缺省adapther是actionScriptAdapter

我写了个类继承自他,就能得到从客户端发送的消息

package adapter;

import flex.management.runtime.messaging.services.messaging.adapters.ActionScriptAdapterControl;
import flex.messaging.Destination;
import flex.messaging.MessageDestination;
import flex.messaging.io.amf.ASObject;
import flex.messaging.messages.CommandMessage;
import flex.messaging.messages.Message;
import flex.messaging.services.MessageService;
import flex.messaging.services.messaging.adapters.ActionScriptAdapter;



/**
 *  服务器启动时执行步骤
 *  
 *  1.
 *  
 *  init messageing-config.xml配置了一个destionation
    setDestination
    setController
    
    
    如果messageing-config.xml配置了两个destination
    
    执行结果
     init
    setDestination
     init
    setDestination
    setController
    setController
 * 
 * **/
public class MyAdapter extends ActionScriptAdapter {

private ActionScriptAdapterControl controller;

   
    //--------------------------------------------------------------------------
    //
    // Constructor
    //
    //--------------------------------------------------------------------------
    
    /**
     * Constructs a default <code>ActionScriptAdapter</code>.
     */
    public MyAdapter()
    {
        super();
        System.out.println("init");
    }
    
    //--------------------------------------------------------------------------
    //
    // Public Getters and Setters for ServiceAdapter properties
    //                             
    //--------------------------------------------------------------------------

    /**
     * Casts the <code>Destination</code> into <code>MessageDestination</code>
     * and calls super.setDestination.
     * 
     * @param destination
     */
    public void setDestination(Destination destination)
    {
        Destination dest = (MessageDestination)destination;
        super.setDestination(dest);
        System.out.println("setDestination");
    }
    
    //--------------------------------------------------------------------------
    //
    // Other Public APIs
    //                 
    //--------------------------------------------------------------------------
    
    /**
     * Handle a data message intended for this adapter.
     */
    //主要的发送方法
    public Object invoke(Message message)
    {
    	if(message instanceof CommandMessage){
    		CommandMessage cm=(CommandMessage)message;
    		
    	}
        MessageService msgService = (MessageService)getDestination().getService();
        
        System.out.println(msgService.getSubscriberIds("ChatTopic", "chat_team", null));//所有订阅者的id
        
        msgService.pushMessageToClients(message, true);//发送消息
        
        msgService.sendPushMessageFromPeer(message, true);//发送消息
        
       
        
        System.out.println("invoke message");
      
        Object obj=message.getBody();
		System.out.println("message:"+obj.toString());//得到消息体
		if(obj instanceof ASObject){ //把它转成 AsObject 因为AsObject是个HashMap 
		    //所以就能猜见如何得到消息内容
			System.out.println("isAsObject");
			ASObject as=(ASObject)obj;
			System.out.println("text:"+as.get("text")); //输出 (as message.body.text="你好"中的)你好
			as.put("text", "大家好才是真的好");//还可以修改从客户端发过来的数据, 客户端text 输出内容就是 “大家好才是真的好”
			
		}
        return null;
    }

    /**
     * Invoked automatically to allow the <code>ActionScriptAdapter</code> to setup its corresponding
     * MBean control.
     * 
     * @param broker The <code>Destination</code> that manages this <code>ActionScriptAdapter</code>.
     */
    protected void setupAdapterControl(Destination destination)
    {
    	
        controller = new ActionScriptAdapterControl(this, destination.getControl());
        controller.register();
        setControl(controller);
        System.out.println("setController");
    }

}

 

	private function sendMessage():void{
				if(textEditor.text==""){
					Alert.show("不能发送空消息");
					return;
				}
				
				var message:AsyncMessage=new AsyncMessage();
//				message.body.text=userName.text+":"+msg.text+" ";
				var sendU:String=userName.text+":"+new Date();
				message.headers=new Array;
				message.headers["pro"]=5;
				message.body.text=textEditor.text;
				
				message.body.userAndDate=sendU;
				message.body.fontWeight=this.fontWeight;//粗体
				message.body.fontStyle=this.fontStyle;//倾斜
				message.body.fontColor=this.fontColor;//下划线
				message.body.fontTextDecoration=this.fontTextDecoration;//下换线
				
				producer.send(message);
//				vd.addChild(getTxtMessage(sendU));
//				vd.addChild(parseMessage(textEditor.text));
				textEditor.text="";
}
                                                                                                                                                              
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" 
    class="flex.messaging.services.MessageService">

    <adapters>
        <!--adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true"/-->
        <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
         <adapter-definition id="myadapter" class="adapter.MyAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-polling-amf"/>
    </default-channels>
	<!--destination id="mychat">
		<adapter ref="myadapter"/>
	</destination-->
	<destination id="ChatTopic">
<properties>
<network>
<subscription-timeout-minutes>0</subscription-timeout-minutes>
</network>
<server>
<message-time-to-live>0</message-time-to-live>//这些都是关于subtopic,header的,我之前发过blazeds过滤消息
<allow-subtopics>true</allow-subtopics>
<subtopic-separator>.</subtopic-separator>
</server>
</properties>


</destination>
</service>
 
1
0
分享到:
评论

相关推荐

    Blazeds 的flex端主动订阅消息

    在Flex端订阅消息的核心在于使用 BlazeDS 的 MessageBroker 服务,它提供了AMF(Action Message Format)通道,使得Flex客户端可以与服务器端的业务逻辑进行高效的数据交换。下面我们将深入探讨如何实现这个功能。 ...

    基于Java_BlazeDS_Flex_服务器消息推的聊天室

    Java BlazeDS Flex 服务器消息推技术是Web应用程序中实现实时通信的一种有效方法,尤其适用于构建交互性强的聊天室等应用。BlazeDS是Adobe提供的一个开源项目,它为Java服务器和Flex客户端之间的数据交换提供了丰富...

    blazeds flash开源服务器

    在Blazeds中,AMF用于序列化和反序列化Java对象,使得Flash客户端可以直接操作服务器端的对象,简化了前后端的数据交换过程。 Blazeds的核心功能包括: 1. **Remoting**:这是Blazeds的基础,它允许Flash应用程序...

    blazeds 服务器war包

    例如,在Tomcat中,将"blazeds.war"放到webapps目录下,然后重启服务器,即可看到一个名为"blazeds"的新应用。 **配置Blazeds:** Blazeds的配置主要通过修改WEB-INF/flex/services-config.xml文件完成。这个配置...

    blazeds 的点对点的消息发布和订阅

    2. **创建Topic**:在BlazDS中定义Topic,例如`/myTopic`,这将在服务器端创建一个消息通道。 3. **客户端订阅**:Flex客户端通过`MessageBroker`对象订阅Topic,例如`messageBroker.subscribe("/myTopic")`。 4. **...

    blazeds4.7官方下载

    2. **Web消息传递(Messaging)**:BlazeDS还支持发布/订阅模型的消息传递机制,通过使用Topic概念,客户端可以订阅特定的主题,当服务器端有新消息发布到该主题时,所有订阅者都会收到通知。这种实时通信模式对于...

    flash与服务器端通信

    因此,开发者需要在服务器端和客户端都实施严格的验证和授权机制。此外,通过优化数据传输、压缩和缓存策略,可以提高通信效率,减少服务器负载。 七、替代技术 随着HTML5的普及,Flash逐渐被WebSocket、WebRTC等...

    消息推送 blazeds

    这通常涉及到在Flex项目中添加BlazDS库,然后在服务器端(如Tomcat)部署BlazDS服务。接着,我们需要在Flex代码中定义消息代理和服务调用,以订阅和接收消息。 `messagesend`这个文件可能是一个示例项目或者包含...

    Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)

    消息传递服务则支持发布/订阅模式,使得服务器端可以广播消息到多个客户端,或者客户端可以向服务器发送消息。 在配置 BlazeDS 开发环境时,通常需要以下步骤: 1. 首先,确保你有 MyEclipse、Tomcat 服务器、Flex...

    Spring BlazeDS Integration Spring集成BlazeDS

    1. **配置BlazeDS**:在服务器端设置BlazeDS的配置文件,指定服务端的Java类和方法供Flex客户端调用。 2. **配置Spring**:在Spring的配置文件中定义远程对象 bean,映射到BlazeDS服务端的Java类和方法。 3. **...

    flex+spring+blazeds消息推送

    在Spring+BlazeDS+Flex的应用中,Quartz可能被用来定期触发服务器端的任务,例如发送通知、更新数据等,然后通过BlazeDS将这些消息推送到Flex客户端。 至于压缩包内的“说明.txt”,这可能包含了项目的配置步骤、...

    BlazeDS开发者指南中文版

    1. **设置环境**:首先需要安装Adobe Flex Builder或使用其他IDE集成BlazeDS库,同时在服务器端部署BlazeDS服务。 2. **创建服务**:在服务器端定义Java服务,这些服务通常以Spring Bean的形式存在,可以通过注解或...

    BlazeDS实现java后台消息推送flex前台接收的例子

    BlazeDS是一个开源的服务器端技术,主要用于在Java应用程序和Adobe Flex前端之间提供实时的数据通信。这个技术允许双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种功能对于实时性...

    建立连接BlazeDS远程端的Flex应用程序

    BlazeDS是一款由Adobe开发的强大服务器端技术,用于实现Flex、AIR和Java应用程序之间的实时通信。它允许开发者在Flex前端与Java后端之间构建高效的数据流和消息传递系统,极大地简化了复杂应用的开发过程。本文将...

    BlazeDS,PureMVC

    BlazeDS通信到Java的PureMVC——Flex框架,BlazeDS的服务器配置比较麻烦,这里使用的是直接下载blazeds_turnkey_3-0-0-544.zip中的tomcat BlazeDS模板路径为: blazeds_turnkey_3-0-0-544.zip解压后路径\tomcat\...

    flex采用blazeds实现服务器向客户端推数据

    在Servlet中,可以创建`AsyncMessage`对象,将新的`Tick`实例打包成消息,然后通过MessageBroker发送出去。`UUIDUtils`用于生成唯一的消息ID,确保消息的正确传递。 在Flex客户端,我们需要配置MessageBroker以便...

    BlazeDS结合pdf导出的例子

    AMF是一种二进制格式,相比HTTP或XML,它能更快地在服务器和客户端之间传输数据。在BlazeDS中,我们可以创建一个服务端的Java类,该类处理PDF生成逻辑,然后通过Flex客户端调用这个服务,获取生成的PDF文件。 在...

    BlazeDS 数据通信技术

    4. **服务器端处理**:在服务器端编写代码来接收文件并保存到适当的位置。 具体的实现细节可能会根据具体的应用场景有所不同,但上述步骤提供了一个基本框架来指导开发过程。通过这种方式,您可以利用BlazeDS的强大...

Global site tag (gtag.js) - Google Analytics