🐛 better running calc

This commit is contained in:
2019-11-14 13:35:40 +01:00
parent cc9252aba3
commit a8d76d43c8
2 changed files with 54 additions and 39 deletions

View File

@@ -20,22 +20,26 @@ export default class Graph {
static async deserialize(nodes) { static async deserialize(nodes) {
const graph = new Graph(); const graph = new Graph();
graph.nodes = await createNodes(nodes); const isRunningSet = new WeakSet();
for (let {node} of graph.nodes) { graph.nodes = await createUnconnectedNodes(nodes);
for (const {node} of graph.nodes) {
node.subject.on('running', (isRunning) => { node.subject.on('running', (isRunning) => {
graph.__nodesActive += isRunning ? 1 : -1; if (!isRunning && isRunningSet.has(node)) {
clearTimeout(graph.__nodesActiveDebounce); isRunningSet.delete(node);
graph.__nodesActiveDebounce = setTimeout(() => { graph.__nodesActive -= 1;
} else if (isRunning && !isRunningSet.has(node)) {
isRunningSet.add(node);
graph.__nodesActive += 1;
}
if (graph.__nodesActive > 0) { if (graph.__nodesActive > 0) {
console.log('running');
graph.subject.next('running'); graph.subject.next('running');
} else { } else {
console.log('stopped'); console.info('[Graphfx] graph stopped');
graph.subject.next('stopped'); graph.subject.next('stopped');
} }
}, 16);
}); });
} }
graph.nodes = await reconnectNodes(graph.nodes);
return graph; return graph;
} }
@@ -77,8 +81,8 @@ export const createNode = async ({name, options, id}) => {
} }
} }
export const createNodes = async (nodes) => { export const createUnconnectedNodes = async (nodes) => {
nodes = (await Promise.all(nodes.map(async ({node, x, y}) => { return (await Promise.all(nodes.map(async ({node, x, y}) => {
const nodeInstance = await createNode(node); const nodeInstance = await createNode(node);
return ({ return ({
node: nodeInstance, node: nodeInstance,
@@ -92,7 +96,9 @@ export const createNode = async ({name, options, id}) => {
} }
}); });
}))).filter(({node}) => node); }))).filter(({node}) => node);
}
export const reconnectNodes = async (nodes) => {
const outputsById = nodes const outputsById = nodes
.map(({node}) => Object.values(node.out.__values)) .map(({node}) => Object.values(node.out.__values))
.reduce((acc, nxt) => acc.concat(nxt), []) .reduce((acc, nxt) => acc.concat(nxt), [])
@@ -105,4 +111,9 @@ export const createNode = async ({name, options, id}) => {
await connect(outputsById); await connect(outputsById);
return {node,x,y}; return {node,x,y};
})) }))
} }
export const createNodes = async (nodes) => {
nodes = await createUnconnectedNodes(nodes);
return reconnectNodes(nodes);
}

View File

@@ -110,5 +110,9 @@ export default class Node {
} }
}) })
} }
toString() {
return `${this.name}<${this.id}>`;
}
}; };