Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

FileFactory Class Reference

#include <FileFactory.hpp>

Inheritance diagram for FileFactory::

Basic_PThread List of all members.

Public Methods

 FileFactory ()
virtual void run ()
void init ()
void checkIfEmpty ()
void emptyPacket ()
void validPacket ()
void directWrite (TFTP_Packet *pkt)

Private Attributes

ULONG blocksize
TFTP_Packetpacket
ULONG expectedBlockNo
bool initialized
size_t sz
long rc
size_t length
short block
bool empty

Constructor & Destructor Documentation

FileFactory::FileFactory  
 

Definition at line 6 of file FileFactory.cpp.

00007  : Basic_PThread(),
00008   expectedBlockNo( 1 ), initialized( FALSE ),
00009   sz( 0 ), rc( 0 ), length( 0 ), block( 0 ), empty( TRUE )
00010 {
00011   blocksize = option.getBlockSizeValue();
00012 }


Member Function Documentation

void FileFactory::checkIfEmpty  
 

Definition at line 34 of file FileFactory.cpp.

Referenced by run().

00035 {
00036   while ( empty == TRUE ) 
00037   { 
00038     option.rwlock5_data_queue.read();
00039     empty = option.data_queue->isEmpty();
00040     option.rwlock5_data_queue.releaseRead();
00041    
00042     if ( empty == TRUE )
00043     {
00044         printf("Empty Packet\n");
00045         sched_yield();  // it's empty, yield.
00046     }
00047   }
00048 }

void FileFactory::directWrite TFTP_Packet   pkt
 

Definition at line 64 of file FileFactory.cpp.

00065 {
00066   init();
00067   packet = pkt;
00068   validPacket();
00069 }

void FileFactory::emptyPacket  
 

Definition at line 50 of file FileFactory.cpp.

Referenced by run().

00051 {
00052     option.rwlock5_data_queue.read();
00053 
00054 #ifdef DEBUG
00055   printf( "Packet null in list, size=%d\n", option.data_queue->size() );
00056   option.data_queue->display();
00057 #endif
00058 
00059   option.rwlock5_data_queue.releaseRead();
00060   fflush( stdout );
00061   sched_yield();
00062 }

void FileFactory::init  
 

Definition at line 14 of file FileFactory.cpp.

Referenced by directWrite(), and run().

00015 {
00016   if ( initialized == TRUE ) return;
00017   initialized = TRUE;
00018   expectedBlockNo = 1;
00019   sz     = 0;
00020   rc     = 0;
00021   length = 0;
00022   block  = 0;
00023   empty  = TRUE;
00024 
00025   printf( "FileFactory::init\n");
00026   fflush( stdout );
00027 
00028   option.openFile( "wb" );
00029   option.rwlock2_file.read();
00030   option.myFile->setBegin();
00031   option.rwlock2_file.releaseRead();
00032 }

void FileFactory::run   [virtual]
 

Reimplemented from Basic_PThread.

Definition at line 150 of file FileFactory.cpp.

00151 {
00152   init(); 
00153   
00154   while ( option.isConnected() || !option.data_queue->isEmpty() )
00155   {
00156     checkIfEmpty();
00157 
00158     // Read data in Write mode (modifying structure) 
00159     option.rwlock5_data_queue.write();
00160     packet = option.data_queue->dequeue();        
00161     option.rwlock5_data_queue.releaseWrite();
00162     
00163     if ( packet != NULL ) 
00164     {
00165       validPacket();
00166 
00167     } else {  // List is empty ?!
00168 
00169       if ( option.isEnding() ) return;
00170 
00171       emptyPacket();
00172       //      sched_yield();
00173     }
00174 
00175   } // end while()
00176 }

void FileFactory::validPacket  
 

Definition at line 71 of file FileFactory.cpp.

Referenced by directWrite(), and run().

00072 {
00073   block = packet->getBlockNo();
00074 
00075   if ( block == expectedBlockNo ) 
00076   {
00077     printf( "\nThis packet was in order: %d / %d\n", block, expectedBlockNo );
00078     fflush( stdout );
00079 
00080     option.rwlock2_file.read(); // Read filedes to write on file
00081     length = packet->getpktLength() - 4;
00082     if ( length > 0 ) 
00083     { 
00084       printf( "\nWriting to file: #%d, length %d\n", block, length );
00085       fflush( stdout );
00086 
00087 #ifdef DEBUG
00088       option.showChar( "Data",  packet->getData(), length );
00089 #endif
00090 
00091       sz = option.myFile->putData( packet->getData(), length, option.getBlockSizeValue() );
00092 
00093     } else if (length == 0)
00094     {
00095         sz = 0;
00096         printf( "\nNothing to write to file: #%d, length %d\n", block, length );
00097         fflush( stdout );
00098     } else 
00099     {   
00100       printf( "\nDid NOT write to file: #%d, length %d\n", block, length );
00101       fflush( stdout );
00102     }
00103 
00104     option.rwlock2_file.releaseRead();
00105     expectedBlockNo++; 
00106 
00107     // Last Packet;
00108     if ( sz < option.getBlockSizeValue() ) 
00109     {
00110       printf( "\nThis shall be the last packet of size %d out of %d #%d\n", \
00111               sz, option.getBlockSizeValue(), block );
00112 
00113       if ( option.myFile != NULL ) {
00114         delete option.myFile;
00115         option.myFile = NULL;
00116       }
00117       fflush( stdout );
00118 
00119       if ( option.isReading() ) {
00120         option.state = TFTP_EndofRead;
00121       } else if ( option.isWriting() ) {
00122         option.state = TFTP_EndofWrite;
00123       } else {
00124         option.state = TFTP_Finished;
00125       }
00126       return;
00127     }
00128     else
00129     {
00130         printf("This aint the last packet\n");
00131         printf("The size is %d, Blocksize is %d\n",sz,option.getBlockSizeValue());
00132     }
00133     
00134     // It's 1 NOT 0, since 0 means we started!
00135     // Loop the Window size.
00136     if ( (expectedBlockNo-1) > option.getWindowSizeValue() ) 
00137     {
00138         //No need for this
00139      // expectedBlockNo = 1;   
00140     }
00141 
00142     } else   { // Trash Packet.
00143      printf( "\nTrashing Data Packet# %d / %d\n", block, expectedBlockNo );
00144      fflush( stdout );
00145      packet = NULL;
00146      delete packet;
00147   }
00148 }


Member Data Documentation

short FileFactory::block [private]
 

Definition at line 37 of file FileFactory.hpp.

ULONG FileFactory::blocksize [private]
 

Definition at line 29 of file FileFactory.hpp.

bool FileFactory::empty [private]
 

Definition at line 38 of file FileFactory.hpp.

ULONG FileFactory::expectedBlockNo [private]
 

Definition at line 31 of file FileFactory.hpp.

bool FileFactory::initialized [private]
 

Definition at line 33 of file FileFactory.hpp.

size_t FileFactory::length [private]
 

Definition at line 36 of file FileFactory.hpp.

TFTP_Packet* FileFactory::packet [private]
 

Definition at line 30 of file FileFactory.hpp.

long FileFactory::rc [private]
 

Definition at line 35 of file FileFactory.hpp.

size_t FileFactory::sz [private]
 

Definition at line 34 of file FileFactory.hpp.


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:48:36 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001