flex 开发聊天组件blazeDs+消息推送+java
来源:互联网 发布:java人事管理系统项目 编辑:程序博客网 时间:2024/06/04 19:59
1.组件使用方法
a.添加对组件所在文件夹的引用xmlns:message="messageGroup.*"
b.在页面添加组件
<message:MessageGroupPackage/>
c.flex配置文件
远程调用方法:remoting-config.xml 里面添加
<destination id="myMessage"> <properties> <source>com.service.message.MessageBox</source> </properties> </destination>
消息推送配置:messaging-config.xml 里面添加<destination id="MessageServer"> <channels> <channel ref="my-streaming-amf" /> </channels> </destination>services-config.xml 里面添加<channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/> </channel-definition>d.添加后台需要的类文件
/FlexAppToJava/src/com/service/message/MessageBox.javapackage com.service.message;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;public class MessageBox {//private static List<String> message=new ArrayList<String>();//public static List<String> allmessage=new ArrayList<String>();//public static List<String> newmessage=new ArrayList<String>();//public static Vector<String> newmessage=new Vector<String>(); private static MessagePushServer messagePushServer; //发送新消息 public void sendMessage(String mess){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time=formatter.format(new Date());// message.add(time+":\n "+mess);// message.add(0, time+":\n "+mess); System.out.println("收到消息:"+mess); MessageData.getInstance().newmessage.add(time+":\n "+mess); } //获得所有消息 public List<String> getMessage(){ if(messagePushServer==null){ messagePushServer=new MessagePushServer(); } List<String> message=MessageData.getInstance().allmessage; System.out.println("返回消息数:"+message.size()); return message; } //清空所有消息 public void clearMessage(){ List<String> message=MessageData.getInstance().allmessage; message.clear(); System.out.println("消息清空成功"); }}/FlexAppToJava/src/com/service/message/MessageData.javapackage com.service.message;import java.util.ArrayList;import java.util.List;import java.util.Vector;/** * 数据类 * @author acer */public class MessageData { private static MessageData messageData; public Vector<String> newmessage=new Vector<String>(); public List<String> allmessage=new ArrayList<String>(); private MessageData(){ } public static MessageData getInstance(){ if(messageData==null){ messageData=new MessageData(); } return messageData; }}/FlexAppToJava/src/com/service/message/MessagePushServer.javapackage com.service.message;import java.util.List;import java.util.Vector;public class MessagePushServer { private MessageTemplate template; public static boolean running = true; private static DataGenerator thread; public MessagePushServer() { System.out.println("调用"); //初始化方法 if(template==null){ template=new MessageTemplate(); } start();//启动推服务 } public MessagePushServer(Vector<String> newmessage) { System.out.println("调用"); //初始化方法 if(template==null){ template=new MessageTemplate(); } start(newmessage);//启动推服务 } private void start(Vector<String> newmessage) { if (thread == null) { thread = new DataGenerator(this.template,newmessage); thread.start(); } } public void start() { if (thread == null) { thread = new DataGenerator(this.template); thread.start(); } } public void stop() { running = false; thread = null; } /** * */ public static class DataGenerator extends Thread { private MessageTemplate template; private Vector<String> newmessage; private List<String> allmessage; public DataGenerator() { super(); } public DataGenerator(MessageTemplate template) { super(); this.template = template; } public DataGenerator(MessageTemplate template, Vector<String> newmessage) { super(); this.template = template; this.newmessage=newmessage; } public void run() { System.out.println("开始推送消息。。。"); while (running) { try { newmessage=MessageData.getInstance().newmessage; allmessage=MessageData.getInstance().allmessage; //循环需要推送的消息 for(int k=0;k<newmessage.size();k++){ String messageDate=newmessage.firstElement(); template.send(messageDate); System.out.println("推送消息"+messageDate); newmessage.remove(messageDate); allmessage.add(0,messageDate); } } catch (Exception e) { System.out.println("结束推送消息。。。"); running=false; e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); running=false; } } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); running=false; } } } }}/FlexAppToJava/src/com/service/message/MessageTemplate.java
package com.service.message;import flex.messaging.MessageBroker;import flex.messaging.messages.AsyncMessage;import flex.messaging.util.UUIDUtils;public class MessageTemplate { private String defaultDestination="MessageServer";//订阅号 private String clientId; private MessageBroker msgBroker; public void send(Object body) { send(this.defaultDestination, body); } public void send(String destination, Object body) { AsyncMessage message = new AsyncMessage(); message.setClientId(getmyClientId()); message.setMessageId(UUIDUtils.createUUID()); message.setTimestamp(System.currentTimeMillis()); message.setDestination(destination); message.setBody(body); getMessageBroker().routeMessageToService(message, null); } private String getmyClientId() { if(clientId==null){ clientId=UUIDUtils.createUUID(); } return clientId; } private MessageBroker getMessageBroker() { if(msgBroker==null){ msgBroker = MessageBroker.getMessageBroker(null); } return msgBroker; }}组件代码/FlexAppToJava/flex_src/messageGroup/MessageGroupPackage.mxml<?xml version="1.0" encoding="utf-8"?> <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="group1_creationCompleteHandler(event)" width="400" height="300"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import flash.utils.setInterval; import flash.utils.setTimeout; import mx.collections.ArrayCollection; import mx.events.FlexEvent; import mx.messaging.ChannelSet; import mx.messaging.channels.StreamingAMFChannel; import mx.messaging.events.MessageEvent; import mx.rpc.events.ResultEvent; protected function button1_clickHandler(event:MouseEvent):void { var sendText:String=myname.text+"说:"+messageSend.text; messageSend.text=""; messageServer.sendMessage(sendText); } // private var reciveMessage:String; private function sendMessHandler(event:ResultEvent):void{ // Alert.show("发送成功"); // reflashMessage();//刷新消息 } private function reciveMessageHandler(event:ResultEvent):void{ var array:ArrayCollection=event.result as ArrayCollection; var reciveMessage:String=""; for each(var str:String in array){ reciveMessage+=str+"\n"; } messageShow.text=reciveMessage; // Alert.show("接受成功"+array.length); } protected function button2_clickHandler(event:MouseEvent):void { messageServer.clearMessage();//清空消息申请 } private function clearMessage(event:ResultEvent):void{ messageShow.text=""; } /** * 刷新消息 **/ private function reflashMessage():void{ messageServer.getMessage(); } protected function group1_creationCompleteHandler(event:FlexEvent):void { // setInterval(reflashMessage,1000); reflashMessage(); addMessagePush(); } public function addMessagePush():void{ var myStreamingAMF:StreamingAMFChannel=new StreamingAMFChannel(); myStreamingAMF.uri="http://localhost:8088/FlexAppToJava/messagebroker/streamingamf"; var channelSet:ChannelSet=new ChannelSet(); channelSet.addChannel(myStreamingAMF); consumer.channelSet=channelSet; consumer.subscribe(); } public function messageHandler(event:MessageEvent):void { messageShow.text=event.message.body+"\n"+messageShow.text; // textArea.text = event.message.body+textArea.text; trace("server push data to client.............."); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:RemoteObject destination="myMessage" id="messageServer" endpoint="http://localhost:8088/FlexAppToJava/messagebroker/streamingamf"> <s:method name="sendMessage" result="sendMessHandler(event)"/> <s:method name="getMessage" result="reciveMessageHandler(event)"/> <s:method name="clearMessage" result="clearMessage(event)"/> </s:RemoteObject> <mx:Consumer id="consumer" destination="MessageServer" message="messageHandler(event)"/> </fx:Declarations> <s:VGroup> <s:TextArea id="messageShow" height="200"/> <s:HGroup> <s:TextInput id="myname" width="60"/> <s:TextInput id="messageSend" width="{messageShow.width-myname.width}"/> </s:HGroup> <s:HGroup> <s:Button label="发送" click="button1_clickHandler(event)" /> <s:Button label="清空" click="button2_clickHandler(event)" /> </s:HGroup> </s:VGroup> </s:Group>运行后效果
0 0
- flex 开发聊天组件blazeDs+消息推送+java
- 基于java-flex-blazeds的消息推送
- 推送消息----blazeds----flex----spring
- flex+blazeds+java后台消息推送(简单示例)
- flex+blazeds+java+spring后台消息推送,有界面维护
- flex+blazeds+java+spring后台消息推送,有界面维护
- flex+blazeds+java后台消息推送(简单示例)
- flex+blazeds+java+spring后台消息推送,有界面维护
- Flex通过Blazeds利用Remoteservice与后台java消息推送
- flex消息机制 flex-blazeds-java
- Flex Blazeds推送机制
- 解决BlazeDS基于Streaming通道推送消息时,IE11+Flex无法收到推送消息问题
- blazeds配置-- java和Flex单独开发
- blazeds配置-- java和Flex单独开发
- java flex blazeds 开发相关资料
- java WebSocket 简易聊天消息推送
- java WebSocket 简易聊天消息推送
- java WebSocket 简易聊天消息推送
- jquery 访问父节点
- memcache配置和简单例子
- K&R风格VSMS风格
- Android布局之RelativeLayout属性大全
- Intel 64 and IA32 内存类型 - memory type
- flex 开发聊天组件blazeDs+消息推送+java
- android预定义样式
- 【转】Vsflexgrid8.0和Vsview8.0 最新注册版
- TCP和UDP的区别
- 表级隐含字段: xmin 和 xmax
- PHP三大框架对比
- MyBatis关于Mapper配置文件知识集合
- Restful 与 SOAP
- RDIFramework.NET开发实例━表约束条件权限的使用-Web