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

org.bdware.irp3.client.ClientHandler Maven / Gradle / Ivy

package org.bdware.irp3.client;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.irp3.body.ClientAuthResponse;
import org.bdware.irp3.codec.MessageBody;

import java.util.Random;

public class ClientHandler extends SimpleChannelInboundHandler {
    public Channel channel;
    static Logger LOGGER = LogManager.getLogger(ClientHandler.class);
    ResponseWait sync = new ResponseWait(new IrpMessageBodyTimeoutCreator());
    Random random = new Random();
    private IrpClient client;

    public void setChannel(Channel channel) {
        this.channel = channel;
    }


    public void sendMessage(MessageBody request, ResultCallback callback, int timeoutInSeconds) {
        if (callback == null) {
            LOGGER.error("ResultCallback is null, please check!");
        }
        if (request.getRequestID() == 0) {
            request.setRequestID(random.nextInt());
            while (!sync.waitResponse(request.getRequestID(), callback, timeoutInSeconds)) {
                request.setRequestID(random.nextInt());
            }
        } else {
            if (!sync.waitResponse(request.getRequestID(), callback, timeoutInSeconds)) {
                LOGGER.debug("duplicate requestID, please check");
            }
        }
        channel.writeAndFlush(request);
    }


    @Override
    protected void channelRead0(ChannelHandlerContext ctx, MessageBody msg) throws Exception {
        LOGGER.info("ClientHandler Recv:" + msg.toString());
        if (msg instanceof ClientAuthResponse) {
            client.onChallengeRequest((ClientAuthResponse) msg);
        } else {
            sync.wakeUpAndRemove(msg.getRequestID(), msg);
        }
    }

    public void setClient(IrpClient irpClient) {
        this.client = irpClient;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy