use of io.dingodb.net.Message in project dingo by dingodb.
the class SendOperator method push.
@Override
public boolean push(@Nonnull Object[] tuple) {
try {
if (log.isDebugEnabled()) {
log.debug("(tag = {}) Send tuple {}...", tag, schema.formatTuple(tuple));
}
Message msg = SimpleMessage.builder().tag(TagUtil.getTag(tag)).content(codec.encode(tuple)).build();
channel.send(msg);
return true;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
use of io.dingodb.net.Message in project dingo by dingodb.
the class SendOperator method fin.
@Override
public void fin(@Nonnull Fin fin) {
try {
if (log.isDebugEnabled()) {
log.debug("(tag = {}) Send FIN", tag);
}
Message msg = SimpleMessage.builder().tag(TagUtil.getTag(tag)).content(codec.encodeFin(fin)).build();
channel.send(msg);
channel.close();
} catch (Exception e) {
e.printStackTrace();
}
}
use of io.dingodb.net.Message in project dingo by dingodb.
the class GenericMessageHandler method handle.
@Override
public void handle(Connection<Message> connection, Packet<Message> packet) {
switch(packet.header().type()) {
case PING:
connection.genericSubChannel().send(MessagePacket.pong(0));
return;
case PONG:
break;
case CONNECT_CHANNEL:
ConnectionSubChannel<Message> channel = connection.openSubChannel(packet.header().targetChannelId());
channel.send(MessagePacket.ack(channel.channelId(), channel.targetChannelId(), channel.nextSeq()));
break;
case DIS_CONNECT_CHANNEL:
connection.closeSubChannel(packet.header().channelId());
break;
case ACK:
Optional.ofNullable(ackFuture.get(connection)).map(futureMap -> futureMap.remove(packet.header().channelId())).ifPresent(future -> future.complete(packet));
break;
case HANDSHAKE_ERROR:
ErrorMessage errorMessage = ErrorMessage.builder().build().load(packet.content().toBytes());
log.error("Handshake failed, msg is: {}", errorMessage.getDetailMessage());
try {
connection.close();
} catch (Exception e) {
log.error("Connection close error.", e);
}
break;
default:
throw new IllegalStateException("Unexpected value: " + packet.header().type());
}
}
use of io.dingodb.net.Message in project dingo by dingodb.
the class NetServiceTest method hello.
// @Test
public void hello() throws Exception {
String hello = "hello";
Tag tag = SimpleTag.builder().tag("TEST".getBytes(StandardCharsets.UTF_8)).build();
ServiceLoader<NetServiceProvider> loader = ServiceLoader.load(NetServiceProvider.class);
NettyNetService netService = (NettyNetService) loader.iterator().next().get();
netService.listenPort(19199);
netService.registerMessageListenerProvider(tag, () -> (msg, ch) -> assertThat(new String(msg.toBytes())).isEqualTo(hello));
netService.registerMessageListenerProvider(tag, () -> (msg, ch) -> System.out.println(String.format("%s %s %s", new String(msg.toBytes()), ((ConnectionSubChannel) ch).channelId(), StackTraces.stack(2))));
Channel channel = netService.newChannel(NetAddress.builder().host("localhost").port(19199).build());
Message helloMsg = SimpleMessage.builder().tag(tag).content(hello.getBytes()).build();
channel.send(helloMsg);
Thread.sleep(100000);
}
use of io.dingodb.net.Message in project dingo by dingodb.
the class CoordinatorConnector method connectAll.
private void connectAll(Message message, Channel channel) {
connected(null, channel);
byte[] buf = message.toBytes();
if (buf.length == 0) {
channel.send(GET_ALL_LOCATION.message());
return;
}
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
int size = PreParameters.cleanNull(PrimitiveCodec.readVarInt(bais), 0);
IntStream.range(0, size).forEach(i -> {
String host = PrimitiveCodec.readString(bais);
Integer port = PrimitiveCodec.readVarInt(bais);
NetAddress address = new NetAddress(host, port);
coordinatorAddresses.add(address);
});
coordinatorAddresses.stream().filter(address -> !address.equals(channel.remoteAddress())).forEach(address -> executorService.submit(() -> listenLeaderChannels.computeIfAbsent(address, a -> {
try {
Channel ch = netService.newChannel(address);
ch.registerMessageListener(this::connected);
ch.send(PING.message(Tags.RAFT_SERVICE));
log.info("Open coordinator channel, address: [{}]", address);
return ch;
} catch (Exception e) {
log.error("Open coordinator channel error, address: {}", address, e);
}
return null;
})));
lastUpdateNotLeaderChannelsTime = System.currentTimeMillis();
}
Aggregations