/** FIXME * This will take the input and behave like the same from the client * This will call the appropriate action function for the server or return error etc * FIXME there's a lot to do here!!!!! */ string MessagingServer::processRequest(string request){ stringstream requestStream(request); string messageString = ""; requestStream >> enteredCommand; if(enteredCommand == ""){ messageString = ""; if(debug) // FIXME all these debugging errors might need to always display -ask cout << "error INCORRECT REQUEST COMMAND FORMATTING 1\n"; }else if(enteredCommand == "put"){ if(debug) cout << "put!\n"; // TODO remove these later bool success = addNewMessage(requestStream); if(success) messageString = "OK"; else if(debug) cout << "error INCORRECT REQUEST FORMATTING\n"; }else if(enteredCommand == "list"){ if(debug) cout << "list!\n"; // TODO remove these later messageString = getMessageListForUser(requestStream); if(messageString == "") if(debug) cout << "error INCORRECT REQUEST FORMATTING\n"; }else if(enteredCommand == "get"){ if(debug) cout << "get!\n"; // TODO remove these later messageString = getMessage(requestStream); if(messageString == "") if(debug) cout << "error INCORRECT REQUEST FORMATTING\n"; }else if(enteredCommand == "reset"){ // if quit is followed by other characters TODO need to test if(debug) cout << "reset!\n"; // TODO remove these later bool success = eraseAllMessages(requestStream); if(success) messageString = "OK"; else if(debug) cout << "error INCORRECT REQUEST FORMATTING\n"; }else{ messageString = ""; if(debug) cout << "error INCORRECT REQUEST COMMAND FORMATTING 2\n"; } // TODO make a universal close of stringStream!!! If I need to? if(enteredCommand == "get") return messageString; else return messageString + "\n"; }
void Client::onSocketStateChanged(QAbstractSocket::SocketState socketState) { //qDebug() << "client: socket state" << socketState; ClientRoom* room = (ClientRoom*)sender(); switch (socketState) { case QAbstractSocket::ConnectedState: rooms.insert(room->getName(), room); this->sendMessage(room->getSocket(), instMessage(nickName, room->getName(), MessageType::CONNECT_TO_ROOM)); connect(room->getSocket(), SIGNAL(readyRead()), this, SLOT(onRead())); break; case QAbstractSocket::UnconnectedState: emit addNewMessage("{System}: Room offline", room->getName()); break; } }
void Client::onRead() { QTcpSocket* clientSocket = (QTcpSocket*)sender(); QList<Message> messageList = readMessage(clientSocket); foreach(Message m, messageList) { switch (m.type) { case MessageType::CONNECT_TO_ROOM: this->sendMessage(clientSocket, instMessage(this->nickName, m.destRoom, MessageType::NEW_USER)); emit successConnected(m.mes, rooms.value(m.destRoom)); break; case MessageType::CONNECT_TO_ROOM_ERROR: emit showEventMesage("Room not found"); break; /*case MessageType::NEW_USER: emit addNewUserToRoom(m.mes, m.destRoom); break;*/ case MessageType::USER_LIST: emit setUserList(m.mes.split(";"), m.destRoom); break; case MessageType::REM_USER: emit removeUserFromRoom(m.mes, m.destRoom); break; case MessageType::MESSAGE: emit addNewMessage(m.mes, m.destRoom); break; default: break; } } }