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

org.bdware.irp2.irpclient.NettyIrpClientChannel Maven / Gradle / Ivy

package org.bdware.irp2.irpclient;

import io.netty.channel.Channel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.irp2.irplib.core.IrpMessage;

import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;

public abstract class NettyIrpClientChannel implements IrpClientChannel {
    static Logger logger = LogManager.getLogger(NettyIrpClientChannel.class);
    protected NettyIrpClientHandler handler;
    InetSocketAddress remoteAddress;
    protected boolean isConnected = false;
    protected Channel channel;

    public static IrpClientChannel createByServerUrl(String url) {
        try {
            URI uri = new URI(url);
            logger.debug("[URI Parse]scheme:" + uri.getScheme() + "  host: " + uri.getHost() + "  port: " + uri.getPort());
            switch (uri.getScheme()) {
                case "udp":
                case "UDP":
                case "tcp":
                case "TCP":
                    return new NettyIrpTCPClientChannel();
                case "quic":
                case "QUIC":
                    return new NettyIrpQuicClientChannel();
                default:
                    logger.error("unsupported transfer scheme");
                    return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public void sendMessage(IrpMessage message, IrpMessageCallback cb) {
        if (handler == null) {
            logger.error("client handler not set yet");
            return;
        }
        if (!isConnected) {
            logger.error("client not connected, connect first!");
        }

/*        if(GlobalCertifications.needAuthentication || GlobalCertifications.secureMode){
            try {
                CryptoUtils.signIrpMessage(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }

        message.header.setIsEncrypted(GlobalCertifications.secureMode);*/


/*        if(message.getSender() == null)
            message.setSender(remoteAddress);*/
        handler.sendMessage(message, cb);
    }

    @Override
    abstract public void connect(String url) throws URISyntaxException;

    @Override
    public boolean isConnected() {
        return channel != null && channel.isActive();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy