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

com.iteaj.iot.modbus.client.tcp.ModbusTcpClientComponent Maven / Gradle / Ivy

package com.iteaj.iot.modbus.client.tcp;

import com.iteaj.iot.AbstractProtocol;
import com.iteaj.iot.SocketMessage;
import com.iteaj.iot.client.ClientConnectProperties;
import com.iteaj.iot.client.ClientProtocolException;
import com.iteaj.iot.client.MultiClientManager;
import com.iteaj.iot.client.TcpSocketClient;
import com.iteaj.iot.client.component.TcpClientComponent;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;

public class ModbusTcpClientComponent extends TcpClientComponent {

    private static final String DESC = "基于Modbus Tcp协议的Iot客户端实现";

    public ModbusTcpClientComponent() { }

    public ModbusTcpClientComponent(ClientConnectProperties config) {
        super(config);
    }

    public ModbusTcpClientComponent(ClientConnectProperties config, MultiClientManager clientManager) {
        super(config, clientManager);
    }

    @Override
    public TcpSocketClient createNewClient(ClientConnectProperties config) {
        return new ModbusTcpClient(this, config);
    }

    @Override
    public SocketMessage doTcpDecode(ChannelHandlerContext ctx, ByteBuf in) {
        SocketMessage socketMessage = super.doTcpDecode(ctx, in);
        if(socketMessage instanceof ModbusTcpClientMessage) {
            // 使用Channel id作为设备编号
            return ((ModbusTcpClientMessage) socketMessage).setEquipCode(ctx.channel().id().asShortText());
        } else {
            throw new ClientProtocolException("报文类型必须是["+ModbusTcpClientMessage.class.getSimpleName()+"]或其子类");
        }
    }

    @Override
    public ModbusTcpClientMessage createMessage(byte[] message) {
        return new ModbusTcpClientMessage(message);
    }

    @Override
    public String getName() {
        return "ModbusTcpClient";
    }

    @Override
    public String getDesc() {
        return DESC;
    }

    @Override
    public AbstractProtocol getProtocol(M message) {
        return remove(message.getHead().getMessageId());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy