flex 开发聊天组件blazeDs+消息推送+java

8 篇文章 0 订阅
7 篇文章 0 订阅
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值