SOURCE FILE: checkOP.cpp



#include <iostream>
#include <sched.h>
#include <time.h>
#include <pthread.h>
#include <string>
#include "sem.h"
#include "protocol.h"
#include <string>

using namespace std;

int main ()
{
   bool isEmptyBuf[2] = {true,true}, problem=false;

   int serial[2]= {0,0}, userOfBuf[2]={-1,-1}, 
       serialOfBuf[2]={-1,-1}, lineNum=0;
  
   int packetNum, userNum, agentNum, bufferNum ;

   string startOfLine, remainder ;

   while (cin >> startOfLine)
   {
     lineNum++ ;
     char chr=startOfLine[0] ;
     if (chr=='c' || chr=='C')
     {
       while (chr !='#') cin >> chr ; chr='@' ;
       cin >> packetNum;
       while (chr !='#') cin >> chr ; chr='@' ;
       cin >> userNum; 
       while (chr !='#') cin >> chr ;
       cin >> bufferNum ;
       getline(cin,remainder); cin >> ws ;
       if ( isEmptyBuf[bufferNum] 
             && packetNum == serial[userNum] )
       {
         serial[userNum]++ ;
         isEmptyBuf[bufferNum]= false;
         userOfBuf[bufferNum]=userNum ;
         serialOfBuf[bufferNum] = packetNum ;
       }
       else 
       {  cout << "WRITE FULL BUFFER at LINE " << lineNum << endl 
                 << "OR BAD PACKET NUMBER" << endl ; 
          problem=true;
       }
     }
     else 
     {
       while (chr !='#') cin >> chr ; chr='@' ;
       cin >> agentNum ;
       while (chr !='#') cin >> chr ; chr='@' ;
       cin >> packetNum ;
       while (chr !='#') cin >> chr ; chr='@' ;
       cin >> userNum ;
       while (chr !='#') cin >> chr ;
       cin >> bufferNum ;
       getline(cin,remainder); cin >> ws ;
       if ( !isEmptyBuf[bufferNum] 
              && userOfBuf[bufferNum]==userNum 
              && serialOfBuf[bufferNum]==packetNum)
       {
         isEmptyBuf[bufferNum]=true ;
       }
       else 
       {  cout << "READ EMPTY BUFFER at LINE " << lineNum << endl 
                 << "OR BAD PACKET NUMBER" << endl ; 
          problem=true;
       }
     }
   }
   if (!problem) 
   cout << "NO " ;
   cout << "PROBLEM(S) FOUND!!" << endl ;
   return 0;
}