Search in sources :

Example 1 with MessageHeader

use of io.nuls.protocol.message.base.MessageHeader in project nuls by nuls-io.

the class BroadcastHandler method broadcastToANode.

public BroadcastResult broadcastToANode(BaseMessage message, Node node, boolean asyn) {
    if (!node.isAlive()) {
        return new BroadcastResult(false, NetworkErrorCode.NET_NODE_DEAD);
    }
    if (node.getChannel() == null || !node.getChannel().isActive()) {
        return new BroadcastResult(false, NetworkErrorCode.NET_NODE_MISS_CHANNEL);
    }
    try {
        MessageHeader header = message.getHeader();
        header.setMagicNumber(networkParam.getPacketMagic());
        BaseNulsData body = message.getMsgBody();
        header.setLength(body.size());
        if (asyn) {
            node.getChannel().eventLoop().execute(() -> {
                try {
                    Channel channel = node.getChannel();
                    if (channel != null) {
                        channel.writeAndFlush(Unpooled.wrappedBuffer(message.serialize()));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } else {
            ChannelFuture future = node.getChannel().writeAndFlush(Unpooled.wrappedBuffer(message.serialize()));
            future.await();
            boolean success = future.isSuccess();
            if (!success) {
                return new BroadcastResult(false, NetworkErrorCode.NET_BROADCAST_FAIL);
            }
        }
    } catch (Exception e) {
        Log.error(e);
        return new BroadcastResult(false, NetworkErrorCode.NET_MESSAGE_ERROR);
    }
    return new BroadcastResult(true, KernelErrorCode.SUCCESS);
}
Also used : ChannelFuture(io.netty.channel.ChannelFuture) BroadcastResult(io.nuls.network.model.BroadcastResult) Channel(io.netty.channel.Channel) MessageHeader(io.nuls.protocol.message.base.MessageHeader) IOException(java.io.IOException) BaseNulsData(io.nuls.kernel.model.BaseNulsData) IOException(java.io.IOException)

Example 2 with MessageHeader

use of io.nuls.protocol.message.base.MessageHeader 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)

Example 3 with MessageHeader

use of io.nuls.protocol.message.base.MessageHeader in project nuls by nuls-io.

the class MessageProcessor method analysisMessage.

private List<BaseMessage> analysisMessage(ByteBuf buffer) throws NulsException {
    List<BaseMessage> messageList;
    try {
        messageList = new ArrayList<>();
        byte[] bytes = new byte[buffer.readableBytes()];
        buffer.readBytes(bytes);
        NulsByteBuffer byteBuffer = new NulsByteBuffer(bytes);
        while (!byteBuffer.isFinished()) {
            MessageHeader header = byteBuffer.readNulsData(new MessageHeader());
            byteBuffer.setCursor(byteBuffer.getCursor() - header.size());
            BaseMessage message = getMessageBusService().getMessageInstance(header.getModuleId(), header.getMsgType()).getData();
            message = byteBuffer.readNulsData(message);
            messageList.add(message);
        }
    } catch (Exception e) {
        throw new NulsException(KernelErrorCode.DATA_ERROR, e);
    } finally {
        buffer.clear();
    }
    return messageList;
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage) NulsException(io.nuls.kernel.exception.NulsException) MessageHeader(io.nuls.protocol.message.base.MessageHeader) NulsException(io.nuls.kernel.exception.NulsException) NulsByteBuffer(io.nuls.kernel.utils.NulsByteBuffer)

Aggregations

MessageHeader (io.nuls.protocol.message.base.MessageHeader)3 BaseMessage (io.nuls.protocol.message.base.BaseMessage)2 Channel (io.netty.channel.Channel)1 ChannelFuture (io.netty.channel.ChannelFuture)1 NulsException (io.nuls.kernel.exception.NulsException)1 BaseNulsData (io.nuls.kernel.model.BaseNulsData)1 NulsByteBuffer (io.nuls.kernel.utils.NulsByteBuffer)1 BroadcastResult (io.nuls.network.model.BroadcastResult)1 IOException (java.io.IOException)1