/* * clientProtocol.cpp * * Gouverneur Th. - Cuisinier Gi. * * Define the client-side protocol function */ #include "clientProtocol.h" using namespace std; bool ClientProtocol::auth = false; bool ClientProtocol::waiting = false; void ClientProtocol::cmdLogin (Message *m) { if (waiting) { waiting = false; // we have our answer ;) if (m->args.Size() != 0) { if (m->args[0] == string("OK")) { auth = true; cout << "Ok, you're sucessfully authenticated to server." << endl; return; } else if (m->args[0] == string("NOK")) { throw exErrAuth(); } } } else { cout << "Received something not requested.. ignoring.." << endl; } } void ClientProtocol::cmdBRoom (Message *m) { if (waiting) { waiting = false; // we have our answer ;) if (m->args.Size() != 2) cout << "Bad answer from server.. ignoring.." << endl; else { if (m->args[0] == string("NOK")) cout << "Cannot book room: " << m->args[1] << endl; else if (m->args[0] == string("OK")) cout << "Room booked, number: " << m->args[1] << endl; else cout << "Bad answer from server.. ignoring.." << endl; } } else { cout << "Received something not requested.. ignoring.." << endl; } } void ClientProtocol::cmdCRoom (Message *m) { if (waiting) { waiting = false; // we have our answer ;) if (m->args.Size() != 2 && m->args.Size() != 1) cout << "Bad answer from server.. ignoring.." << endl; else { if (m->args[0] == string("NOK")) { if (m->args.Size() == 2) cout << "Cannot cancel reservation: " << m->args[1] << endl; } else if (m->args[0] == string("OK")) cout << "Reservation cancelled.." << endl; else cout << "Bad answer from server.. ignoring.." << endl; } } else cout << "Received something not requested.. ignoring.." << endl; } void ClientProtocol::sendSusp (Message *m) { cout << "Server is suspended for now.. please retry later.." << endl; waiting = false; } void ClientProtocol::cmdLRooms (Message *m) { static int maxBook = 0; if (maxBook == 0 && waiting) { if (m->args.Size() == 2 && m->args[0] != string("OK")) { cout << m->args[0] << " : " << m->args[1] << endl; waiting = 0; } else if (m->args.Size() == 2 && m->args[0] == string("OK")) { cout << "Number of room booked: " << m->args[1] << endl; cout << "Room : Name" << endl << "------------" << endl; waiting = 1; maxBook = atoi(m->args[1].c_str()); if (maxBook == 0) waiting = 0; } else { cout << "Bad response from server, ignoring" << endl; waiting = 0; maxBook = 0; } } else if (maxBook > 0 && waiting) { if (m->args.Size() == 2 && m->args[0] != string("OK")) { cout << m->args[0] << " : " << m->args[1] << endl; maxBook--; if (maxBook == 0) waiting = 0; } else { cout << "Bad response from server, ignoring" << endl; waiting = 0; maxBook = 0; } } else if (!waiting) cout << "Received something not requested from server, ignoring..." << endl; } bool ClientProtocol::execOption(int c, Sock_Client *client) { switch (c) { case 1: // book room return execBRoom(client); break; case 2: // cancel room return execCRoom(client); break; case 3: // list room return execLRooms(client); break; case 4: // exit throw exWantExit(); default: // unknown throw exUnknownOpt(); } return false; } bool ClientProtocol::execBRoom (Sock_Client *client) { string type, date, nombre, nom; cout << "Book a room:" << endl << "----------------" << endl << endl; cout << "Type chambre: "; cin >> type; cout << "Date d'arrivee (YYYYMMDD): "; cin >> date; cout << "Nombre de nuitees: "; cin >> nombre; cout << "Nom du client: "; cin >> nom; Message m; m.numRequest = client->getMsgSent() + 1; m.ident = "Hotel California"; m.token = "BROOM"; m.args.Push(type); m.args.Push(date); m.args.Push(nombre); m.args.Push(nom); *client << m.serialize(); return true; } bool ClientProtocol::execCRoom (Sock_Client *client) { string num, nom; cout << "Cancel Room:" << endl << "---------------" << endl << endl; cout << "Numero de chambre: "; cin >> num; cout << "Nom du clinet: "; cin >> nom; Message m; m.numRequest = client->getMsgSent() + 1; m.ident = "Hotel California"; m.token = "CROOM"; m.args.Push(num); m.args.Push(nom); *client << m.serialize(); return true; } bool ClientProtocol::execLRooms(Sock_Client *client) { cout << "List Rooms:" << endl << "---------------" << endl << endl; Message m; m.numRequest = client->getMsgSent() + 1; m.ident = "Hotel California"; m.token = "LROOMS"; *client << m.serialize(); return true; }