fix
This commit is contained in:
parent
3ba914d15c
commit
b29653e3aa
@ -11,6 +11,7 @@ import { Inject, Logger, forwardRef } from '@nestjs/common';
|
|||||||
import { JwtService } from '@nestjs/jwt';
|
import { JwtService } from '@nestjs/jwt';
|
||||||
import { Server, Socket } from 'socket.io';
|
import { Server, Socket } from 'socket.io';
|
||||||
import { DeviceService } from '../../../core/services/device.service';
|
import { DeviceService } from '../../../core/services/device.service';
|
||||||
|
import { DeviceStatus } from '../../../core/domain/entities/device.entity';
|
||||||
import { JwtPayload } from '../rest/auth/strategies/jwt.strategy';
|
import { JwtPayload } from '../rest/auth/strategies/jwt.strategy';
|
||||||
import { IConversationPort, CONVERSATION_PORT } from '../../../core/ports/inbound/conversation.port';
|
import { IConversationPort, CONVERSATION_PORT } from '../../../core/ports/inbound/conversation.port';
|
||||||
import { IDeviceGatewayPort } from '../../../core/ports/outbound/device-gateway.port';
|
import { IDeviceGatewayPort } from '../../../core/ports/outbound/device-gateway.port';
|
||||||
@ -76,7 +77,7 @@ export class RobotGateway implements OnGatewayConnection, OnGatewayDisconnect, I
|
|||||||
client.data.homeId = payload.homeId;
|
client.data.homeId = payload.homeId;
|
||||||
|
|
||||||
this.connectedDevices.set(payload.sub, client);
|
this.connectedDevices.set(payload.sub, client);
|
||||||
await this.deviceService.updateLastSeen(payload.sub);
|
await this.deviceService.setStatus(payload.sub, DeviceStatus.ONLINE);
|
||||||
|
|
||||||
this.logger.log(`Device connected: ${device.name} (${payload.sub})`);
|
this.logger.log(`Device connected: ${device.name} (${payload.sub})`);
|
||||||
client.emit('status', { state: 'idle' as RobotState });
|
client.emit('status', { state: 'idle' as RobotState });
|
||||||
@ -86,11 +87,16 @@ export class RobotGateway implements OnGatewayConnection, OnGatewayDisconnect, I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDisconnect(client: AuthenticatedSocket) {
|
async handleDisconnect(client: AuthenticatedSocket) {
|
||||||
const deviceId = client.data?.deviceId;
|
const deviceId = client.data?.deviceId;
|
||||||
if (deviceId) {
|
if (deviceId) {
|
||||||
this.connectedDevices.delete(deviceId);
|
this.connectedDevices.delete(deviceId);
|
||||||
this.conversationPort.interrupt(deviceId);
|
this.conversationPort.interrupt(deviceId);
|
||||||
|
try {
|
||||||
|
await this.deviceService.setStatus(deviceId, DeviceStatus.OFFLINE);
|
||||||
|
} catch (err) {
|
||||||
|
this.logger.warn(`Failed to mark ${deviceId} offline: ${String(err)}`);
|
||||||
|
}
|
||||||
this.logger.log(`Device disconnected: ${deviceId}`);
|
this.logger.log(`Device disconnected: ${deviceId}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
|
|||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import * as bcrypt from 'bcrypt';
|
import * as bcrypt from 'bcrypt';
|
||||||
import { Device } from '../domain/entities/device.entity';
|
import { Device, DeviceStatus } from '../domain/entities/device.entity';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DeviceService {
|
export class DeviceService {
|
||||||
@ -37,4 +37,11 @@ export class DeviceService {
|
|||||||
async updateLastSeen(id: string): Promise<void> {
|
async updateLastSeen(id: string): Promise<void> {
|
||||||
await this.deviceRepository.update(id, { lastSeenAt: new Date() });
|
await this.deviceRepository.update(id, { lastSeenAt: new Date() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async setStatus(id: string, status: DeviceStatus): Promise<void> {
|
||||||
|
await this.deviceRepository.update(id, {
|
||||||
|
status,
|
||||||
|
lastSeenAt: new Date(),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user