skstream
sasproto.h
00001 /**************************************************************************
00002  FreeSockets - Portable C++ classes for IP(sockets) applications. (v0.3)
00003  Copyright (C) 2000-2001 Rafael Guterres Jeffman
00004            (C) 2002-2006 Alistair Riddoch
00005 
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 **************************************************************************/
00021 
00029 #ifndef RGJ_FREE_SOCKETS_PROTOCOL_H_
00030 #define RGJ_FREE_SOCKETS_PROTOCOL_H_
00031 
00032 #include <skstream/skstream.h> // FreeSockets classes are needed
00033 #include <skstream/freethrd.h> // FreeThreads is needed for multithreading support
00034 
00035 #include <string>
00036 #include <iostream>
00037 
00038 class basic_protocol : public basic_thread {
00039 private:
00040   // Copy Constructor an d assignment operator - prevents from copying a thread
00041   // and a stream! - RGJ
00042   basic_protocol(const basic_protocol& copy);
00043   basic_protocol& operator=(const basic_protocol& copy);
00044 
00045 protected:
00046   basic_socket_stream host;
00047 
00048 public:
00049   typedef THREAD_RESULT protocol_code;
00050 
00051   // Other Constructors
00052   basic_protocol(SOCKET_TYPE sock) : basic_thread(), host(sock) {}
00053 
00054   // Destructor
00055   virtual ~basic_protocol() { host.close(); }
00056 
00057   // Set a new host
00058   void setHost(SOCKET_TYPE _sock) {
00059     if(host.is_open()) host.close();
00060     host.attach(_sock);
00061   }
00062 
00063   // Protocol function - must be implemented on derived classes
00064   virtual protocol_code run() { host.close(); return 0; }
00065 };
00066 
00067 #endif