Commit vparam after its declarations are applied
This commit is contained in:
1 parent
eb812e9754
commit
a735f0d9e7
1 file changed
+35
-37
+35
-37
@@ -296,7 +296,7 @@ addProvisions = (sessionContext, channel, provisions) ->
|
||||
delete sessionContext.syncState
|
||||
delete sessionContext.rpcRequest
|
||||
sessionContext.declarations = []
|
||||
sessionContext.doneProvisions = 0
|
||||
sessionContext.provisionsRet = []
|
||||
if sessionContext.revisions[sessionContext.revisions.length - 1] > 0
|
||||
sessionContext.deviceData.timestamps.collapse(1)
|
||||
sessionContext.deviceData.attributes.collapse(1)
|
||||
@@ -344,7 +344,7 @@ clearProvisions = (sessionContext) ->
|
||||
sessionContext.virtualParameters = []
|
||||
sessionContext.channels = {}
|
||||
sessionContext.declarations = []
|
||||
sessionContext.doneProvisions = 0
|
||||
sessionContext.provisionsRet = []
|
||||
sessionContext.revisions = [0]
|
||||
sessionContext.extensionsCache = {}
|
||||
|
||||
@@ -407,32 +407,18 @@ runVirtualParameters = (sessionContext, provisions, startRevision, endRevision,
|
||||
done &&= _done
|
||||
allDeclarations[j] = _declarations or []
|
||||
allClear[j] = _clear or []
|
||||
virtualParameterUpdates[j] = _returnValue if _done
|
||||
virtualParameterUpdates[j] = JSON.parse(JSON.stringify(_returnValue)) if _done
|
||||
|
||||
if (counter -= 2) == 1
|
||||
toClear = null
|
||||
if done
|
||||
for vpu, i in virtualParameterUpdates
|
||||
toClear = commitVirtualParameter(sessionContext, provisions[i], vpu, toClear)
|
||||
|
||||
clear(sessionContext, toClear, (err) ->
|
||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations)
|
||||
allClear = Array.prototype.concat.apply([], allClear)
|
||||
return callback(err, null, done, allDeclarations, allClear)
|
||||
)
|
||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations)
|
||||
allClear = Array.prototype.concat.apply([], allClear)
|
||||
return callback(null, null, (if done then virtualParameterUpdates else null), allDeclarations, allClear)
|
||||
)
|
||||
|
||||
if (counter -= 2) == 1
|
||||
toClear = null
|
||||
if done
|
||||
for vpu, i in virtualParameterUpdates
|
||||
toClear = commitVirtualParameter(sessionContext, provisions[i], vpu, toClear)
|
||||
|
||||
clear(sessionContext, toClear, (err) ->
|
||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations)
|
||||
allClear = Array.prototype.concat.apply([], allClear)
|
||||
return callback(err, null, done, allDeclarations, allClear)
|
||||
)
|
||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations)
|
||||
allClear = Array.prototype.concat.apply([], allClear)
|
||||
return callback(null, null, (if done then virtualParameterUpdates else null), allDeclarations, allClear)
|
||||
|
||||
|
||||
runDeclarations = (sessionContext, declarations) ->
|
||||
@@ -564,7 +550,7 @@ rpcRequest = (sessionContext, _declarations, callback) ->
|
||||
if sessionContext.virtualParameters.length == 0 and
|
||||
sessionContext.declarations.length == 0 and
|
||||
not _declarations?.length and
|
||||
(sessionContext.doneProvisions or sessionContext.provisions.length == 0)
|
||||
sessionContext.provisions.length == 0
|
||||
return callback()
|
||||
|
||||
if sessionContext.declarations.length <= sessionContext.virtualParameters.length
|
||||
@@ -580,7 +566,7 @@ rpcRequest = (sessionContext, _declarations, callback) ->
|
||||
run = runVirtualParameters
|
||||
provisions = sessionContext.virtualParameters[inception - 1]
|
||||
|
||||
return run(sessionContext, provisions, sessionContext.revisions[inception - 1] or 0, sessionContext.revisions[inception], (err, fault, done, decs, toClear) ->
|
||||
return run(sessionContext, provisions, sessionContext.revisions[inception - 1] or 0, sessionContext.revisions[inception], (err, fault, ret, decs, toClear) ->
|
||||
return callback(err) if err
|
||||
|
||||
if fault
|
||||
@@ -588,7 +574,7 @@ rpcRequest = (sessionContext, _declarations, callback) ->
|
||||
return callback(null, fault)
|
||||
|
||||
sessionContext.declarations.push(decs)
|
||||
sessionContext.doneProvisions |= 1 << inception if done
|
||||
sessionContext.provisionsRet[inception] = ret
|
||||
|
||||
for d in decs
|
||||
for ad in device.getAliasDeclarations(d[0], 1)
|
||||
@@ -784,18 +770,30 @@ rpcRequest = (sessionContext, _declarations, callback) ->
|
||||
sessionContext.declarations.pop()
|
||||
sessionContext.syncState.virtualParameterDeclarations.pop()
|
||||
|
||||
if sessionContext.doneProvisions & (2 << (sessionContext.virtualParameters.length - 1))
|
||||
doneProvisions = sessionContext.virtualParameters.pop()
|
||||
sessionContext.revisions.pop()
|
||||
sessionContext.doneProvisions &= (2 << sessionContext.virtualParameters.length) - 1
|
||||
rev = sessionContext.revisions[sessionContext.revisions.length - 1]
|
||||
sessionContext.deviceData.timestamps.collapse(rev + 1)
|
||||
sessionContext.deviceData.attributes.collapse(rev + 1)
|
||||
for k of sessionContext.extensionsCache
|
||||
if rev < Number(k.split(':', 1)[0])
|
||||
delete sessionContext.extensionsCache[k]
|
||||
ret = sessionContext.provisionsRet.splice(inception)[0]
|
||||
if not ret
|
||||
return rpcRequest(sessionContext, null, callback)
|
||||
|
||||
return rpcRequest(sessionContext, null, callback)
|
||||
sessionContext.revisions.pop()
|
||||
rev = sessionContext.revisions[sessionContext.revisions.length - 1] or 0
|
||||
sessionContext.deviceData.timestamps.collapse(rev + 1)
|
||||
sessionContext.deviceData.attributes.collapse(rev + 1)
|
||||
for k of sessionContext.extensionsCache
|
||||
if rev < Number(k.split(':', 1)[0])
|
||||
delete sessionContext.extensionsCache[k]
|
||||
|
||||
vparams = sessionContext.virtualParameters.pop()
|
||||
|
||||
if not vparams
|
||||
return callback()
|
||||
|
||||
toClear = null
|
||||
for vpu, i in ret
|
||||
toClear = commitVirtualParameter(sessionContext, vparams[i], vpu, toClear)
|
||||
|
||||
clear(sessionContext, toClear, (err) ->
|
||||
return rpcRequest(sessionContext, null, callback)
|
||||
)
|
||||
|
||||
|
||||
# Simple algorithm to estimate GPN count in a set of patterns used
|
||||
|
||||
Reference in new issue
Block a user