Search in sources :

Example 1 with ConnectionSubChannel

use of io.dingodb.net.netty.channel.ConnectionSubChannel 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());
    }
}
Also used : PacketMode(io.dingodb.net.netty.packet.PacketMode) Packet(io.dingodb.net.netty.packet.Packet) PacketType(io.dingodb.net.netty.packet.PacketType) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Message(io.dingodb.net.Message) TimeoutException(java.util.concurrent.TimeoutException) ErrorMessage(io.dingodb.net.netty.packet.message.ErrorMessage) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) Slf4j(lombok.extern.slf4j.Slf4j) Future(java.util.concurrent.Future) MessagePacket(io.dingodb.net.netty.packet.impl.MessagePacket) MessageDispatcher(io.dingodb.net.netty.handler.MessageDispatcher) AutoService(com.google.auto.service.AutoService) Map(java.util.Map) Optional(io.dingodb.common.util.Optional) ConnectionSubChannel(io.dingodb.net.netty.channel.ConnectionSubChannel) MessageHandler(io.dingodb.net.netty.handler.MessageHandler) Logs(io.dingodb.net.netty.utils.Logs) ChannelId(io.dingodb.net.netty.channel.ChannelId) Connection(io.dingodb.net.netty.connection.Connection) Message(io.dingodb.net.Message) ErrorMessage(io.dingodb.net.netty.packet.message.ErrorMessage) ErrorMessage(io.dingodb.net.netty.packet.message.ErrorMessage) TimeoutException(java.util.concurrent.TimeoutException)

Example 2 with ConnectionSubChannel

use of io.dingodb.net.netty.channel.ConnectionSubChannel 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);
}
Also used : SimpleMessage(io.dingodb.net.SimpleMessage) Message(io.dingodb.net.Message) ConnectionSubChannel(io.dingodb.net.netty.channel.ConnectionSubChannel) Channel(io.dingodb.net.Channel) NetServiceProvider(io.dingodb.net.NetServiceProvider) SimpleTag(io.dingodb.net.SimpleTag) Tag(io.dingodb.net.Tag)

Aggregations

Message (io.dingodb.net.Message)2 ConnectionSubChannel (io.dingodb.net.netty.channel.ConnectionSubChannel)2 AutoService (com.google.auto.service.AutoService)1 Optional (io.dingodb.common.util.Optional)1 Channel (io.dingodb.net.Channel)1 NetServiceProvider (io.dingodb.net.NetServiceProvider)1 SimpleMessage (io.dingodb.net.SimpleMessage)1 SimpleTag (io.dingodb.net.SimpleTag)1 Tag (io.dingodb.net.Tag)1 ChannelId (io.dingodb.net.netty.channel.ChannelId)1 Connection (io.dingodb.net.netty.connection.Connection)1 MessageDispatcher (io.dingodb.net.netty.handler.MessageDispatcher)1 MessageHandler (io.dingodb.net.netty.handler.MessageHandler)1 Packet (io.dingodb.net.netty.packet.Packet)1 PacketMode (io.dingodb.net.netty.packet.PacketMode)1 PacketType (io.dingodb.net.netty.packet.PacketType)1 MessagePacket (io.dingodb.net.netty.packet.impl.MessagePacket)1 ErrorMessage (io.dingodb.net.netty.packet.message.ErrorMessage)1 Logs (io.dingodb.net.netty.utils.Logs)1 HashMap (java.util.HashMap)1