syncDeviceController.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { BasicController } from "./basicController.js";
  2. // import { RoomAssistant } from "./assistant.js";
  3. import { getAllRoomUsers, updateRoomUser } from "../service/userService.js";
  4. import { FROMTYPE, EVENT } from "../enum/index.js";
  5. export class SyncDeviceController extends BasicController {
  6. constructor(...args) {
  7. super(...args);
  8. this.room = args[3];
  9. }
  10. async run() {
  11. if (this.room.user) {
  12. const syncId = this.room.syncId;
  13. const userId = this.room.userId;
  14. const from = this.room.user.from;
  15. this.joinSyncClient(syncId, userId, from);
  16. this.initAction();
  17. } else {
  18. this.logger.error("roomController:init: 初始化失败!");
  19. }
  20. }
  21. async joinSyncClient(syncId, userId, from) {
  22. this.logger.info("syncId", { syncId, userId, from });
  23. try {
  24. await this.redisCli.hSet(syncId, from, userId);
  25. this.socket.join(syncId);
  26. } catch (error) {
  27. this.logger.error("joinSyncClient", error);
  28. }
  29. }
  30. initAction() {
  31. this.socket.on(EVENT.clientSyncAction, (data) => {
  32. this.socket.broadcast.to(this.room.syncId).emit(EVENT.clientSyncAction, data);
  33. });
  34. this.socket.on(EVENT.changeVoiceStatus, async (data) => {
  35. try {
  36. this.socket.broadcast.to(this.room.syncId).emit(EVENT.changeVoiceStatus, data);
  37. const updateUser = {
  38. ...this.room.user,
  39. voiceStatus: data.status,
  40. };
  41. const isUpdate = await updateRoomUser(this.room.roomId, this.room.userId, updateUser);
  42. const AllRoomUsers = await getAllRoomUsers(this.room.roomId);
  43. this.logger.info("changeVoiceStatus", { roomId: this.room.roomId, data, AllRoomUsers: AllRoomUsers.length });
  44. this.socket.broadcast.to(this.room.roomId).emit(EVENT.changeVoiceStatus, {
  45. user: this.room.user,
  46. roomsPerson: AllRoomUsers,
  47. });
  48. } catch (error) {
  49. this.logger.error("event::changeVoiceStatus", error);
  50. }
  51. });
  52. }
  53. }