-
Alessio Igor Bogani authored48babcab
Socket2.h 6.77 KiB
/*----- PROTECTED REGION ID(Socket2.h) ENABLED START -----*/
//=============================================================================
//
// file : Socket2.h
//
// description : Include file for the Socket2 class
//
// project :
//
// This file is part of Tango device class.
//
// Tango is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tango is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Tango. If not, see <http://www.gnu.org/licenses/>.
//
// $Author: alessio $
//
// $Revision: 1.11 $
// $Date: 2018-05-09 16:06:06 $
//
// $HeadURL: $
//
//=============================================================================
// This file is generated by POGO
// (Program Obviously used to Generate tango Object)
//=============================================================================
#ifndef Socket2_H
#define Socket2_H
#include <tango.h>
#include <netdb.h>
/*----- PROTECTED REGION END -----*/ // Socket2.h
#ifdef TANGO_LOG
// cppTango after c934adea (Merge branch 'remove-cout-definition' into 'main', 2022-05-23)
// nothing to do
#else
// cppTango 9.3-backports and older
#define TANGO_LOG cout
#define TANGO_LOG_INFO cout2
#define TANGO_LOG_DEBUG cout3
#endif // TANGO_LOG
/**
* Socket2 class description:
*
*/
namespace Socket2_ns
{
/*----- PROTECTED REGION ID(Socket2::Additional Class Declarations) ENABLED START -----*/
// Additional Class Declarations
/*----- PROTECTED REGION END -----*/ // Socket2::Additional Class Declarations
class Socket2 : public TANGO_BASE_CLASS
{
/*----- PROTECTED REGION ID(Socket2::Data Members) ENABLED START -----*/
// Add your own data members
string init_error;
int fd;
int conn_state;
enum event_type {READ, WRITE};
vector<unsigned char> data;
int reconnections;
enum {SLEEP, SELECT} multiplexing;
timeval timeout_timeval, tout;
enum {TCP, UDP} proto;
sockaddr_in sa;
socklen_t sa_len;
/*----- PROTECTED REGION END -----*/ // Socket2::Data Members
// Device property data members
public:
// Hostname:
std::string hostname;
// Port:
Tango::DevLong port;
// Protocol:
std::string protocol;
// Timeout:
Tango::DevLong timeout;
// IOMultiplexing: Use `sleep` for fixed sleep and `select` for the syscall of the same name
std::string iOMultiplexing;
bool mandatoryNotDefined;
// Attribute data members
public:
Tango::DevLong *attr_InputLength_read;
Tango::DevLong *attr_OutputLength_read;
Tango::DevLong *attr_Reconnections_read;
// Constructors and destructors
public:
/**
* Constructs a newly device object.
*
* @param cl Class.
* @param s Device Name
*/
Socket2(Tango::DeviceClass *cl,std::string &s);
/**
* Constructs a newly device object.
*
* @param cl Class.
* @param s Device Name
*/
Socket2(Tango::DeviceClass *cl,const char *s);
/**
* Constructs a newly device object.
*
* @param cl Class.
* @param s Device name
* @param d Device description.
*/
Socket2(Tango::DeviceClass *cl,const char *s,const char *d);
/**
* The device object destructor.
*/
~Socket2();
// Miscellaneous methods
public:
/*
* will be called at device destruction or at init command.
*/
void delete_device();
/*
* Initialize the device
*/
virtual void init_device();
/*
* Read the device properties from database
*/
void get_device_property();
/*
* Always executed method before execution command method.
*/
virtual void always_executed_hook();
/*
* Check if mandatory property has been set
*/
void check_mandatory_property(Tango::DbDatum &class_prop, Tango::DbDatum &dev_prop);
// Attribute methods
public:
//--------------------------------------------------------
/*
* Method : Socket2::read_attr_hardware()
* Description: Hardware acquisition for attributes.
*/
//--------------------------------------------------------
virtual void read_attr_hardware(std::vector<long> &attr_list);
/**
* Attribute InputLength related methods
*
*
* Data type: Tango::DevLong
* Attr type: Scalar
*/
virtual void read_InputLength(Tango::Attribute &attr);
virtual bool is_InputLength_allowed(Tango::AttReqType type);
/**
* Attribute OutputLength related methods
*
*
* Data type: Tango::DevLong
* Attr type: Scalar
*/
virtual void read_OutputLength(Tango::Attribute &attr);
virtual bool is_OutputLength_allowed(Tango::AttReqType type);
/**
* Attribute Reconnections related methods
*
*
* Data type: Tango::DevLong
* Attr type: Scalar
*/
virtual void read_Reconnections(Tango::Attribute &attr);
virtual bool is_Reconnections_allowed(Tango::AttReqType type);
//--------------------------------------------------------
/**
* Method : Socket2::add_dynamic_attributes()
* Description: Add dynamic attributes if any.
*/
//--------------------------------------------------------
void add_dynamic_attributes();
// Command related methods
public:
/**
* Command Write related method
*
*
* @param argin
*/
virtual void write(const Tango::DevVarCharArray *argin);
virtual bool is_Write_allowed(const CORBA::Any &any);
/**
* Command Read related method
*
*
* @param argin
* @returns
*/
virtual Tango::DevVarCharArray *read(Tango::DevLong argin);
virtual bool is_Read_allowed(const CORBA::Any &any);
/**
* Command ReadUntil related method
*
*
* @param argin
* @returns
*/
virtual Tango::DevVarCharArray *read_until(const Tango::DevVarCharArray *argin);
virtual bool is_ReadUntil_allowed(const CORBA::Any &any);
//--------------------------------------------------------
/**
* Method : Socket2::add_dynamic_commands()
* Description: Add dynamic commands if any.
*/
//--------------------------------------------------------
void add_dynamic_commands();
/*----- PROTECTED REGION ID(Socket2::Additional Method prototypes) ENABLED START -----*/
// Additional Method prototypes
bool sleep(timeval);
void open();
int input_queue_length();
int output_queue_length();
void close();
ssize_t _write(int, const void*, size_t);
void _read(size_t);
void check_state(bool);
bool wait_for(event_type);
void resolve();
/*----- PROTECTED REGION END -----*/ // Socket2::Additional Method prototypes
};
/*----- PROTECTED REGION ID(Socket2::Additional Classes Definitions) ENABLED START -----*/
// Additional Classes Definitions
/*----- PROTECTED REGION END -----*/ // Socket2::Additional Classes Definitions
} // End of namespace
#endif // Socket2_H