/*********************************************************/ /* Autori: */ /* Pelosi Giovanni, 346787, pelosi */ /* Pesce Agatino, 456868, pesce */ /* */ /* Progetto: Sistemi 2: biblioteca */ /* Data Pr.: 9/2/96 */ /* File: client.c */ /* */ /*********************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include "system.h" #include "socket.h" #include "libro.h" #include "message.h" #include "socket.h" #include "support.h" #define LINE_LEN 128 #define FALSE 0 #define TRUE 1 /* ************************************************************************ * * lettura messaggio query * ************************************************************************ */ static int ReadMsgQuery(int Socket, char* Text) { int InChars=0; int MsgLen=MessageLen(MsgTypeReply); int NLetti=0; for(InChars=0; InChars<MessageLen(MsgTypeReply);) { NLetti=read(Socket, Text+InChars, MessageLen(MsgTypeReply)-InChars); if(NLetti==0) return -1; if(NLetti<0) return -1; InChars+=NLetti; if ( InChars == MsgLen ) return 0; } } /* ************************************************************************ * * client * ************************************************************************ */ void Client(char * Host, char * Port) { char buffer[LEN_TITOLO+1]; /* Per poter leggere \n e \0 */ int ExitReq=FALSE; int Socket=0; Libro_t Libro; MessageText_t Text; int OutChars=0; int pause=TRUE; memset(Text, 0, sizeof(MessageText_t)); while ( !ExitReq ) { puts("Digitare la chiave\nq per terminare\np toggle pausa"); fgets(buffer, sizeof(buffer), stdin); if ( strcmp(buffer,"q\n") == 0 ) { ExitReq=TRUE; continue; } if ( strcmp(buffer,"p\n") == 0 ) { pause=!pause; if(pause) puts("pause is on"); else puts("pause is off"); continue; } /* Nel caso avessi terminato per troppi caratteri chiudo la stringa*/ buffer[LEN_TITOLO-1] = 0; /* Nel caso avessi terminato per \n lo tiro via*/ if( buffer[strlen(buffer)-1] == '\n' ) buffer[strlen(buffer)-1]=0; strcpy(Libro.Titolo, buffer); OutChars=ClPutMsgQuery(Text, FALSE, &Libro); Socket=ActiveSocket(Host, Port); write(Socket, Text, OutChars); shutdown(Socket,1); /* non voglio pił scrivere */ while ( ReadMsgQuery(Socket, Text) == 0 ) { MessageReply_t MsgR; memset(&MsgR, 0, sizeof(MessageReply_t)); ClGetMsgReply(&MsgR, Text+1); /* Tiro Via il MessageType */ puts(MsgR.Biblio); puts(MsgR.Libro.Titolo); puts(MsgR.Libro.Autore); puts(MsgR.Libro.Anno); if (pause) { puts("-------------------\nPremere invio\n----------------------"); getchar(); } } close(Socket); } } /* ************************************************************************ * * main client * ************************************************************************ */ void main(void) { char Port[10]; char Host[50]; puts("Inserire l'host"); gets(Host); puts("Inserire la porta"); gets(Port); Client(Host, Port); exit(0); }