Example usage for io.netty.channel.group ChannelMatcher ChannelMatcher

List of usage examples for io.netty.channel.group ChannelMatcher ChannelMatcher

Introduction

In this page you can find the example usage for io.netty.channel.group ChannelMatcher ChannelMatcher.

Prototype

ChannelMatcher

Source Link

Usage

From source file:com.github.mrstampy.gameboot.netty.NettyConnectionRegistry.java

License:Open Source License

private ChannelMatcher createMatcher(SystemIdKey... except) {
    if (except == null || except.length == 0)
        return NOOP_MATCHER;

    List<Channel> exceptions = new ArrayList<>();
    for (SystemIdKey key : except) {
        Channel c = get(key);/*from  w ww.  j a v  a2 s  . co m*/
        if (c != null)
            exceptions.add(c);
    }

    return exceptions.isEmpty() ? NOOP_MATCHER : new ChannelMatcher() {

        @Override
        public boolean matches(Channel channel) {
            return !exceptions.contains(channel);
        }
    };
}

From source file:de.saxsys.synchronizefx.netty.base.server.NettyBasicServer.java

License:Open Source License

@Override
public void sendToAllExcept(final List<Command> commands, final Object nonReciver) {
    clients.writeAndFlush(commands, new ChannelMatcher() {
        @Override//  w  ww .j ava 2 s.  co m
        public boolean matches(final Channel candidate) {
            return candidate != nonReciver;
        }
    });
}

From source file:org.jupiter.registry.ConfigServer.java

License:Apache License

private void handlePublish(RegisterMeta meta, Channel channel) {

    logger.info("Publish {} on channel{}.", meta, channel);

    attachPublishEventOnChannel(meta, channel);

    final ServiceMeta serviceMeta = meta.getServiceMeta();
    ConfigWithVersion<ConcurrentMap<Address, RegisterMeta>> config = registerInfoContext
            .getRegisterMeta(serviceMeta);

    synchronized (registerInfoContext.publishLock(config)) {
        // putIfAbsentconfig.newVersion()???, ?
        if (config.getConfig().putIfAbsent(meta.getAddress(), meta) == null) {
            registerInfoContext.getServiceMeta(meta.getAddress()).add(serviceMeta);

            final Message msg = new Message();
            msg.sign(PUBLISH_SERVICE);//  www.  j  a v  a  2s.  c o  m
            msg.setVersion(config.newVersion()); // ?+1
            List<RegisterMeta> registerMetaList = Lists.newArrayList(config.getConfig().values());
            // ????meta??
            msg.data(new Pair<>(serviceMeta, registerMetaList));

            subscriberChannels.writeAndFlush(msg, new ChannelMatcher() {

                @Override
                public boolean matches(Channel channel) {
                    boolean doSend = isChannelSubscribeOnServiceMeta(serviceMeta, channel);
                    if (doSend) {
                        MessageNonAck msgNonAck = new MessageNonAck(serviceMeta, msg, channel);
                        // ack??key(??handleAcknowledge), ???
                        messagesNonAck.put(msgNonAck.id, msgNonAck);
                    }
                    return doSend;
                }
            });
        }
    }
}

From source file:org.jupiter.registry.ConfigServer.java

License:Apache License

private void handlePublishCancel(RegisterMeta meta, Channel channel) {

    logger.info("Cancel publish {} on channel{}.", meta, channel);

    attachPublishCancelEventOnChannel(meta, channel);

    final ServiceMeta serviceMeta = meta.getServiceMeta();
    ConfigWithVersion<ConcurrentMap<Address, RegisterMeta>> config = registerInfoContext
            .getRegisterMeta(serviceMeta);
    if (config.getConfig().isEmpty()) {
        return;//from   w w w. java 2 s .c o  m
    }

    synchronized (registerInfoContext.publishLock(config)) {
        // putIfAbsentconfig.newVersion()???, ?
        Address address = meta.getAddress();
        RegisterMeta data = config.getConfig().remove(address);
        if (data != null) {
            registerInfoContext.getServiceMeta(address).remove(serviceMeta);

            final Message msg = new Message();
            msg.sign(PUBLISH_SERVICE);
            msg.setVersion(config.newVersion()); // ?+1
            List<RegisterMeta> registerMetaList = Lists.newArrayList(config.getConfig().values());
            // ????meta??
            msg.data(new Pair<>(serviceMeta, registerMetaList));

            subscriberChannels.writeAndFlush(msg, new ChannelMatcher() {

                @Override
                public boolean matches(Channel channel) {
                    boolean doSend = isChannelSubscribeOnServiceMeta(serviceMeta, channel);
                    if (doSend) {
                        MessageNonAck msgNonAck = new MessageNonAck(serviceMeta, msg, channel);
                        // ack??key(??handleAcknowledge), ???
                        messagesNonAck.put(msgNonAck.id, msgNonAck);
                    }
                    return doSend;
                }
            });
        }
    }
}

From source file:org.jupiter.registry.DefaultRegistryServer.java

License:Apache License

private void handlePublish(RegisterMeta meta, Channel channel) {

    logger.info("Publish {} on channel{}.", meta, channel);

    attachPublishEventOnChannel(meta, channel);

    final RegisterMeta.ServiceMeta serviceMeta = meta.getServiceMeta();
    ConfigWithVersion<ConcurrentMap<RegisterMeta.Address, RegisterMeta>> config = registerInfoContext
            .getRegisterMeta(serviceMeta);

    synchronized (registerInfoContext.publishLock(config)) {
        // putIfAbsentconfig.newVersion()???, ?
        if (config.getConfig().putIfAbsent(meta.getAddress(), meta) == null) {
            registerInfoContext.getServiceMeta(meta.getAddress()).add(serviceMeta);

            final Message msg = new Message(serializerType.value());
            msg.messageCode(JProtocolHeader.PUBLISH_SERVICE);
            msg.version(config.newVersion()); // ?+1
            msg.data(Pair.of(serviceMeta, meta));

            subscriberChannels.writeAndFlush(msg, new ChannelMatcher() {

                @Override//from w w w .j a v a 2s  .c  o  m
                public boolean matches(Channel channel) {
                    boolean doSend = isChannelSubscribeOnServiceMeta(serviceMeta, channel);
                    if (doSend) {
                        MessageNonAck msgNonAck = new MessageNonAck(serviceMeta, msg, channel);
                        // ack??key(??handleAcknowledge), ???
                        messagesNonAck.put(msgNonAck.id, msgNonAck);
                    }
                    return doSend;
                }
            });
        }
    }
}

From source file:org.jupiter.registry.DefaultRegistryServer.java

License:Apache License

private void handlePublishCancel(RegisterMeta meta, Channel channel) {

    logger.info("Cancel publish {} on channel{}.", meta, channel);

    attachPublishCancelEventOnChannel(meta, channel);

    final RegisterMeta.ServiceMeta serviceMeta = meta.getServiceMeta();
    ConfigWithVersion<ConcurrentMap<RegisterMeta.Address, RegisterMeta>> config = registerInfoContext
            .getRegisterMeta(serviceMeta);
    if (config.getConfig().isEmpty()) {
        return;//from  ww w .jav a  2s  . c  o m
    }

    synchronized (registerInfoContext.publishLock(config)) {
        // putIfAbsentconfig.newVersion()???, ?
        RegisterMeta.Address address = meta.getAddress();
        RegisterMeta data = config.getConfig().remove(address);
        if (data != null) {
            registerInfoContext.getServiceMeta(address).remove(serviceMeta);

            final Message msg = new Message(serializerType.value());
            msg.messageCode(JProtocolHeader.PUBLISH_CANCEL_SERVICE);
            msg.version(config.newVersion()); // ?+1
            msg.data(Pair.of(serviceMeta, data));

            subscriberChannels.writeAndFlush(msg, new ChannelMatcher() {

                @Override
                public boolean matches(Channel channel) {
                    boolean doSend = isChannelSubscribeOnServiceMeta(serviceMeta, channel);
                    if (doSend) {
                        MessageNonAck msgNonAck = new MessageNonAck(serviceMeta, msg, channel);
                        // ack??key(??handleAcknowledge), ???
                        messagesNonAck.put(msgNonAck.id, msgNonAck);
                    }
                    return doSend;
                }
            });
        }
    }
}