use of io.dingodb.net.netty.packet.Packet 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.netty.packet.Packet in project dingo by dingodb.
the class NetServiceNettyConnection method openSubChannel.
@Override
public NetServiceConnectionSubChannel openSubChannel() {
NetServiceConnectionSubChannel channel = subChannels.computeIfAbsent(generateChannelId(), cid -> new NetServiceConnectionSubChannel(cid, null, this));
Future<Packet<Message>> ack = GenericMessageHandler.instance().waitAck(this, channel.channelId());
channel.send(MessagePacket.connectRemoteChannel(channel.channelId(), channel.nextSeq()));
try {
channel.targetChannelId(ack.get(heartbeat, TimeUnit.SECONDS).header().targetChannelId());
} catch (InterruptedException e) {
closeSubChannel(channel.channelId());
NetError.OPEN_CHANNEL_INTERRUPT.throwFormatError();
} catch (ExecutionException e) {
closeSubChannel(channel.channelId());
log.error("Open channel error, channel id: [{}], caller: [{}]", channel.channelId(), stack(2));
NetError.UNKNOWN.throwFormatError(e.getMessage());
} catch (TimeoutException e) {
closeSubChannel(channel.channelId());
OPEN_CHANNEL_TIME_OUT.throwFormatError();
}
if (log.isDebugEnabled()) {
log.debug("Open channel to [{}] channel [{}], this channel: [{}], caller: [{}]", remoteAddress(), channel.targetChannelId(), channel.channelId(), log.isTraceEnabled() ? stackTrace() : stack(3));
}
channel.start();
return channel;
}
Aggregations