use of io.nuls.protocol.message.base.BaseMessage in project nuls by nuls-io.
the class NulsVersionHandler method startElement.
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
// 读取模块配置的协议
if (INCLUD.equals(qName)) {
String xmlName = attributes.getValue(INCLUD_SRC);
XmlLoader.loadXml(xmlName, new ProtocolVersionHandler());
}
// 读取版本协议
if (PROTOCOL.equals(qName)) {
protocolContainer = new ProtocolContainer();
String version = attributes.getValue(PROTOCOL_VERSION);
String percent = attributes.getValue(PROTOCOL_PERCENT);
String delay = attributes.getValue(PROTOCOL_DELAY);
if (!StringUtils.isNumeric(version) || !StringUtils.isNumeric(percent) || !StringUtils.isNumeric(delay)) {
Log.error(KernelErrorCode.CONFIG_ERROR.getMsg());
throw new SAXException();
}
protocolContainer.setVersion(Integer.parseInt(version.trim()));
protocolContainer.setPercent(Integer.parseInt(percent.trim()));
protocolContainer.setDelay(Integer.parseInt(delay.trim()));
String extend = attributes.getValue(PROTOCOL_EXTEND);
if (StringUtils.isNotBlank(extend) && !StringUtils.isNumeric(percent)) {
Log.error(KernelErrorCode.CONFIG_ERROR.getMsg());
throw new SAXException();
}
extendTS = StringUtils.isBlank(extend) ? null : Integer.parseInt(extend.trim());
String block = attributes.getValue(PROTOCOL_BLOCK);
if (StringUtils.isNotBlank(block)) {
Class blockClass = null;
try {
blockClass = Class.forName(block.trim());
protocolContainer.setBlockClass(blockClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new SAXException();
}
} else {
if (null != extendTS) {
ProtocolContainer parentPC = NulsVersionManager.getProtocolContainer(extendTS);
if (null == parentPC || null == parentPC.getBlockClass()) {
throw new SAXException();
}
protocolContainer.setBlockClass(parentPC.getBlockClass());
} else {
Log.error(KernelErrorCode.CONFIG_ERROR.getMsg());
throw new SAXException();
}
}
discardsTx = new HashMap<>();
discardsMsg = new HashMap<>();
}
// 失效Tx协议
if (PROTOCOL_TX_DISCARD.equals(qName)) {
String discard = attributes.getValue(REF);
if (!NulsVersionManager.containsTxId(discard)) {
throw new SAXException(discard);
}
Class txCLass = NulsVersionManager.getTxProtocol(discard.trim());
Transaction tx = null;
try {
tx = (Transaction) txCLass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
discardsTx.put(tx.getType(), txCLass);
}
// 新生效Tx协议
if (PROTOCOL_TX.equals(qName)) {
String txId = attributes.getValue(REF);
if (!NulsVersionManager.containsTxId(txId)) {
throw new SAXException(txId);
}
Class txCLass = NulsVersionManager.getTxProtocol(txId);
Transaction tx = null;
try {
tx = (Transaction) txCLass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
protocolContainer.putTransaction(tx.getType(), txCLass);
}
// 失效的msg协议
if (PROTOCOL_MSG_DISCARD.equals(qName)) {
String msgId = attributes.getValue(REF);
if (!NulsVersionManager.containsMessageId(msgId)) {
throw new SAXException(msgId);
}
Class txCLass = NulsVersionManager.getMessageProtocol(msgId);
BaseMessage msg = null;
try {
msg = (BaseMessage) txCLass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
String moduleId = String.valueOf(msg.getHeader().getModuleId());
String type = String.valueOf(msg.getHeader().getMsgType());
String key = moduleId + "-" + type;
discardsMsg.put(key, txCLass);
}
// 新生效的msg协议
if (PROTOCOL_MSG.equals(qName)) {
String msgId = attributes.getValue(REF);
if (!NulsVersionManager.containsMessageId(msgId)) {
throw new SAXException(msgId);
}
Class txCLass = NulsVersionManager.getMessageProtocol(msgId);
BaseMessage msg = null;
try {
msg = (BaseMessage) txCLass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
String moduleId = String.valueOf(msg.getHeader().getModuleId());
String type = String.valueOf(msg.getHeader().getMsgType());
String key = moduleId + "-" + type;
protocolContainer.putMessage(key, txCLass);
}
}
use of io.nuls.protocol.message.base.BaseMessage in project nuls by nuls-io.
the class MessageBusServiceImpl method getMessageInstance.
@Override
public Result<? extends BaseMessage> getMessageInstance(short moduleId, int type) {
Class<? extends BaseMessage> clazz = MessageManager.getMessage(moduleId, type);
if (null == clazz) {
return Result.getFailed(MessageBusErrorCode.UNKOWN_MSG_TYPE);
}
BaseMessage message = null;
try {
message = clazz.newInstance();
} catch (InstantiationException e) {
Log.error(e);
return Result.getFailed(MessageBusErrorCode.INSTANTIATION_EXCEPTION);
} catch (IllegalAccessException e) {
Log.error(e);
return Result.getFailed(MessageBusErrorCode.ILLEGAL_ACCESS_EXCEPTION);
}
return Result.getSuccess().setData(message);
}
use of io.nuls.protocol.message.base.BaseMessage in project nuls by nuls-io.
the class NulsMessageCall method run.
@Override
public void run() {
if (null == data || null == handler) {
return;
}
try {
long start = System.currentTimeMillis();
BaseMessage message = data.getData();
if (null == message) {
return;
}
handler.onMessage(message, data.getNode());
if (Log.isDebugEnabled()) {
Log.debug(data.getData().getClass() + ",use:" + (System.currentTimeMillis() - start));
}
} catch (Exception e) {
Log.error(e.getMessage());
}
return;
}
use of io.nuls.protocol.message.base.BaseMessage in project nuls by nuls-io.
the class MessageManager method putMessage.
public static void putMessage(Class<? extends BaseMessage> msgClass) {
try {
BaseMessage message = msgClass.newInstance();
putMessage(message.getHeader().getModuleId(), message.getHeader().getMsgType(), msgClass);
} catch (Exception e) {
e.printStackTrace();
}
}
use of io.nuls.protocol.message.base.BaseMessage in project nuls by nuls-io.
the class MessageProcessor method handlerMessage.
private void handlerMessage(List<BaseMessage> messageList, Node node) {
for (BaseMessage message : messageList) {
if (MessageFilterChain.getInstance().doFilter(message)) {
MessageHeader header = message.getHeader();
if (node.getMagicNumber() == 0L) {
node.setMagicNumber(header.getMagicNumber());
}
handler(message, node);
} else {
node.getChannel().close();
if (node.getDisconnectListener() != null) {
node.getDisconnectListener().action();
}
}
}
}
Aggregations