socket_client_pos.hpp
Go to the documentation of this file.
00001 
00010 /*****************************************************************************
00011 ** Ifdefs
00012 *****************************************************************************/
00013 
00014 #ifndef ECL_DEVICES_SOCKET_CLIENT_POS_HPP_
00015 #define ECL_DEVICES_SOCKET_CLIENT_POS_HPP_
00016 
00017 /*****************************************************************************
00018 ** Cross platform
00019 *****************************************************************************/
00020 
00021 #include <ecl/config/ecl.hpp>
00022 #ifndef ECL_IS_APPLE
00023 #ifdef ECL_IS_POSIX
00024 
00025 
00026 /*****************************************************************************
00027 ** Includes
00028 *****************************************************************************/
00029 
00030 #include <arpa/inet.h> // inet_addr()
00031 #include <errno.h>
00032 #include <string>
00033 #include <sys/ioctl.h> // used in remaining()
00034 #include <sys/socket.h>
00035 #include <ecl/exceptions/macros.hpp>
00036 #include <ecl/exceptions/standard_exception.hpp>
00037 #include "socket_connection_status.hpp"
00038 #include "detail/socket_error_handler_pos.hpp"
00039 #include "traits.hpp"
00040 
00041 /*****************************************************************************
00042 ** Namespaces
00043 *****************************************************************************/
00044 
00045 namespace ecl {
00046 
00047 /*****************************************************************************
00048 ** Interface [SocketClient]
00049 *****************************************************************************/
00064 class SocketClient {
00065 public:
00066         /*********************
00067         ** C&D
00068         **********************/
00069         SocketClient() : is_open(false), error_handler(NoError) {}; 
00081         SocketClient(const std::string &host_name, const unsigned int &port_number = 5555) ecl_throw_decl(StandardException);
00082         virtual ~SocketClient() { close(); } 
00084         /*********************
00085         ** Configuration
00086         **********************/
00098         bool open( const std::string &hostname, const unsigned int& port_number ) ecl_throw_decl(StandardException);
00099         void close(); 
00101         bool open() const { return is_open; }
00102 
00103         /*********************
00104         ** Writing
00105         **********************/
00114         long write(const char &c) ecl_debug_throw_decl(StandardException);
00115 
00124         long write(const char *s, unsigned long n) ecl_debug_throw_decl(StandardException);
00125 
00132         void flush() {}
00133 
00134         /*********************
00135         ** Reading
00136         **********************/
00144         long remaining();
00153     long read(char &c) ecl_debug_throw_decl(StandardException);
00173     long read(char *s, const unsigned long &n) ecl_debug_throw_decl(StandardException);
00186     long peek(char*s, const unsigned long &n) ecl_debug_throw_decl(StandardException);
00187 
00191         const Error& error() const { return error_handler; }
00192 
00193 private:
00194     std::string hostname;
00195     int port;
00196     int socket_fd;
00197     bool is_open;
00198     ecl::Error error_handler;
00199 };
00200 
00201 /*****************************************************************************
00202 ** Traits [Serial]
00203 *****************************************************************************/
00209 template <>
00210 class is_sink<SocketClient> : public True {};
00211 
00217 template <>
00218 class is_source<SocketClient> : public True {};
00219 
00225 template <>
00226 class is_sourcesink<SocketClient> : public True {};
00227 
00228 } // namespace ecl
00229 
00230 #endif  /* ECL_IS_POSIX */
00231 #endif  /* !ECL_IS_APPLE */
00232 
00233 #endif /* ECL_DEVICES_SOCKET_CLIENT_POS_HPP_ */


ecl_devices
Author(s): Daniel Stonier
autogenerated on Wed Aug 26 2015 11:27:37