All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rx.net.support.EndpointTracer Maven / Gradle / Ivy

package org.rx.net.support;

import io.netty.channel.Channel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.rx.bean.Tuple;
import org.rx.core.Cache;

import java.net.SocketAddress;

@Slf4j
public final class EndpointTracer {
    @RequiredArgsConstructor
    static class LinkedData {
        final SocketAddress head;
//        final List nodes = new CopyOnWriteArrayList<>();
    }

    final Cache, LinkedData> index = Cache.getInstance(Cache.MEMORY_CACHE);

    Tuple key(SocketAddress sa) {
        return Tuple.of("EndpointTracer", sa);
    }

    public void link(Channel inbound, Channel outbound) {
        LinkedData data = index.get(key(outbound.remoteAddress()), k -> new LinkedData(inbound.remoteAddress()));
//        data.nodes.addAll(Arrays.toList(inbound.remoteAddress(), inbound.localAddress(), outbound.localAddress(), outbound.remoteAddress()));
        index.put(key(outbound.localAddress()), data);
//        log.info("tracer link h={} {}", data.head, String.join(" => ", NQuery.of(data.nodes).select(Object::toString)));
    }

    public SocketAddress head(Channel channel) {
        LinkedData data = index.get(key(channel.remoteAddress()));
        SocketAddress head = data == null ? channel.remoteAddress() : data.head;
//        log.info("tracer head {}{} {}", head, data == null ? "[NOT_FOUND]" : "",
//                data == null ? "" : String.join(" => ", NQuery.of(data.nodes).select(Object::toString)));
        return head;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy