147 lines
3.0 KiB
C
147 lines
3.0 KiB
C
|
|
#include "db.h"
|
|
|
|
void addNumber(msg *myMsg){
|
|
char nr[NRSIZE], name[NAMESIZE];
|
|
printf("ADD \n============\n");
|
|
printf("Enter number: "); gets(nr);
|
|
printf("Enter name: "); gets(name);
|
|
myMsg->op = ADD;
|
|
strcpy(myMsg->nr, nr);
|
|
strcpy(myMsg->name, name);
|
|
}
|
|
|
|
void delNumber(msg *myMsg) {
|
|
char nr[NRSIZE];
|
|
printf("Delete \n=============\n");
|
|
printf("Enter number: "); gets(nr);
|
|
myMsg->op = DEL;
|
|
strcpy(myMsg->nr, nr);
|
|
strcpy(myMsg->name, "");
|
|
}
|
|
|
|
void findNumber(msg *myMsg) {
|
|
char name[NAMESIZE];
|
|
printf("Find \n=============\n");
|
|
printf("Enter name: "); gets(name);
|
|
myMsg->op = NR;
|
|
strcpy(myMsg->nr, "");
|
|
strcpy(myMsg->name, name);
|
|
}
|
|
|
|
void findName(msg *myMsg) {
|
|
char nr[NRSIZE];
|
|
printf("Find \n=============\n");
|
|
printf("Enter number: "); gets(nr);
|
|
myMsg->op = NAME;
|
|
strcpy(myMsg->nr, nr);
|
|
strcpy(myMsg->name, "");
|
|
}
|
|
|
|
void getOut(msg *myMsg, int sock) {
|
|
printf("Quitting...\n===============\n");
|
|
myMsg->op = EXIT;
|
|
write(sock, myMsg, sizeof(myMsg));
|
|
close(sock);
|
|
exit(0);
|
|
}
|
|
|
|
void printMsg(msg myMsg) {
|
|
printf("myMsg.nr = %s\n", myMsg.nr);
|
|
printf("myMsg.name = %s\n", myMsg.name);
|
|
sleep(2);
|
|
}
|
|
|
|
void menu(msg *myMsg, int sock) {
|
|
char choice[5];
|
|
char val;
|
|
|
|
system("clear");
|
|
|
|
puts("\nWelcome to IPC, InternalPhonenumberCatalogue");
|
|
puts("============================================\n\n");
|
|
|
|
puts("1 - Add a number\n");
|
|
puts("2 - Delete a number\n");
|
|
puts("3 - Find a number\n");
|
|
puts("4 - Find a name\n");
|
|
puts("5 - Exit\n\n");
|
|
puts("Enter your choice: ");
|
|
|
|
fgets(choice, sizeof(choice), stdin);
|
|
|
|
switch(choice[0]){
|
|
case '1': addNumber(myMsg);
|
|
break;
|
|
case '2': delNumber(myMsg);
|
|
break;
|
|
case '3': findNumber(myMsg);
|
|
break;
|
|
case '4': findName(myMsg);
|
|
break;
|
|
case '5': getOut(myMsg, sock);
|
|
break;
|
|
|
|
default : puts("Try again <1-4 or 5>\n\n");
|
|
sleep(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
main(int argc, char *argv[]) {
|
|
char *remhost;
|
|
u_short remport;
|
|
int sock;
|
|
struct sockaddr_in remote;
|
|
struct hostent *h;
|
|
msg myMsg;
|
|
|
|
if (argc != 3) {
|
|
fprintf(stderr,"Usage: dbclient <host> <port>\n");
|
|
exit(1);
|
|
}
|
|
remhost = argv[1];
|
|
remport = atoi(argv[2]);
|
|
|
|
/* Create the socket. */
|
|
if((sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) {
|
|
perror("dbclient:socket");
|
|
exit(1);
|
|
}
|
|
|
|
bzero((char *) &remote, sizeof(remote));
|
|
remote.sin_family = AF_INET;
|
|
if((h = gethostbyname(remhost)) == NULL) {
|
|
perror("dbclient:gethostbyname");
|
|
exit(1);
|
|
}
|
|
bcopy((char *)h->h_addr, (char *)&remote.sin_addr, h->h_length);
|
|
remote.sin_port = htons(remport);
|
|
|
|
if(connect(sock, (struct sockaddr *)&remote, sizeof(remote)) < 0) {
|
|
perror("dbclient:connect");
|
|
exit(1);
|
|
}
|
|
|
|
for(;;) {
|
|
menu(&myMsg, sock);
|
|
write(sock, &myMsg, sizeof(myMsg));
|
|
read(sock, &myMsg, sizeof(myMsg));/*lyssna efter svar från servern*/
|
|
|
|
if(myMsg.op == NACK) {
|
|
puts("Could not execute your request, please try again");
|
|
}
|
|
else if(myMsg.op == ACK) {
|
|
printf("Operation executed.\n");
|
|
}
|
|
else if(myMsg.op == PRN) {
|
|
printMsg(myMsg);
|
|
}
|
|
sleep(2);
|
|
}
|
|
close(sock);
|
|
}
|
|
|
|
|
|
|