⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crbtserversessionlistener.java

📁 中国联通炫铃业务接口开发
💻 JAVA
字号:
package com.wireless.crbt.gwif.global.pub;

import java.beans.IntrospectionException;
import java.io.IOException;
import java.io.StringReader;
import java.util.Vector;

import net.gleamynode.netty2.Message;
import net.gleamynode.netty2.Session;
import net.gleamynode.netty2.SessionListener;

import org.apache.commons.betwixt.io.BeanReader;
import org.apache.log4j.Logger;
import org.xml.sax.SAXException;

import com.wireless.crbt.gwif.global.CRBT;
import com.wireless.crbt.gwif.global.Util;
import com.wireless.sms.pub.net.netty2.ResponseMessage;

public class CRBTServerSessionListener implements SessionListener {
	private static final String REQUESTMESSAGE = "REQUESTMESSAGE";
	private static final String RESPONSEMESSAGE = "RESPONSEMESSAGE";
	private BeanReader beanReader = new BeanReader();//creat 	BeanReader
	private Logger log = Logger.getLogger(CRBTServerSessionListener.class);
	private Vector allowclient = null;
	private CRBTCenterGlobalInterface global;

	  private CRBTServerSessionListener() {
	  }
	  /**
	   * 构造方法
	   * @param allowclient Vector
	   * @param global CenterGlobalInterface
	   * @param log Logger
	   */
	  public CRBTServerSessionListener(Vector allowclient,
	                                 CRBTCenterGlobalInterface global, Logger log) {
		  /**以下部分试验BeanWriter,与需求逻辑没有关系**/
		  //creat BeanWriter
//		try {//configure BeanWriter
//			StringWriter outputWriter = new StringWriter();
//			BeanWriter beanWriter = new BeanWriter(outputWriter);
//			beanWriter.getXMLIntrospector().setAttributesForPrimitives(false);
//	        beanWriter.setWriteIDs(false);
////	        beanWriter.setMapIDs(false);
//	        beanWriter.enablePrettyPrint();
//	        try {//执行writer动作
//				beanWriter.write("crbt", new CRBT());
//			} catch (SAXException e) {
//				e.printStackTrace();
//			} catch (IntrospectionException e) {
//				e.printStackTrace();
//			}finally{
//				outputWriter.close();
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		/**以上部分为试验部分**/
		
		
	    try {//configure BeanReader
	      beanReader.getXMLIntrospector().setAttributesForPrimitives(false);
	      beanReader.setMatchIDs(false);
	      //read 动作之前要先 register bean class
	      beanReader.registerBeanClass("crbt",//第一个参数"crbt"是root element name;(XML根目录)
	    		  com.wireless.crbt.gwif.global.CRBT.class);//注册解析bean,XML第一层次为crbt
	    }
	    catch (IntrospectionException ex2) {
	      ex2.printStackTrace();
	    }

	    this.log = log;
	    this.allowclient = allowclient;
	    this.global = global;
	  }
	  /**
	   * 连接建立后要执行的操作
	   * @param session Session
	   */
	  public void connectionEstablished(Session session) {

	    // set idle time to 60 seconds
	    session.getConfig().setIdleTime(60);
	    // initial sum is zero
//	     session.setAttachment(new Integer(0));
	  }
	  /**
	   * 连接关闭后要执行的操作
	   * @param session Session
	   */
	  public void connectionClosed(Session session) {
	  }
	  /**
	   * 用来处理从输入流中得到的数据,利用message作为载体
	   * @param session Session
	   * @param message Message
	   */
	  public synchronized void messageReceived(Session session, Message message) {

	    String socketAddress = session.getSocketAddressString();
	    socketAddress = socketAddress.substring(socketAddress.indexOf("/") + 1,
	                                            socketAddress.lastIndexOf(":"));

	    CRBTMessage crbtMessage = (CRBTMessage) message;

	    String value = crbtMessage.getValue();
//	    log.info("value:"+value);
	    if ( value.startsWith(REQUESTMESSAGE) ) {
	      ResponseMessage responseMessage = new ResponseMessage();
	      responseMessage.setValue(RESPONSEMESSAGE);
	      session.write(responseMessage);
	    } else if (!allowclient.contains(socketAddress)){
	      return ;
	    } else if ( value.startsWith(RESPONSEMESSAGE)){//接收到RESP性质的CRBT
	    	CRBT crbt = null;
		      try {//BeanReader 执行read动作
		    	  value = value.substring(value.indexOf(RESPONSEMESSAGE)+RESPONSEMESSAGE.length());
		        crbt = (CRBT) beanReader.parse(new StringReader(value));
		      }
		      catch (SAXException ex) {
		        ex.printStackTrace();
		      }
		      catch (IOException ex) {
		        ex.printStackTrace();
		      }
		      if (crbt != null) {
		    	  crbt.setSeq_no_10(crbt.getSeq_no_10()==null?Util.getSeq_no():
			    		  (crbt.getSeq_no_10().length()!=10?Util.getSeq_no(crbt.getSeq_no_10()):
			    		  			crbt.getSeq_no_10()));
		    	  global.addResp(crbt);
		    	  if( log != null ) {
		    		  log.info("接收到Resp:"+value);
//		    		  log.info("Command_status_resp_4:"+crbt.getCommand_status_resp_4()+
//		    				  " Craccount_resp_20:"+crbt.getCraccount_resp_20()+
//		    				  " getCrid_resp_200:"+crbt.getCrid_resp_200()+
//		    				  " Password_resp_8:"+crbt.getPassword_resp_8()+
//		    				  " RespTime:"+crbt.getRespTime()+
//		    				  " Status_resp_2:"+crbt.getStatus_resp_2()+
//		    				  " Totalnum_resp_4:"+crbt.getTotalnum_resp_4());
		    	  }
		      }
	    } else {
	      CRBT crbt = null;
	      try {//BeanReader 执行read动作
	        crbt = (CRBT) beanReader.parse(new StringReader(crbtMessage.getValue()));
	      }
	      catch (SAXException ex) {
	        ex.printStackTrace();
	      }
	      catch (IOException ex) {
	        ex.printStackTrace();
	      }

	      if (crbt != null) {
//	        crbt.setMsgContent(CryptoTool.base64Decode(crbt.getMsgContent()));
	    	  crbt.setSeq_no_10(crbt.getSeq_no_10()==null?Util.getSeq_no():
	    		  (crbt.getSeq_no_10().length()!=10?Util.getSeq_no(crbt.getSeq_no_10()):
	    		  			crbt.getSeq_no_10()));
	    	  crbt.setRemark1("TEST");//将通过socket接收到的CRBT在remark1字段打上标签
	    	  /**默认通过socket接收到的CRBT先加入RespQueue队列进行入库,在sendFlag字段置1,然后由Scan扫描发送
	    	   * 这样的好处是可以获得绝对的不重复的Seq_no*/
	    	  global.addResp(crbt);//默认通过socket接收到的CRBT先加入RespQueue队列进行入库
//	    	  global.add(crbt);
	    	  if( log != null ) log.info(crbt.toString());
	      }
	    }
	  }

	  public void messageSent(Session session, Message message) {
	  }

	  public void sessionIdle(Session session) {
//	          log.info("Disconnecting the idle.");
	    // disconnect an idle client
	    session.close();
	  }

	  public void exceptionCaught(Session session, Throwable cause) {
//	  log.info("Unexpected exception.");
	    cause.printStackTrace();
//	  close the connection on exceptional situation
	    session.close();
	  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -