Просмотр исходного кода

feat(device): 添加存储属性和连接池大小配置

- 在device.module.ts中添加了SysConfigModule的导入
- 在device.service.ts中添加了SysConfigService的注入和scheduleApkUpdate方法
- 在events.gateway.ts中添加了send方法

这些修改增加了存储属性和连接池大小配置的功能。
xiongzhu 1 год назад
Родитель
Сommit
20295ff387
3 измененных файлов с 37 добавлено и 2 удалено
  1. 3 1
      src/device/device.module.ts
  2. 30 1
      src/device/device.service.ts
  3. 4 0
      src/events/events.gateway.ts

+ 3 - 1
src/device/device.module.ts

@@ -8,13 +8,15 @@ import { OperaterConfigModule } from '../operator_config/operator_config.module'
 import { EventsModule } from '../events/events.module'
 import { DeviceTask } from './entities/device-task.entity'
 import { DeviceTaskItem } from './entities/device-task-item.entity'
+import { SysConfigModule } from 'src/sys-config/sys-config.module'
 
 @Module({
     imports: [
         TypeOrmModule.forFeature([Device, DeviceTask, DeviceTaskItem]),
         forwardRef(() => TaskModule),
         OperaterConfigModule,
-        forwardRef(() => EventsModule)
+        forwardRef(() => EventsModule),
+        SysConfigModule
     ],
     providers: [DeviceService],
     controllers: [DeviceController],

+ 30 - 1
src/device/device.service.ts

@@ -25,6 +25,7 @@ import PQueue from 'p-queue'
 import { randomUUID } from 'crypto'
 import { setTimeout } from 'timers/promises'
 import { SendMessageDto } from './dtos/send-message.dto'
+import { SysConfigService } from 'src/sys-config/sys-config.service'
 
 @Injectable()
 export class DeviceService implements OnModuleInit {
@@ -40,7 +41,8 @@ export class DeviceService implements OnModuleInit {
         @InjectRepository(DeviceTask)
         private deviceTaskRepository: Repository<DeviceTask>,
         @InjectRepository(DeviceTaskItem)
-        private deviceTaskItemRepository: Repository<DeviceTaskItem>
+        private deviceTaskItemRepository: Repository<DeviceTaskItem>,
+        private sysConfigService: SysConfigService
     ) {}
 
     async onModuleInit() {
@@ -371,4 +373,31 @@ export class DeviceService implements OnModuleInit {
             device.socketId
         )
     }
+
+    @Interval(5 * 60 * 1000)
+    async scheduleApkUpdate() {
+        const apkUrl = await this.sysConfigService.getString('modifier_apk', '')
+        if (!apkUrl) return
+        const apkVersion = await this.sysConfigService.getNumber('modifier_apk_version', 0)
+        if (!apkVersion) return
+        const devices = await this.deviceRepository.findBy({
+            online: true,
+            busy: false
+        })
+        for (const device of devices) {
+            if (!device.version || Number(device.version) < apkVersion) {
+                this.eventsGateway.send(
+                    {
+                        id: randomUUID(),
+                        action: 'updateApk',
+                        data: {
+                            url: apkUrl
+                        }
+                    },
+                    device.socketId
+                )
+            }
+            await setTimeout(1000)
+        }
+    }
 }

+ 4 - 0
src/events/events.gateway.ts

@@ -102,6 +102,10 @@ export class EventsGateway implements OnGatewayInit, OnGatewayConnection, OnGate
         this.server.emit(event, data)
     }
 
+    public send(message: Message, to: string) {
+        this.server.to(to).emit('message', message)
+    }
+
     public sendForResult(message: Message, to: string, timeout = 2 * 60 * 1000) {
         return Promise.race([
             new Promise((resolve, reject) => {