Changes to socket.io code

This commit is contained in:
2021-05-17 16:27:53 -07:00
parent 875953de6a
commit c6be5de396
3 changed files with 236 additions and 11538 deletions

11574
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,12 +4,11 @@ import path from "path";
import { Service, ServiceBroker, Context } from "moleculer";
import ApiGateway from "moleculer-web";
import { getCovers, extractArchive } from "../utils/uncompression.utils";
import { map } from "lodash";
import { map, flatten } from "lodash";
import JSONStream from "JSONStream";
const IO = require("socket.io")();
export default class ApiService extends Service {
public constructor(broker: ServiceBroker) {
super(broker);
// @ts-ignore
@@ -20,65 +19,78 @@ export default class ApiService extends Service {
settings: {
port: process.env.PORT || 3000,
routes: [{
path: "/api",
whitelist: [
// Access to any actions in all services under "/api" URL
"**",
],
use: [],
mergeParams: true,
autoAliases: true,
routes: [
{
path: "/api",
whitelist: [
// Access to any actions in all services under "/api" URL
"**",
],
use: [],
mergeParams: true,
autoAliases: true,
aliases: {},
/**
* Before call hook. You can check the request.
* @param {Context} ctx
* @param {Object} route
* @param {IncomingMessage} req
* @param {ServerResponse} res
* @param {Object} data
onBeforeCall(ctx: Context<any,{userAgent: string}>,
route: object, req: IncomingMessage, res: ServerResponse) {
Set request headers to context meta
ctx.meta.userAgent = req.headers["user-agent"];
},
*/
/**
* After call hook. You can modify the data.
* @param {Context} ctx
* @param {Object} route
* @param {IncomingMessage} req
* @param {ServerResponse} res
* @param {Object} data
*
onAfterCall(ctx: Context, route: object, req: IncomingMessage, res: ServerResponse, data: object) {
// Async function which return with Promise
return doSomething(ctx, res, data);
},
*/
// Calling options. More info: https://moleculer.services/docs/0.14/moleculer-web.html#Calling-options
callingOptions: {},
bodyParsers: {
json: {
strict: false,
limit: "1MB",
aliases: {
async "POST getComicCovers"(req, res) {
console.log(req.body);
try {
const { extractionOptions, walkedFolders } =
req.body;
switch (extractionOptions.extractionMode) {
case "bulk":
const extractedDataPromises = map(
walkedFolders,
async (folder) =>
await extractArchive(
extractionOptions,
folder
)
);
return Promise.all(
extractedDataPromises
).then((data) => flatten(data));
case "single":
return await extractArchive(
extractionOptions,
walkedFolders[0]
);
default:
console.log(
"Unknown extraction mode selected."
);
return {
message:
"Unknown extraction mode selected.",
errorCode: "90",
data: `${extractionOptions}`,
};
}
res.end();
} catch (error) {}
},
},
urlencoded: {
extended: true,
limit: "1MB",
// Calling options. More info: https://moleculer.services/docs/0.14/moleculer-web.html#Calling-options
callingOptions: {},
bodyParsers: {
json: {
strict: false,
limit: "1MB",
},
urlencoded: {
extended: true,
limit: "1MB",
},
},
// Mapping policy setting. More info: https://moleculer.services/docs/0.14/moleculer-web.html#Mapping-policy
mappingPolicy: "all", // Available values: "all", "restrict"
// Enable/disable logging
logging: true,
},
// Mapping policy setting. More info: https://moleculer.services/docs/0.14/moleculer-web.html#Mapping-policy
mappingPolicy: "all", // Available values: "all", "restrict"
// Enable/disable logging
logging: true,
}],
],
// Do not log client side errors (does not log an error response when the error.code is 400<=X<500)
log4XXResponses: false,
// Logging the request parameters. Set to any log level to enable it. E.g. "info"
@@ -93,23 +105,46 @@ export default class ApiService extends Service {
},
},
methods: {
},
methods: {},
events: {
"**"(payload, sender, event) {
if (this.io)
this.io.emit("event", {
sender,
event,
payload
});
}
"**"(payload, sender, event) {
if (this.io)
this.io.emit("event", {
sender,
event,
payload,
});
},
},
started(): any {
// Create a Socket.IO instance, passing it our server
this.io = IO.listen(this.server);
// Add a connect listener
this.io.on("connection", (client) => {
this.logger.info("Client connected via websocket!");
client.on("call", ({ action, params, opts }, done) => {
this.logger.info(
"Received request from client! Action:",
action,
", Params:",
params
);
this.broker
.call(action, params, opts)
.then((res) => {
if (done) done(res);
})
.catch((err) => this.logger.error(err));
});
client.on("disconnect", () => {
this.logger.info("Client disconnected");
});
});
},
});
}
}

View File

@@ -14,6 +14,7 @@ import through2 from "through2";
import oboe from "oboe";
import H from "highland";
import { stringify } from "highland-json";
const IO = require("socket.io")();
export default class ProductsService extends Service {
// @ts-ignore
@@ -54,32 +55,6 @@ export default class ProductsService extends Service {
},
},
methods: {},
started(): any {
// Create a Socket.IO instance, passing it our server
this.io = IO.listen(this.server);
// Add a connect listener
this.io.on("connection", client => {
this.logger.info("Client connected via websocket!");
client.on("call", ({ action, params, opts }, done) => {
this.logger.info("Received request from client! Action:", action, ", Params:", params);
this.broker.call(action, params, opts)
.then(res => {
if (done)
done(res);
})
.catch(err => this.logger.error(err));
});
client.on("disconnect", () => {
this.logger.info("Client disconnected");
});
});
}
},
schema
)