mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
Weebhook app test support ws (#226)
* feat: webhook test app support ws * feat: webhook test app support ws * feat: webhook test app support ws * feat: webhook test app support ws Co-authored-by: Quan HL <quanluuhoang8@gmail.com>
This commit is contained in:
@@ -1,14 +1,54 @@
|
|||||||
const assert = require('assert');
|
|
||||||
const fs = require('fs');
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const app = express();
|
const app = express();
|
||||||
|
const Websocket = require('ws');
|
||||||
const listenPort = process.env.HTTP_PORT || 3000;
|
const listenPort = process.env.HTTP_PORT || 3000;
|
||||||
let json_mapping = new Map();
|
let json_mapping = new Map();
|
||||||
let hook_mapping = new Map();
|
let hook_mapping = new Map();
|
||||||
|
let ws_packet_count = new Map();
|
||||||
|
let ws_metadata = new Map();
|
||||||
|
|
||||||
app.listen(listenPort, () => {
|
/** websocket server for listen audio */
|
||||||
|
const recvAudio = (socket, req) => {
|
||||||
|
let packets = 0;
|
||||||
|
let path = req.url;
|
||||||
|
console.log('received websocket connection');
|
||||||
|
socket.on('message', (data, isBinary) => {
|
||||||
|
if (!isBinary) {
|
||||||
|
try {
|
||||||
|
const msg = JSON.parse(data);
|
||||||
|
console.log({msg}, 'received websocket message');
|
||||||
|
ws_metadata.set(path, msg);
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log({err}, 'error parsing websocket message');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
packets += data.length;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.on('error', (err) => {
|
||||||
|
console.log({err}, 'listen websocket: error');
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('close', () => {
|
||||||
|
ws_packet_count.set(path, packets);
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
const wsServer = new Websocket.Server({ noServer: true });
|
||||||
|
wsServer.setMaxListeners(0);
|
||||||
|
wsServer.on('connection', recvAudio.bind(null));
|
||||||
|
|
||||||
|
const server = app.listen(listenPort, () => {
|
||||||
console.log(`sample jambones app server listening on ${listenPort}`);
|
console.log(`sample jambones app server listening on ${listenPort}`);
|
||||||
});
|
});
|
||||||
|
server.on('upgrade', (request, socket, head) => {
|
||||||
|
console.log('received upgrade request');
|
||||||
|
wsServer.handleUpgrade(request, socket, head, (socket) => {
|
||||||
|
wsServer.emit('connection', socket, request);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
@@ -20,6 +60,7 @@ app.use(express.json());
|
|||||||
app.all('/', (req, res) => {
|
app.all('/', (req, res) => {
|
||||||
console.log(req.body, 'POST /');
|
console.log(req.body, 'POST /');
|
||||||
const key = req.body.from
|
const key = req.body.from
|
||||||
|
addRequestToMap(key, req, hook_mapping);
|
||||||
return getJsonFromMap(key, req, res);
|
return getJsonFromMap(key, req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -96,6 +137,27 @@ app.get('/lastRequest/:key', (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// WS Fetch
|
||||||
|
app.get('/ws_packet_count/:key', (req, res) => {
|
||||||
|
let key = `/${req.params.key}`;
|
||||||
|
console.log(key, ws_packet_count);
|
||||||
|
if (ws_packet_count.has(key)) {
|
||||||
|
return res.json({ count: ws_packet_count.get(key) });
|
||||||
|
} else {
|
||||||
|
return res.sendStatus(404);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get('/ws_metadata/:key', (req, res) => {
|
||||||
|
let key = `/${req.params.key}`;
|
||||||
|
console.log(key, ws_packet_count);
|
||||||
|
if (ws_metadata.has(key)) {
|
||||||
|
return res.json({ metadata: ws_metadata.get(key) });
|
||||||
|
} else {
|
||||||
|
return res.sendStatus(404);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* private function
|
* private function
|
||||||
*/
|
*/
|
||||||
|
|||||||
29
test/webhook/package-lock.json
generated
29
test/webhook/package-lock.json
generated
@@ -9,7 +9,8 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2"
|
"express": "^4.18.2",
|
||||||
|
"ws": "^8.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/accepts": {
|
"node_modules/accepts": {
|
||||||
@@ -587,6 +588,26 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
||||||
|
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": ">=5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1013,6 +1034,12 @@
|
|||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||||
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "8.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
||||||
|
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
||||||
|
"requires": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"author": "Dave Horton",
|
"author": "Dave Horton",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2"
|
"express": "^4.18.2",
|
||||||
|
"ws":"^8.12.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user