BS
Size: a a a
BS
PA
BS
BS
import { SubscribeMessage, WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Client, Server } from 'socket.io';
import { spawn } from 'child_process';
import UUID from 'pure-uuid';
import { SettingsService } from './settings.service';
@WebSocketGateway({ namespace: 'settings', path: '/ws' })
export class SettingsGateway {
@WebSocketServer()
server: Server;
tasksQueue: Array<{ id: string }>;
constructor(private readonly settingsService: SettingsService) {
this.tasksQueue = [];
}
handleConnection(client: Client) {
// tslint:disable-next-line:no-console
console.log('Client connected', client.id);
this.emitTasksQueueUpdated();
}
@SubscribeMessage('regenerateFrontend')
onRegenerateFrontend(client: Client) {
return { event: 'regenerateFrontend', data: new UUID(4).format() };
}
@SubscribeMessage('tasksQueue')
onTasksQueue(client) {
// tslint:disable-next-line:no-console
console.log('Subscribed task tasksQueue');
return this.tasksQueue;
}
async emitTasksQueueUpdated() {
this.server.emit('tasksQueue', this.tasksQueue);
}
@SubscribeMessage('regenerate')
onEvent(client: Client, taskId) {
this.tasksQueue.push({ id: taskId });
this.emitTasksQueueUpdated();
const child = spawn(
'npm',
['run', 'generate'],
{
cwd: 'path-to-frontend',
// env: {},
shell: true,
},
);
let chunks = ''; // output
child.stdout.on('data', (content) => {
chunks += content;
// @ts-ignore
client.emit(taskId, chunks);
});
child.stderr.on('data', (content) => {
chunks += content;
// @ts-ignore
client.emit(taskId, chunks);
});
child.on('close', (code) => {
// @ts-ignore
client.emit(`${taskId}_done`, code);
this.tasksQueue.shift();
this.emitTasksQueueUpdated();
});
}
}
ВБ
import { SubscribeMessage, WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Client, Server } from 'socket.io';
import { spawn } from 'child_process';
import UUID from 'pure-uuid';
import { SettingsService } from './settings.service';
@WebSocketGateway({ namespace: 'settings', path: '/ws' })
export class SettingsGateway {
@WebSocketServer()
server: Server;
tasksQueue: Array<{ id: string }>;
constructor(private readonly settingsService: SettingsService) {
this.tasksQueue = [];
}
handleConnection(client: Client) {
// tslint:disable-next-line:no-console
console.log('Client connected', client.id);
this.emitTasksQueueUpdated();
}
@SubscribeMessage('regenerateFrontend')
onRegenerateFrontend(client: Client) {
return { event: 'regenerateFrontend', data: new UUID(4).format() };
}
@SubscribeMessage('tasksQueue')
onTasksQueue(client) {
// tslint:disable-next-line:no-console
console.log('Subscribed task tasksQueue');
return this.tasksQueue;
}
async emitTasksQueueUpdated() {
this.server.emit('tasksQueue', this.tasksQueue);
}
@SubscribeMessage('regenerate')
onEvent(client: Client, taskId) {
this.tasksQueue.push({ id: taskId });
this.emitTasksQueueUpdated();
const child = spawn(
'npm',
['run', 'generate'],
{
cwd: 'path-to-frontend',
// env: {},
shell: true,
},
);
let chunks = ''; // output
child.stdout.on('data', (content) => {
chunks += content;
// @ts-ignore
client.emit(taskId, chunks);
});
child.stderr.on('data', (content) => {
chunks += content;
// @ts-ignore
client.emit(taskId, chunks);
});
child.on('close', (code) => {
// @ts-ignore
client.emit(`${taskId}_done`, code);
this.tasksQueue.shift();
this.emitTasksQueueUpdated();
});
}
}
PA
AD
AD
/pages/_id.vue
/
, а потом уже vue переходит на /pages/_id.vue
/pages/_id.vue
выдаетсяAD
AD
D
D
PA
AD
AD
N
SN
SN
SN