Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

MessageClient.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 /*! \file MessageClient.cpp
00003 *  \brief Defines the base classes used by the application to communicate.
00004 *  \author $Author: rsharo $
00005 *  \version $Revision: 1.1 $
00006 *  \date    $Date: 2004/04/07 13:45:04 $
00007 *///////////////////////////////////////////////////////////////////////////////
00008 #include "Comm/MessageClient.h"
00009 
00010 
00011 
00012 int MessageClient::Register(MessageServer *pServer)
00013 {
00014         if (m_pServer != NULL)
00015         {
00016                 ACE_ERROR_RETURN((LM_ERROR,
00017                         "(%N:%l) Attempt register a message client twice.\n"),
00018                         -1);
00019         }
00020         
00021         int retVal = pServer->RegisterClient(m_id, this);
00022                 
00023         return retVal;
00024 }
00025 
00026 
00027 
00028 int MessageClient::Deregister()
00029 {
00030         if (m_pServer == NULL)
00031                 return -1;
00032         
00033         int retVal = m_pServer->RemoveClient(m_id, this);
00034                 
00035         return retVal;
00036 }
00037 
00038 
00039 
00040 //
00041 // Constructs a multi-message client.
00042 MultiMessageClient::MultiMessageClient(u_int *id, u_int numIDs)
00043         : m_numChildren(numIDs)
00044 {
00045         m_ppChildren = new MC *[m_numChildren];
00046 
00047         for (u_int i = 0; i < m_numChildren; ++i)
00048         {
00049                 m_ppChildren[i] = new MC(id[i], this);
00050         }
00051 }
00052 
00053 //
00054 // Virtual destructor for the multi-message client.
00055 MultiMessageClient::~MultiMessageClient()
00056 {
00057         for (u_int i = 0; i < m_numChildren; ++i)
00058         {
00059                 delete m_ppChildren[i];
00060         }
00061 
00062         delete [] m_ppChildren;
00063 }
00064 
00065 
00066 //
00067 // If registered with a message server with the given origination ID,
00068 // this method sends a message to another client.
00069 // It returns -1 on error and the number of bytes sent on success.
00070 int MultiMessageClient::SendMessage(u_int originator, const void *msg, size_t len, u_int dest)
00071 {
00072         for (u_int i = 0; i < m_numChildren; ++i)
00073         {
00074                 if (m_ppChildren[i]->id() == originator)
00075                 {
00076                         return m_ppChildren[i]->SendMessage(msg, len, dest);
00077                 }
00078         }
00079 
00080         ACE_ERROR_RETURN((LM_ERROR,
00081                 "(%N:%l) Attempt to send a message with ID for which the client"
00082                 " is not registered.\n"),
00083                 -1);
00084 }
00085 
00086 //
00087 // Registers this client with a message server.
00088 // Returns 0 if all IDs successfully register and -1 on any failure.
00089 int MultiMessageClient::Register(MessageServer *pServer)
00090 {
00091         int retVal = 0;
00092 
00093         for (u_int i = 0; i < m_numChildren; ++i)
00094         {
00095                 if (m_ppChildren[i]->Register(pServer) == -1)
00096                 {
00097                         retVal = -1;
00098                 }
00099         }
00100 
00101         return -1;
00102 }
00103 
00104 //
00105 // Deregisters this client with its message server.
00106 // Returns 0 if all IDs successfully deregister and -1 on any failure.
00107 int MultiMessageClient::Deregister()
00108 {
00109         int retVal = 0;
00110 
00111         for (u_int i = 0; i < m_numChildren; ++i)
00112         {
00113                 if (m_ppChildren[i]->Deregister() == -1)
00114                 {
00115                         retVal = -1;
00116                 }
00117         }
00118 
00119         return -1;
00120 }
00121 

Generated on Wed Sep 5 12:54:22 2007 for DSACSS Operational Code by  doxygen 1.3.9.1