Пример #1
0
Byte *rcvchar(int sockfd, QTYPE *queue){
  if(controlChar == XON){
    int lengthRcvdBytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&remAddr, &remAddrLen);

    if(lengthRcvdBytes >= 0){
      printf("Menerima byte ke-%d.\n",countRcvdBytes);
      insertToQueue(&*queue,buffer[0]);
      countRcvdBytes++;
    }
    else{ //recvfrom() failed
      perror("recvfrom() does not get data");
    }

    if(queue->count > MIN_UPPERLIMIT) {
      printf("Buffer > minimum upperlimit. Mengirim XOFF.\n");
      controlChar = XOFF;
      bufferSend[0] = controlChar;
      ssize_t lengthSentBytes = sendto(sockfd, bufferSend, sizeof(bufferSend), 4, (struct sockaddr *)&remAddr, remAddrLen);
			if(lengthSentBytes < 0) {
        perror("sendto() failed)\n");
      }
    }
  }
  else{ // Send XOFF
    buffer[0] = 0;
  }
  return &buffer[0];
}
Пример #2
0
//function that each thread calls, processing the orders for their individual category
void *processCategory(void *arg){
    pthread_mutex_lock(&lock); //lock mutex
    char* category = (char*)arg;
    customer *tempCustomer;
    Node *Order = queue->front;
    int queueSize = queue->size;
    int match;
    while(queueSize != 0){ //loop through order queue attaining each order matching the category 
                 
        match = strcmp(category, Order->category);
        if(match == 0){ //the order matches the thread category  
            tempCustomer = customerList[getIndex(Order->ID)]; //get customer
            if(tempCustomer->balance >= atof(Order->price)){ //customer has enough money to purchase order
               	tempCustomer->balance = tempCustomer->balance - atoi(Order->price);
               	Node *purchased = (Node*)malloc(sizeof(Node));
               	purchased->title = Order->title;
               	purchased->price = Order->price;
               	purchased->ID = Order->ID;
               	purchased->category = Order->category;
               	purchased->remainingBalance = tempCustomer->balance;
               	tempCustomer->purchasedList = insertToQueue(tempCustomer, purchased, 1);
               	totalRevenue += atof(Order->price);
               	printf("\nBook Purchase Successfull:\n\t%s|$%s|%s|%s|%s|%s\n", purchased->title, purchased->price, tempCustomer->name, tempCustomer->address, tempCustomer->state, tempCustomer->zip);
            }else{ //customer does not hace sufficient funds
              	Node *rejected = (Node*)malloc(sizeof(Node));
                rejected->title = Order->title;
               	rejected->price = Order->price;
               	rejected->ID = Order->ID;
               	rejected->category = Order->category;
               	rejected->remainingBalance = tempCustomer->balance;
             	tempCustomer->rejectedList = insertToQueue(tempCustomer, rejected, 2);
               	printf("\nRejected Order: \n\t%s|%s|$%s|%s\n", tempCustomer->name, Order->title, Order->price, Order->category);
            }

        }
    	Order = Order->next; //get next order
    	queueSize--;
    }
    pthread_mutex_unlock(&lock); //unlock mutex
    return NULL;
}