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.java
package 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.java
package 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.java
package 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
原创粉丝点击