예제 #1
0
파일: dm_server.c 프로젝트: cento/DM-memory
void do_service(int sd) {
	int byte_ricevuti = 1;
	int operazione;
	struct protocol_header header;
	memset(&header,0,sizeof(struct protocol_header));

	do {
		printf("* Mi metto in attesa di una nuova richiesta\n");
		byte_ricevuti = riceviDato(sd,&header,sizeof(struct protocol_header));
		if(byte_ricevuti == 0) break;

		operazione = controllaOperazione(&header);

		switch(operazione)
		{
			case 1:
				serverMap(&header,sd);
				break;
			case 2:
				serverUnmap(&header,sd);
				break;
			case 3:
				serverUpdate(&header,sd);
				break;
			case 4:
				serverWrite(&header,sd);
				break;
			case 5:
				serverWait(&header,sd);
				break;
		}
		printf("* Richiesta smistata, passiamo alla prossima\n");

	} while (byte_ricevuti != 0);
}
예제 #2
0
void handleMessage(char * messageR){
  msg_t* message = (msg_t*)messageR;
  message->returnVal = -1;
  int returnVal;
  switch(message->msgType){
  case INIT:
    returnVal = serverInit(file);
    message->returnVal = returnVal;
    break;
  case READ:
    returnVal = serverRead(message->inum, message->buffer, message->block);
    message->returnVal = returnVal;
    break;
  case LOOKUP:
    returnVal = serverLookup(message->pinum, message->name);
    message->returnVal = returnVal;
    break;
  case WRITE:
    returnVal = serverWrite(message->inum, message->buffer, message->block);
    message->returnVal = returnVal;
    break;
  case STAT:
    returnVal = serverStat(message->inum, &(message->stat));
    message->returnVal = returnVal;
    break;
  case CREATE:
    returnVal = serverCreate(message->pinum, message->type, (message->name));
    message->returnVal = returnVal;
    break;
  case UNLINK:
    returnVal = serverUnlink(message->pinum, message->name);
    message->returnVal = returnVal;
    break;
  case SHUTDOWN:
    message->returnVal = 0;
    memcpy(messageR, message, sizeof(*message));
    UDP_Write(sd, &s, messageR, sizeof(msg_t));
    //fsync(diskFD);
    close(diskFD);
    // printDisk();
    exit(0);
    break;
  default:
    message->returnVal = -1;
    break;
  }
  memcpy(messageR, message, sizeof(*message));

}