Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

NML_QR_CLIENT Class Reference

#include <nmlqr.hh>

Collaboration diagram for NML_QR_CLIENT:

Collaboration graph
[legend]

Public Methods

 NML_QR_CLIENT (NML_FORMAT_PTR f_ptr, char *qr_name, char *process_name, char *config_file)
 ~NML_QR_CLIENT ()
int sendQuery (NML_QUERY_MSG *)
NMLTYPE readReply ()
NMLTYPE waitForReply (double timeout)
NMLmsggetReplyAddress ()
int valid ()
int reset ()

Protected Attributes

NMLreplyChannel
NML_QUERY_CHANNELqueryChannel
NML_ID_CHANNELidChannel
int reply_subdiv

Constructor & Destructor Documentation

NML_QR_CLIENT::NML_QR_CLIENT NML_FORMAT_PTR    f_ptr,
char *    qr_name,
char *    process_name,
char *    config_file
 

Definition at line 353 of file nmlqr.cc.

00355 {
00356   queryChannel = NULL;
00357   replyChannel = NULL;
00358   idChannel = NULL;
00359   reply_subdiv = -1;
00360 
00361   char repbufname[40];
00362   sprintf (repbufname, "%sReply", qr_name);
00363   char querybufname[40];
00364   sprintf (querybufname, "%sQuery", qr_name);
00365   char idbufname[40];
00366   sprintf (idbufname, "%sID", qr_name);
00367   idChannel =
00368     new NML_ID_CHANNEL (f_ptr, idbufname, process_name, config_file);
00369   queryChannel =
00370     new NML_QUERY_CHANNEL (f_ptr, querybufname, process_name, config_file);
00371   replyChannel = new NML (f_ptr, repbufname, process_name, config_file);
00372 
00373   if (idChannel->valid () && queryChannel->valid ())
00374     {
00375       ID_REQUEST reqMsg;
00376       queryChannel->write (reqMsg);
00377       esleep (0.05);
00378       while (!idChannel->read ())
00379         {
00380           esleep (0.05);
00381         }
00382       ID_REPLY *idReply = (ID_REPLY *) idChannel->get_address ();
00383       if (idReply->type == ID_REPLY_TYPE)
00384         {
00385           reply_subdiv = idReply->subdiv;
00386         }
00387     }
00388 }

NML_QR_CLIENT::~NML_QR_CLIENT  
 

Definition at line 390 of file nmlqr.cc.

00391 {
00392   if (NULL != queryChannel)
00393     {
00394       if (reply_subdiv >= 0)
00395         {
00396           ID_DELETE idDeleteMsg;
00397           idDeleteMsg.subdiv_for_reply = reply_subdiv;
00398           idDeleteMsg.subdiv = reply_subdiv;
00399           queryChannel->write (&idDeleteMsg);
00400           esleep (0.05);
00401         }
00402       delete queryChannel;
00403       queryChannel = NULL;
00404     }
00405   if (NULL != idChannel)
00406     {
00407       delete idChannel;
00408       idChannel = NULL;
00409     }
00410   if (NULL != replyChannel)
00411     {
00412       delete replyChannel;
00413       replyChannel = NULL;
00414     }
00415 }


Member Function Documentation

int NML_QR_CLIENT::sendQuery NML_QUERY_MSG   qMsg
 

Definition at line 418 of file nmlqr.cc.

00419 {
00420   if (NULL == queryChannel)
00421     {
00422       return -1;
00423     }
00424   qMsg->subdiv_for_reply = reply_subdiv;
00425   return queryChannel->write (qMsg);
00426 }

NMLTYPE NML_QR_CLIENT::readReply  
 

Definition at line 430 of file nmlqr.cc.

00431 {
00432   if (NULL == replyChannel || reply_subdiv < 0)
00433     {
00434       return -1;
00435     }
00436   return replyChannel->read_subdivision (reply_subdiv);
00437 }

NMLTYPE NML_QR_CLIENT::waitForReply double    timeout
 

Definition at line 441 of file nmlqr.cc.

00442 {
00443   if (NULL == replyChannel || reply_subdiv < 0)
00444     {
00445       return -1;
00446     }
00447   return replyChannel->blocking_read_subdivision (reply_subdiv, timeout);
00448 }

NMLmsg * NML_QR_CLIENT::getReplyAddress  
 

Definition at line 451 of file nmlqr.cc.

00452 {
00453   if (NULL == replyChannel || reply_subdiv < 0)
00454     {
00455       return NULL;
00456     }
00457   return replyChannel->get_address_subdivision (reply_subdiv);
00458 }

int NML_QR_CLIENT::valid  
 

Definition at line 462 of file nmlqr.cc.

Referenced by reset().

00463 {
00464   if (!idChannel->valid ())
00465     {
00466       return 0;
00467     }
00468   if (!queryChannel->valid ())
00469     {
00470       return 0;
00471     }
00472   if (!replyChannel->valid ())
00473     {
00474       return 0;
00475     }
00476   if (reply_subdiv < 0)
00477     {
00478       return 0;
00479     }
00480   return 1;
00481 }

int NML_QR_CLIENT::reset  
 

Definition at line 484 of file nmlqr.cc.

00485 {
00486   if (!idChannel->valid ())
00487     {
00488       idChannel->reset ();
00489     }
00490   if (!queryChannel->valid ())
00491     {
00492       queryChannel->reset ();
00493     }
00494   if (!replyChannel->valid ())
00495     {
00496       replyChannel->reset ();
00497     }
00498   if (idChannel->valid () && queryChannel->valid () && reply_subdiv < 0)
00499     {
00500       ID_REQUEST reqMsg;
00501       queryChannel->write (reqMsg);
00502       esleep (0.05);
00503       while (!idChannel->read ())
00504         {
00505           esleep (0.05);
00506         }
00507       ID_REPLY *idReply = (ID_REPLY *) idChannel->get_address ();
00508       if (idReply->type == ID_REPLY_TYPE)
00509         {
00510           reply_subdiv = idReply->subdiv;
00511         }
00512     }
00513   return valid ();
00514 }


Field Documentation

NML* NML_QR_CLIENT::replyChannel [protected]
 

Definition at line 82 of file nmlqr.hh.

NML_QUERY_CHANNEL* NML_QR_CLIENT::queryChannel [protected]
 

Definition at line 83 of file nmlqr.hh.

NML_ID_CHANNEL* NML_QR_CLIENT::idChannel [protected]
 

Definition at line 84 of file nmlqr.hh.

int NML_QR_CLIENT::reply_subdiv [protected]
 

Definition at line 85 of file nmlqr.hh.


The documentation for this class was generated from the following files:
Generated on Sun Dec 2 15:58:51 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001