INTRODUCTION
Overview
Download and Install
Documentation
Publications

REPOSITORY
Libraries

DEVELOPER
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

tcpport.h

00001 /*
00002  * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics
00003  *               http://gearbox.sf.net/
00004  * Copyright (c) 2008 Geoffrey Biggs
00005  *
00006  * flexiport flexible hardware data communications library.
00007  *
00008  * This distribution is licensed to you under the terms described in the LICENSE file included in
00009  * this distribution.
00010  *
00011  * This work is a product of the National Institute of Advanced Industrial Science and Technology,
00012  * Japan. Registration number: H20PRO-881
00013  *
00014  * This file is part of flexiport.
00015  *
00016  * flexiport is free software: you can redistribute it and/or modify it under the terms of the GNU
00017  * Lesser General Public License as published by the Free Software Foundation, either version 3 of
00018  * the License, or (at your option) any later version.
00019  *
00020  * flexiport is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
00021  * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022  * Lesser General Public License for more details.
00023  *
00024  * You should have received a copy of the GNU Lesser General Public License along with flexiport.
00025  * If not, see <http://www.gnu.org/licenses/>.
00026  */
00027 
00028 #ifndef __TCPPORT_H
00029 #define __TCPPORT_H
00030 
00031 #include "port.h"
00032 
00033 #include <map>
00034 #include <string>
00035 
00040 namespace flexiport
00041 {
00042 
00058 class FLEXIPORT_EXPORT TCPPort : public Port
00059 {
00060         public:
00061                 TCPPort (std::map<std::string, std::string> options);
00062                 ~TCPPort ();
00063 
00068                 void Open ();
00070                 void Close ();
00072                 ssize_t Read (void * const buffer, size_t count);
00074                 ssize_t ReadFull (void * const buffer, size_t count);
00076                 ssize_t BytesAvailable ();
00078                 ssize_t BytesAvailableWait ();
00080                 ssize_t Write (const void * const buffer, size_t count);
00082                 void Flush ();
00084                 void Drain ();
00086                 std::string GetStatus () const;
00088                 void SetTimeout (Timeout timeout);
00090                 void SetCanRead (bool canRead);
00092                 void SetCanWrite (bool canWrite);
00094                 bool IsOpen () const                        { return _open; }
00095 
00096         private:
00097                 int _sock;          // Socket connected to wherever the data is coming from.
00098                 int _listenSock;    // Socket to listen on when in listen mode.
00099 
00100                 std::string _ip;
00101                 unsigned int _port;
00102                 bool _isListener;   // True if this port should listen instead of actively connecting.
00103                 bool _open;
00104 
00105                 void CheckPort (bool read);
00106 
00107                 bool ProcessOption (const std::string &option, const std::string &value);
00108 
00109                 void Connect ();
00110                 void WaitForConnection ();
00111                 typedef enum {TIMED_OUT, DATA_AVAILABLE, CAN_WRITE} WaitStatus;
00112                 WaitStatus WaitForDataOrTimeout ();
00113                 bool IsDataAvailable ();
00114                 WaitStatus WaitForWritableOrTimeout ();
00115                 void SetSocketBlockingFlag ();
00116 };
00117 
00118 } // namespace flexiport
00119 
00122 #endif // __TCPPORT_H
 

Generated for GearBox by  doxygen 1.4.5