/** 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";
}
Example #2
0
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;
	}
}
Example #3
0
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;
		}
	}
}