User& UserManager::addUser( const String& rName, const String& rPassword ) { if( !hasUser( rName ) ) { User* user = new User( rName, rPassword ); mUsers.insert( std::make_pair( rName, user ) ); mUserSignal( *user, true ); return *user; } else { DIVERSIA_EXCEPT( Exception::ERR_DUPLICATE_ITEM, "User already exists.", "UserManager::addUser" ); } }
/** * @param tokens message tokens */ bool SessionState::handleMessage(const QStringList& tokens) { if(tokens[0] == "SAY") { int userid = tokens.at(1).toInt(); if(hasUser(userid)) emit chatMessage(user(userid).name(), tokens.at(2)); else qWarning() << "Got chat message from unknown user:"******"USER") { updateUser(tokens); } else if(tokens[0] == "PART") { partUser(tokens); } else if(tokens[0] == "SLOCK") { emit syncWait(); } else if(tokens[0] == "SUNLOCK") { emit syncDone(); } else if(tokens[0] == "BOARD") { update(Session(tokens)); } else if(tokens[0] == "RASTER") { releaseRaster(); expectRaster_ = tokens.at(1).toInt(); if(expectRaster_ == 0) emit rasterReceived(100); } else if(tokens[0] == "GIVERASTER") { emit syncRequest(); } else if(tokens[0] == "MORE") { if(isUploading()) sendRasterChunk(); else qWarning() << "Got request for more raster data, but we're not uploading anything!"; } else if(tokens[0] == "ANNOTATE") { protocol::Annotation a(tokens); if(!a.isValid()) qWarning() << "Received an invalid annotation"; else emit annotation(a); } else if(tokens[0] == "RMANNOTATION") { emit rmAnnotation(tokens.at(1).toInt()); } else return false; return true; }
/** * @param id user id * @pre hasUser(id)==true */ User &SessionState::user(int id) { Q_ASSERT(hasUser(id)); return users_[id]; }