#ifndef CMODBUSSLAVE_H
#define CMODBUSSLAVE_H

#include <QObject>
#include "ModbusBackend.h"
#include <QTcpServer>
#include "ModbusRepository.h"

class CModbusSlave : public CModbusBackend
{
    Q_OBJECT
public:
    explicit CModbusSlave(CModbusRepository *Repo);
    virtual ~CModbusSlave();

    int SetServerPort(int port);
    int StartSlaveServer(int port);
    int StopSlaveServer();
    virtual void RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length);
    virtual void ModbusRequestException(quint8 ExceptionCode, quint8 FctCode);

    int ToggleServerState();
    bool IsSlaveServerOpened();
    
private:
    QTcpServer *mModbusServer;
    int mServerPort;

signals:

    void ModbusSlaveConnected(CModbusSlave *);
    void ModbusSlaveDisconnected(CModbusSlave *);
    void ModbusSlaveRepoUpdated();
    
public slots:
    void NewModbusConnection();
    void ModbusSocketDisconnected();
    
};

#endif // CMODBUSSLAVE_H
