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);
}
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();
}
}
}
}
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;
}
Aggregations