`
istudy
  • 浏览: 24556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

flex mina2.0 AMF3实例(转)

阅读更多
/**
* 类功能描述:通讯服务器
* 类创建人:
* 创建时间:
*/
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import common.AMF3CodecFactory;
public class ServerMain {
private static final int socketPORT = 10012;
public ServerMain(){
  //创建服务端连接
  final IoAcceptor acceptor = new NioSocketAcceptor();
  //创建日志过滤器进行日志处理
  acceptor.getFilterChain().addLast(“logger”, new LoggingFilter());
  //创建AMF3编解码过滤器编解码
  acceptor.getFilterChain().addLast(“codec”,new ProtocolCodecFilter(new AMF3CodecFactory()));
  acceptor.getSessionConfig().setReadBufferSize(2048);
  //设置Session空闲时间
  acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
  //设置消息处理类
  acceptor.setHandler(new MessageManage());
  try {
   //绑定监听端口
   acceptor.bind(new InetSocketAddress(socketPORT));
  } catch (IOException e) {
   System.out.println(“服务器错误:” +e.toString()+e.getMessage());
  }
  System.out.println(“服务器已启动端口为:” + socketPORT);
}
}
/**
* 类功能描述:通讯服务器FLEX843端口认证解决跨域沙箱安全
* 类创建人:
* 创建时间:
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class AttestationServer implements Runnable {
private ServerSocket server;
private BufferedReader reader;
private BufferedWriter writer;
private static final String securityXml = “<?xml version=’1.0′?>”
                           + “<cross-domain-policy> ”
                           + “<allow-access-from domain=’*’ to-ports=’10012′/>”
                           + “</cross-domain-policy> “;
public AttestationServer() {
  createServerSocket(843);
  new Thread(this).start();
}
private void createServerSocket(int port) {
  try {
   server = new ServerSocket(port);
  } catch (IOException e) {
   System.exit(0);
  }
}
public void run() {
  while (true) {
   Socket client = null;
   try {
    client = server.accept();
    InputStreamReader input = new InputStreamReader(client.getInputStream(), “UTF-8″);
    reader = new BufferedReader(input);
    OutputStreamWriter output = new OutputStreamWriter(client.getOutputStream(), “UTF-8″);
    writer = new BufferedWriter(output);
    StringBuilder sb = new StringBuilder();
    int request = 0;
    while ((request = reader.read()) != -1) {
     if (request != ‘\0′) {
      sb.append((char) request);
     } else
      break;
    }
    String message = sb.toString();
    if (message.indexOf(“<policy-file-request/>”) >= 0) {
     writer.write(securityXml + “\0″);
     writer.flush();
    }
    client.close();
   } catch (Exception e) {
    e.printStackTrace();
    try {
     if (client != null) {
      client.close();
      client = null;
     }
    } catch (IOException ex) {
     ex.printStackTrace();
    } finally {
     System.gc();
    }
   }
  }
}
}


package common;
/**
* 类功能描述:AMF3编解码工厂
* 类创建人:
* 创建时间:
*/
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFactory;
import org.apache.mina.filter.codec.ProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolEncoder;
public class AMF3CodecFactory implements ProtocolCodecFactory {
private ProtocolEncoder encoder;
    private ProtocolDecoder decoder;
public AMF3CodecFactory() {
   encoder = new AMF3Encoder();
         decoder = new AMF3Decoder();
}
public ProtocolDecoder getDecoder(IoSession session) throws Exception {
  return decoder;
}
public ProtocolEncoder getEncoder(IoSession session) throws Exception {
  return encoder;
}
}
package common;
/**
* 类功能描述:对传入消息转解码
* 类创建人:
* 创建时间:
*/
import java.io.DataInputStream;
import java.util.HashMap;
import java.util.zip.InflaterInputStream;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.ASObject;
import flex.messaging.io.amf.Amf3Input;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
public class AMF3Decoder extends CumulativeProtocolDecoder {
private SerializationContext context = new SerializationContext();
private final Amf3Input amfin;
public AMF3Decoder() {
  amfin = new Amf3Input(context);
}
protected boolean doDecode(IoSession session, IoBuffer in,ProtocolDecoderOutput out) throws Exception {
  in.position(0);
  amfin.setInputStream(new InflaterInputStream(new DataInputStream(in.asInputStream())));
  Object message = amfin.readObject();
  if(message instanceof ASObject){
   HashMap<?, ?> msgMap = (HashMap<?, ?>) message;
   out.write(msgMap);
   in.free();
   return true;
  }
  return false;
}
}
package common;
/**
* 类功能描述:对传出消息转装码
* 类创建人:
* 创建时间:
*/
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import entity.MessageInfo;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Output;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.AttributeKey;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
public class AMF3Encoder implements ProtocolEncoder {
private final AttributeKey DEFLATER = new AttributeKey(getClass(), “deflater”);
private static int buffersize = 2048;
private final SerializationContext context = new SerializationContext();
private final Amf3Output amfout;

public AMF3Encoder() {
  amfout = new Amf3Output(context);
}
public void encode(IoSession session, Object message,ProtocolEncoderOutput out) throws Exception {
  if(message instanceof MessageInfo){
   MessageInfo messageinfo = (MessageInfo)message;//返回封装的消息对象
   IoBuffer buffer;
   ByteArrayOutputStream stream = new ByteArrayOutputStream();
   amfout.setOutputStream(stream);
   amfout.writeObject(messageinfo); 
   amfout.flush();
   byte bytes[] = compress(session,stream.toByteArray()); 
   buffer = IoBuffer.allocate(bytes.length,false);
   buffer.put(bytes);
   buffer.flip();
   out.write(buffer);
   buffer.free();
  }
}

private byte[] compress(IoSession session,byte[] inputs){
  Deflater deflater = (Deflater)session.getAttribute(DEFLATER);
  if(deflater == null){
   deflater = new Deflater();
   session.setAttribute(DEFLATER,deflater);
  }
  deflater.reset();
  deflater.setInput(inputs);
  deflater.finish();
  byte outputs[] = new byte[0];
  ByteArrayOutputStream stream = new ByteArrayOutputStream(inputs.length);
  byte[] bytes = new byte[buffersize];
  int value;
  while(!deflater.finished()){
   value = deflater.deflate(bytes);
   stream.write(bytes,0, value);  
  }
  outputs = stream.toByteArray();
  try {
   stream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return outputs;
}

public void dispose(IoSession session) throws Exception {
  amfout.close();
}
}
/**
* 类功能描述:通讯消息处理
* 类创建人:
* 创建时间:
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import common.MessageType;
import common.UserListManage;
import entity.MessageInfo;
import entity.UserInfo;
public class MessageManage extends IoHandlerAdapter {
/**
  * 方法功能描述: 消息处理
  * 参数:  IoSession session 接收到的消息所属IoSession
  *       Object    message 接收的消息    
  * 返回值: void
  */
public void messageReceived(IoSession session, Object message)throws Exception {
  HashMap<?,?> msgMap=(HashMap<?,?>)message;
}
}
分享到:
评论

相关推荐

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Android Java Socket框架 Mina2.0

    **Android Java Socket框架 Mina2.0** Mina2.0是Apache软件基金会的一个开源项目,它是一个网络通信框架,主要应用于Java环境。Mina旨在简化高性能、高可用性和高可扩展性的网络应用开发,特别适合于处理大量并发...

    Mina 2.0 User Guide(Mina 2.0 用户指南)

    MINA 2.0 User Guide Part I - Basics Chapter 1 - Getting Started Chapter 2 - Basics Chapter 3 - Service Chapter 4 - Session Chapter 5 - Filters Chapter 6 - Transports Chapter 7 - Handler Part II - ...

    mina2.0案例

    **标题:“mina2.0案例”** **描述:**该案例是关于Java网络编程中使用的异步传输框架——Mina 2.0的实践应用,包括了服务端(server)和客户端(client)的实现。 **知识点详解:** 1. **Mina 2.0框架**:Mina...

    Mina2.0框架源码剖析

    《Mina2.0框架源码剖析》 Apache Mina是一个高性能、轻量级的网络通信框架,常用于构建基于TCP/IP和UDP/IP协议的应用,如服务器端的开发。Mina2.0作为其一个重要版本,引入了许多优化和改进,为开发者提供了更强大...

    Mina2.0框架源码剖析.pdf

    Mina2.0框架源码剖析 Mina2.0是一个基于Java的网络应用框架,提供了一个简洁、灵活的API,帮助开发者快速构建高性能的网络应用程序。下面是Mina2.0框架源码剖析的相关知识点: 一、Mina2.0框架概述 Mina2.0是一个...

    Mina 2.0快速入门与源码解析

    ### Mina 2.0快速入门与源码解析 #### Mina 2.0 快速入门 Mina 2.0 是一个基于Java NIO技术的高效、可伸缩的网络通信框架,广泛应用于服务器端开发。Mina 2.0 的设计目标是为开发者提供一个易于使用的API,使得...

    Mina2.0快速入门与源码剖析.docx

    Mina2.0 快速入门与源码剖析 Mina2.0 是一个基于 Java 的网络应用框架,提供了一个高效、可扩展的网络通信解决方案。下面是 Mina2.0 快速入门与源码剖析的知识点总结: 一、Mina2.0 快速入门 Mina2.0 的快速入门...

    mina2.0源码svn地址

    ### mina2.0源码svn地址解析与详细介绍 #### 一、Mina2.0简介 Mina(Multi-threaded IO Network Architecture)是Apache软件基金会的一个开源项目,旨在为开发人员提供一个易于使用的高性能网络应用程序框架。Mina...

    mina2.0教程

    自己整理的一些mina学习资料,内含MINA官方教程(中文版).docx,MINA-2.0.0-M4.chm(英文版),Apache_Mina_Server_2.0中文参考手册V1.0.pdf, 还有mina的包

    MIna2.0学习笔记

    3. **服务端程序**:使用Mina创建服务端程序,首先需要实例化一个Acceptor,如NioSocketAcceptor,然后注册一个IoHandler,它负责处理接收到的连接和数据。服务端会监听指定的端口并等待客户端的连接请求。 4. **...

    Mina2.0自学手册

    《Mina2.0自学手册》是一本针对初学者设计的教程,旨在详细指导读者如何使用mina框架来实现网络通信。mina是一个基于Java的网络应用框架,它使用Java NIO(New Input/Output)技术来实现高吞吐量和低延迟的网络通信...

    Apache MINA 2.0 用户指南中英文对照阅读版[带书签]

    本资源包含两个 pdf 文档,一本根据官方最新文档 (http://mina.apache.org/mina-project/userguide/user-guide-toc.html) 整理的 mina_2.0_user_guide_en.pdf,一个中文翻译的 mina_2.0_user_guide_cn.pdf。...

    MINA2.0用户手册中文随笔翻译

    MINA2.0 用户手册中文随笔翻译 MINA 是一个基于 NIO(Non-Blocking I/O)的网络框架,提供了统一的接口来处理 TCP、UDP 和其他机制的通信。MINA 的主要特点是能够处理大量的 socket 连接,并提供了一个高层接口来...

    Mina2.0学习笔记(完整版).doc

    Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking Input/Output)环境下。 **1. Mina的异步事件驱动模型** Mina的核心设计理念是...

    Mina2.0完全剖析,完全自学手册

    ### Mina2.0完全剖析,完全自学手册 #### Apache Mina 概述 Apache Mina(Multipurpose Infrastructure Networked Applications)是一个强大的网络应用框架,主要用于帮助开发者构建高性能且易于扩展的网络应用程序...

Global site tag (gtag.js) - Google Analytics