bool HandlePacket (Packet& request, Packet& response) { int uid, mid; if (request.getType() == PacketType::LOGIN_REQUEST) { response.setType(PacketType::LOGIN_RESPONSE); if (request.getData().size() == 2 && (uid = db.logIn(request.getData()[0], request.getData()[1])) != -1) { __uint64_t sid = ((((__uint64_t) rand () & 0x77777777) << 32) | (rand () & 0x77777777)); sids [sid] = uid; response.setSID(sid); response.getData().push_back("1"); } else { response.getData().push_back("0"); } return true; } auto it = sids.find(request.getSID()); if (it == sids.end ()) { response.setType(request.getType() + 1); response.setSID (0); return true; } response.setSID(request.getSID()); uid = it-> second; switch (request.getType()) { case PacketType::LOGOUT_REQUEST: response.setType(PacketType::LOGOUT_RESPONSE); sids.erase(request.getSID()); response.getData().push_back("1"); return true; case PacketType::LATEST_REQUEST: response.setType(PacketType::LATEST_RESPONSE); response.getData().push_back(db.latestCheck(uid)); return true; case PacketType::PULL_REQUEST: response.setType(PacketType::PULL_RESPONSE); if (request.getData().size() == 1) { try { mid = stoi (request.getData()[0]); string msg = db.readMessage(uid, mid); response.getData().push_back(msg); } catch (exception& ex) { printf ("%s\r\n", ex. what ()); } } return true; case PacketType::REMOVE_REQUEST: response.setType(PacketType::REMOVE_RESPONSE); if (request.getData().size() == 1) { try { mid = stoi (request.getData()[0]); if (db.removeMessage(uid, mid)) { response.getData().push_back("1"); return true; } } catch (exception& ex) { printf ("%s\r\n", ex. what ()); } } response.getData().push_back("0"); return true; case PacketType::SEND_REQUEST: response.setType(PacketType::SEND_RESPONSE); if (request.getData().size() == 2 && db.sendMessage(uid, request.getData()[0], request.getData()[1])) { response.getData().push_back("1"); return true; } response.getData().push_back("0"); return true; case PacketType::NEWMESSAGES_REQUEST: response.setType(PacketType::NEWMESSAGES_RESPONSE); for (string id : db.listUnreadMessages(uid)) { response.getData().push_back(id); } return true; case PacketType::LISTMESSAGES_REQUEST: response.setType(PacketType::LISTMESSAGES_RESPONSE); for (string id : db.listAllMessages(uid)) { response.getData().push_back(id); } return true; case PacketType::LISTSENTMESSAGES_REQUEST: response.setType(PacketType::LISTSENTMESSAGES_RESPONSE); for (string id : db.listSentMessages(uid)) { response.getData().push_back(id); } return true; default: return false; } }