PCMHandleClient.cpp

Go to the documentation of this file.
00001 
00002 //
00003 // This source file is a part of ParCompMark
00004 // Parallel Compositing Benchmark Framework
00005 //
00006 // for latest info see http://parcompmark.sourceforge.net
00007 
00008 //
00009 // Copyright (C) 2006 IT2 ParCompMark Dev. Team
00010 // 
00011 // This program is free software; you can redistribute it and/or
00012 // modify it under the terms of the GNU General Public License
00013 // as published by the Free Software Foundation; either version 2
00014 // of the License, or (at your option) any later version.
00015 // 
00016 // This program is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU General Public License for more details.
00020 // 
00021 // You should have received a copy of the GNU General Public License
00022 // along with this program; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 
00025 //
00026 // Inner includes
00027 //
00028 
00029 #include "../include/PCMHandleClient.h"
00030 
00031 #include "../include/PCMNetServer.h"
00032 
00033 #include "../include/PCMOutputNode.h"
00034 
00035 namespace ParCompMark
00036 {
00037 
00038   //
00039   // Constructors & destructor
00040   //
00041 
00042   HandleClient::HandleClient(const NetServer * net):
00043         // Parent initializer 
00044   Client("HandleClient thread"  /* Name of the thread. */
00045         )
00046   {
00047         mParent = (NetServer *) net;
00048         mInitialized = false;
00049 
00050         initialize();
00051   }
00052 
00053  /*----------------------------------------------------------------------*/
00054 
00055   HandleClient::~HandleClient()
00056   {
00057 
00058         if(mInitialized)
00059         {
00060          finalize();
00061         }
00062 
00063   }
00064 
00065  /*----------------------------------------------------------------------*/
00066 
00067   //
00068   // Methods
00069   //
00070 
00071   void HandleClient::initialize()
00072   {
00073         Assert(!mInitialized, INVALID_OPERATION_ERROR, "HandleClient::initialize()");
00074 
00075         mInitialized = true;
00076   }
00077 
00078  /*----------------------------------------------------------------------*/
00079 
00080   void HandleClient::finalize()
00081   {
00082         Assert(mInitialized, INVALID_OPERATION_ERROR, "HandleClient::finalize()");
00083 
00084         if(mStreamSocket != -1)
00085         {
00086          close(mStreamSocket);
00087          mStreamSocket = -1;
00088         }
00089 
00090         mInitialized = false;
00091   }
00092 
00093  /*----------------------------------------------------------------------*/
00094 
00095   void HandleClient::openConnection()
00096   {
00097         Assert(mStreamSocket != -1, INVALID_OPERATION_ERROR, "HandleClient::task()");
00098 
00099         return;
00100   }
00101 
00102  /*----------------------------------------------------------------------*/
00103 
00104   void HandleClient::task()
00105   {
00106         Assert(mStreamSocket != -1, INVALID_OPERATION_ERROR, "HandleClient::task()");
00107 
00108         recieveMessage();
00109 
00110         handleMessage();
00111 
00112         NetServer::IntPointer p = ((NetServer *) mParent)->getRecievedNumber();
00113 
00114         p.lock();
00115 
00116         (*p.getPtr())++;
00117 
00118         if(*p.getPtr() == ((NetServer *) mParent)->getHostNumber())
00119         {
00120          ((NetServer *) mParent)->go();
00121         }
00122 
00123         p.unlock();
00124 
00125         delete this;
00126 
00127   }
00128 
00129  /*----------------------------------------------------------------------*/
00130 
00131 }