From 25aef69ea33e27479d5be3bc8395aa182163c792 Mon Sep 17 00:00:00 2001 From: Tim Olson <> Date: Mon, 6 Nov 2023 23:49:08 -0400 Subject: [PATCH] order status subscriptions --- cache.js | 9 ++++++--- io.js | 2 +- main.js | 3 +++ order.js | 23 +++++++++++++++++++++++ vault.js | 8 ++++---- 5 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 order.js diff --git a/cache.js b/cache.js index 348decb..a64be88 100644 --- a/cache.js +++ b/cache.js @@ -16,9 +16,8 @@ export class CacheSet { } async contains(chain, key) { - const series = `${chain}|${this.series}`; - const result = await redis.sIsMember(series, key) - console.log('contains', series, key, result) + const result = await redis.sIsMember(`${chain}|${this.series}`, key) + console.log('contains', `${chain}|${this.series}`, key, result) return result } @@ -78,3 +77,7 @@ async function latestBlock(chain) { export const vaults = new CacheDict('v') export const vaultBalances = new CacheDict('vb') export const prices = new CacheDict('p') +export const orderStatuses = new CacheSet('o') +export const vaultOpenOrders = new CacheDict('voo') +export const orderFilled = new CacheDict('of') +export const trancheFilled = new CacheDict('tf') diff --git a/io.js b/io.js index c53b3d8..4098755 100644 --- a/io.js +++ b/io.js @@ -11,5 +11,5 @@ export const httpServer = createServer() export const io = new Server(httpServer, options) const pubClient = redis.duplicate(); await pubClient.connect() -const adapter = createAdapter(pubClient, redis, {/*key:'public|'*/}) +const adapter = createAdapter(pubClient, redis, {/*key:'socket.io'*/}) io.adapter(adapter) diff --git a/main.js b/main.js index 2507739..c533530 100644 --- a/main.js +++ b/main.js @@ -5,6 +5,7 @@ import {httpServer, io} from "./io.js"; import {ensureVault, loginAddress} from "./vault.js"; import {chainInfo, VAULT_INIT_CODE_HASH} from "./chain.js"; import {subPools, unsubPools} from "./pool.js"; +import {subVaultOrders, unsubVaultOrders} from "./order.js"; // setup socket.io @@ -17,6 +18,8 @@ io.on("connection", (socket) => { socket.on('address', (chainId, address) => loginAddress(socket, chainId, address) ) socket.on('subPools', (chainId, addresses) => subPools(socket, chainId, addresses) ) socket.on('unsubPools', (chainId, addresses) => unsubPools(socket, chainId, addresses) ) + socket.on('subVaultOrders', (chainId, address) => subVaultOrders(socket, chainId, address) ) + socket.on('unsubVaultOrders', (chainId, address) => unsubVaultOrders(socket, chainId, address) ) socket.on('ensureVault', (chainId,owner,num) => ensureVault(socket, chainId, owner, num) ) socket.join('public') socket.emit('welcome', {chainInfo, vaultInitCodeHash:VAULT_INIT_CODE_HASH}) diff --git a/order.js b/order.js new file mode 100644 index 0000000..b93ba39 --- /dev/null +++ b/order.js @@ -0,0 +1,23 @@ +import {redis, vaultOpenOrders} from "./cache.js"; + + +export function subVaultOrders( socket, chainId, vault ) { + vaultOpenOrders.get(chainId, vault).then(async (orderIndexes)=>{ + for( const orderIndex of JSON.parse(orderIndexes) ) { + // there is a race condition here since we need multiple queries to get the complete order status, + // so we diligently check for nulls and exclude such an order, since it was deleted and no longer active. + const status = orderStatus( chainId, vault, orderIndex ) + if( status != null ) { + + } + } + }) +} + +export function unsubVaultOrders( socket, chainId, vault ) { + +} + +export function orderStatus( chainId, vault, orderIndex ) { + +} diff --git a/vault.js b/vault.js index f94b9f2..24f01b0 100644 --- a/vault.js +++ b/vault.js @@ -29,7 +29,7 @@ export function vaultAddress(chainId, owner, num=0) { async function emitBalances(socket, chainId, vault) { const balances = await vaultBalances.get(chainId, vault); - socket.emit('vb', vault, balances !== null ? balances : '{}') + socket.emit('vb', chainId, vault, balances !== null ? balances : '{}') return balances; } @@ -38,7 +38,7 @@ export async function loginAddress(socket, chainId, address) { if( socket.user_room !== undefined) socket.leave(socket.user_room) if( address === undefined ) { - socket.emit('vaults', []) + socket.emit('vaults', chainId, address, []) } else { socket.user_room = `${chainId}|${address}` @@ -55,7 +55,7 @@ export async function loginAddress(socket, chainId, address) { else break } - socket.emit('vaults', found) + socket.emit('vaults', chainId, address, found) } } @@ -70,7 +70,7 @@ export async function ensureVault(socket, chainId, owner, num) { const vault = await createVault(chainId, owner, num) console.log(vault) if (vault !== null) { - socket.emit('vaults', [vault]) + socket.emit('vaults', chainId, owner, [vault]) await emitBalances(socket, chainId, vault) } else