…erging. Closes #1312
AJAX request deduplication.
* Added build script
…omments in #1308 Also corrected a typo and updated link to the new modules repositories.
It's a mutable Map, so there's no need for it to be a var.
We were suspending the request before we got a chance to kick off the processing for the actual response to be run.
LiftSession is in charge of managing cleanup of non-recently-seen pages and such, so it needs to know about the AjaxRequestInfo list to clean it up when a given request hasn't been needed in sufficiently long.
Before we were relying on the expected length of the funcName, determined by calling nextFuncName. Because funcName isn't *always* the same length, we switch instead ot putting a - between the GUID and the version identifier in the path. We then look for it when extracting the version identifier.
The meat of the deal. Based on the AJAX version appended to the request GUID, we determine whether we've already seen this request. If so, we wait for the original request to complete before returning the resulting value. If we already completed the request before, we return the same answer without re-running the associated parameters. AJAX requests that need to wait are put into continuations if available.
We're about to add some AJAX-related continuation code, so we want it to be clear the existing stuff is for comets.
AJAX requests currently carry a GUID. We now add a single-character version indicator. This version increments for distinct AJAX requests. In particular, it does NOT increment during AJAX retries, so that a retry of an existing request can be identified as being part of the same attempt on the server. Not all AJAX requests carry this version identifier. In particular, Lift GC requests do not carry a version identifier. This is because these are going to be handled in a streamlined handler. If a Lift GC request doesn't make it through, we can retry it as many times as we want and it'll just remark stuff in the session. liftAjax.addPageNameAndVersion appends both the page GUID and the version number. The version number is encoded in base-36.
CometActor had the function by virtue of extending Lift's actor traits; however, the LiftCometActor trait that is often used to reference it didn't define that the method would be present. We add it there so it can be referred to anywhere that LiftCometActor is passed around instead of CometActor. !< returns an LAFuture for a message reply.