Search in sources :

Example 1 with BaseMessage

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);
    }
}
Also used : Transaction(io.nuls.kernel.model.Transaction) BaseMessage(io.nuls.protocol.message.base.BaseMessage) SAXException(org.xml.sax.SAXException)

Example 2 with BaseMessage

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);
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage)

Example 3 with BaseMessage

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;
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage)

Example 4 with BaseMessage

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();
    }
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage)

Example 5 with BaseMessage

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();
            }
        }
    }
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage) MessageHeader(io.nuls.protocol.message.base.MessageHeader)

Aggregations

BaseMessage (io.nuls.protocol.message.base.BaseMessage)6 MessageHeader (io.nuls.protocol.message.base.MessageHeader)2 NulsException (io.nuls.kernel.exception.NulsException)1 Transaction (io.nuls.kernel.model.Transaction)1 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)1 SAXException (org.xml.sax.SAXException)1