Skip to content

Commit

Permalink
Merge pull request #29 from webpractik/redownload-file
Browse files Browse the repository at this point in the history
feat(file): добавил автоматический запрос на получение пропущенного ф…
  • Loading branch information
mnlght authored Oct 31, 2021
2 parents 6360fa5 + 97ed6be commit 4cbb84d
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 25 deletions.
21 changes: 13 additions & 8 deletions src/connections/SocketIoClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import logger from '../logger';
import { link, userToken } from '../config';
import IPCServer from './IPCServer';
import LoggingService from '../service/LoggingService';
import { GetNextFileService } from '../service/GetNextFileService';

export class SocketIoClient {
// @ts-ignore
Expand Down Expand Up @@ -62,13 +63,12 @@ export class SocketIoClient {
*/
private handleRemoteEvents() {
this.socket
.on('connect', () =>
LoggingService.process(logger, {
level: 'info',
message: 'установлено подключение к сокету удалённого сервера',
group: 'socket.io',
})
)
.on('connect', () => {
LoggingService.process(logger, { level: 'info', message: 'установлено подключение к сокету удалённого сервера', group: 'socket.io' });

LoggingService.process(logger, { level: 'info', message: 'запрос на получение пропущенного файла', group: 'socket.io' });
this.socket.emit('session-file-repeat', { lastFileId: new GetNextFileService().getFileName() });
})
.on('disconnect', () => this.sendToClient('disconnect', 'error'))

.on('connect_error', () => this.sendToClient('disconnect', 'error'))
Expand All @@ -77,7 +77,12 @@ export class SocketIoClient {
.on('reconnect_attempt', () => this.sendToClient('reconnect_attempt'))
.on('reconnect_error', () => this.sendToClient('reconnect_error', 'error'))
.on('reconnect_failed', () => this.sendToClient('reconnect_failed', 'error'))
.on('reconnect', () => this.sendToClient('reconnect'))
.on('reconnect', () => {
this.sendToClient('reconnect');

LoggingService.process(logger, { level: 'info', message: 'запрос на получение пропущенного файла', group: 'socket.io' });
this.socket.emit('session-file-repeat', { lastFileId: new GetNextFileService().getFileName() });
})

.on('error', (error: Object) => LoggingService.process(logger, { level: 'error', message: error.toString(), error, group: 'socket.io' }));
}
Expand Down
6 changes: 6 additions & 0 deletions src/service/GetNextFileService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ import LoggingService from './LoggingService';
export class GetNextFileService {
protected lastFileName: any;

public getFileName() {
const file = this.goSignal();

return file.toString().split('.')[0];
}

goSignal() {
try {
const dirPath = 'files/in/';
Expand Down
72 changes: 55 additions & 17 deletions src/service/SessionService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,50 @@ class SessionService {
}
}

private saveMissedFile(data: any) {
LoggingService.process(logger, {
level: 'info',
message: `получен пропущенный файл ${data.fileId}`,
sessionId: this.id,
fileId: data.fileId,
group: 'file',
});

try {
fs.writeFileSync(`files/in/${data.fileId}.json`, JSON.stringify(data.content));
} catch (e) {
LoggingService.process(logger, {
level: 'error',
message: `пропущенный файл ${data.fileId} не был сохранен с ошибкой ${e.message}`,
sessionId: this.id,
group: 'file',
});
}
}

private saveFileAgain(data: any) {
LoggingService.process(logger, {
level: 'info',
message: `повторно получен файл ${data.fileId}`,
sessionId: this.id,
fileId: data.fileId,
group: 'file',
});

try {
fs.writeFileSync(`files/in/${data.fileId}.json`, JSON.stringify(data.content));
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.success' });
} catch (e) {
LoggingService.process(logger, {
level: 'error',
message: `файл ${data.fileId} не был сохранен с ошибкой ${e.message}`,
sessionId: this.id,
group: 'file',
});
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.error', source: e.message, type: 'error' });
}
}

subscribe() {
console.log('subscribe');
this.client.socket
Expand Down Expand Up @@ -211,30 +255,24 @@ class SessionService {
}
})
.on('session-file-repeat-success', (data: any) => {
LoggingService.process(logger, {
level: 'info',
message: `Повторно получен файл ${data.fileId}`,
sessionId: this.id,
fileId: data.fileId,
group: 'file',
});

try {
fs.writeFileSync(`files/in/${data.fileId}.json`, JSON.stringify(data.content));
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.success' });
} catch (e) {
if (data.missed) {
this.saveMissedFile(data);
} else {
this.saveFileAgain(data);
}
})
.on('session-file-repeat-error', (data: any) => {
if (data.missed) {
LoggingService.process(logger, {
level: 'error',
message: `файл ${data.fileId} не был сохранен с ошибкой ${e.message}`,
message: `пропущенный файл не был получен с ошибкой "${data.message}"`,
sessionId: this.id,
group: 'file',
});
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.error', source: e.message, type: 'error' });
} else {
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.error', source: data, type: 'error' });
}
})
.on('session-file-repeat-error', (data: any) => {
IPCServer.sendToClient('message.file.repeat', { message: 'message.file.repeat.error', source: data, type: 'error' });
})

.on('session-file-send-success', (data: any) => {
IPCServer.sendToClient('message.file', { message: 'message.file.success', source: data });
Expand Down

0 comments on commit 4cbb84d

Please sign in to comment.