From 745612d2f47e278eaa31161a37b9598dfe35d24d Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Wed, 8 May 2013 12:17:41 +0100 Subject: [PATCH] optimize the initial subscription process by first sbuscribing to parties. this will require a small overhaul of the party system, which I'll do next --- src/app/party.coffee | 44 +++++++++++++---------------------------- src/server/store.coffee | 7 +++++++ 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/app/party.coffee b/src/app/party.coffee index 5d04418aa2..07b0d1721a 100644 --- a/src/app/party.coffee +++ b/src/app/party.coffee @@ -27,49 +27,33 @@ partyUnsubscribe = (model, cb) -> ### module.exports.partySubscribe = partySubscribe = (page, model, params, next, cb) -> - # unsubscribe from everything - we're starting over - # partyUnsubscribe model, -> + uuid = model.get('_userId') or model.session.userId # see http://goo.gl/TPYIt + selfQ = model.query('users').withId(uuid) #keep this for later + partyQ = model.query('parties').withMember(uuid) - # Restart subscription to the main user - selfQ = model.query('users').withId (model.get('_userId') or model.session.userId) # see http://goo.gl/TPYIt - selfQ.fetch (err, user) -> + #TODO add index on parties.members + partyQ.fetch (err, party) -> return next(err) if err - unless user.get() - #return next("User not found - this shouldn't be happening!") - console.error "User not found - this shouldn't be happening!" - return page.redirect('/logout') #delete model.session.userId finished = (descriptors, paths) -> - descriptors.push 'tavern'; paths.push '_tavern' model.subscribe.apply model, descriptors.concat -> [err, refs] = [arguments[0], arguments] return next(err) if err _.each paths, (path, idx) -> model.ref path, refs[idx+1] + unless model.get('_user') + #return next("User not found - this shouldn't be happening!") + console.error "User not found - this shouldn't be happening!" + return page.redirect('/logout') #delete model.session.userId cb() - - # Attempted handling for 'party of undefined' error, which is caused by bustedSession (see derby-auth). - # Theoretically simply reloading the page should restore model.at('_userId') and the second load should work just fine - # bustedSession victims might hit a redirection loop if I'm wrong :/ -# return page.redirect('/') unless uObj - - partyId = user.get('party.current') + party = party.get() # (1) Solo player - return finished([selfQ], ['_user']) unless partyId + return finished([selfQ, 'tavern'], ['_user', '_tavern']) unless party - # User in a party - partyQ = model.query('parties').withId(partyId) - partyQ.fetch (err, party) -> - return next(err) if err - members = party.get('members') - - ## (2) Party has no members, just subscribe to the party itself - return finished([partyQ, selfQ], ['_party', '_user']) if _.isEmpty(members) - - ## (3) Party has members, subscribe to those users too - membersQ = model.query('users').party(members) - return finished [partyQ, membersQ, selfQ], ['_party', '_partyMembers', '_user'] + ## (2) Party has members, subscribe to those users too + membersQ = model.query('users').party(party.members) + return finished [partyQ, membersQ, selfQ, 'tavern'], ['_party', '_partyMembers', '_user', '_tavern'] module.exports.app = (appExports, model, app) -> character = require './character' diff --git a/src/server/store.coffee b/src/server/store.coffee index 24e3b96828..67891966eb 100644 --- a/src/server/store.coffee +++ b/src/server/store.coffee @@ -123,6 +123,13 @@ partySystem = (store) -> return accept(false) if derbyAuth.bustedSession(@) accept(true) + store.query.expose "parties", "withMember", (id) -> + @where('members').contains([id]).findOne() + + store.queryAccess 'parties', 'withMember', (id, accept, err) -> + return accept(false) if derbyAuth.bustedSession(@) + accept(true) + ### LFG / tavern system ###