📄 crbtserversessionlistener.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 + -