fox-wamp
Version:
Web Application Message Router/Server WAMP/MQTT
72 lines (59 loc) • 2.5 kB
JavaScript
const conf_db_file = process.env.DB_FILE
|| console.log('DB_FILE must be defined') || process.exit(1)
const conf_config_file = process.env.CONFIG
|| console.log('CONFIG file name must be defined') || process.exit(1)
import { keyDate, ProduceId } from '../lib/masterfree/makeid'
import { SqliteKvFabric } from '../lib/sqlite/sqlitekv'
import Router from '../lib/router'
import { getConfigInstance } from '../lib/masterfree/config'
import { DbFactory } from '../lib/sqlite/dbfactory'
import { StorageTask } from '../lib/masterfree/storage'
import { StageTwoTask } from '../lib/masterfree/synchronizer'
import { INTRA_REALM_NAME } from '../lib/masterfree/hyper.h'
import { HyperNetClient } from '../lib/hyper/net_transport'
function mkSync(host, port, nodeId, stageTwoTask) {
const client = new HyperNetClient({host, port})
client.onopen(async () => {
await client.login({realm: INTRA_REALM_NAME})
console.log('login successful', nodeId, host, port)
await stageTwoTask.listenStageOne(client)
})
return client.connect()
}
function mkGate(host, port, gateId, storageTask) {
const client = new HyperNetClient({host, port})
client.onopen(async () => {
await client.login({realm: INTRA_REALM_NAME})
console.log('login successful', gateId, host, port)
await storageTask.listenEntry(client, gateId)
})
client.connect()
}
const config = getConfigInstance()
async function main () {
const router = new Router()
router.setLogTrace(true)
const sysRealm = await router.getRealm(INTRA_REALM_NAME)
const dbFactory = new DbFactory(null)
const db = await dbFactory.openMainDatabase(conf_db_file)
const storageTask = new StorageTask(sysRealm, dbFactory)
const stageTwoTask = new StageTwoTask(sysRealm, config.getSyncQuorum())
const makeId = new ProduceId(() => keyDate(new Date()))
const modKv = new SqliteKvFabric(dbFactory, makeId)
const syncNodes = config.getSyncNodes()
for (const syncNodeId of Object.keys(syncNodes)) {
const syncNodeConf = syncNodes[syncNodeId]
mkSync(syncNodeConf.host, syncNodeConf.port, syncNodeId, stageTwoTask)
}
const entryNodes = config.getEntryNodes()
for (const entryNodeId of Object.keys(entryNodes)) {
const entryNodeConf = entryNodes[entryNodeId]
mkGate(entryNodeConf.host, entryNodeConf.port, entryNodeId, storageTask)
}
}
config.loadConfigFile(conf_config_file).then(() => {
main()
console.log('connect function started')
}, (err) => {
console.error('ERROR:', err, err.stack)
})