liveroom.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const assert = require('assert');
  3. const _ = require('lodash');
  4. const { ObjectId } = require('mongoose').Types;
  5. const { CrudService } = require('naf-framework-mongoose/lib/service');
  6. const { BusinessError, ErrorCode } = require('naf-core').Error;
  7. class LiveroomService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx, 'liveroom');
  10. this.model = this.ctx.model.Liveroom;
  11. }
  12. async create(data) {
  13. const { subid, teacherid } = data;
  14. assert(subid, '缺少科目信息');
  15. assert(teacherid, '缺少教师信息');
  16. const list = await this.model.find();
  17. const last = _.last(list);
  18. let number = '000001';
  19. if (last) {
  20. number = last.number * 1 + 1;
  21. }
  22. data.number = number;
  23. const res = await this.model.create(data);
  24. return res;
  25. }
  26. async personcount(data) {
  27. const { number, name, userid, type } = data;
  28. // 取出已经进入直播的用户列表
  29. await this.app.redis.flushall(`liveroom${number}`);
  30. let list = await this.app.redis.get(`liveroom${number}`);
  31. console.group('group');
  32. console.table(list);
  33. console.groupEnd();
  34. if (list) {
  35. // // 已经开始直播,并且有人观看
  36. list = JSON.parse(list);
  37. } else {
  38. // 还没有人进直播
  39. list = [{ name, userid }];
  40. }
  41. if (!type) {
  42. list.push({ name, userid, number });
  43. list = _.uniqBy(list, 'userid');
  44. } else {
  45. list = list.filter(f => f.userid !== userid);
  46. }
  47. console.group('group2');
  48. console.log(JSON.parse(list));
  49. console.groupEnd();
  50. await this.app.redis.set(`liveroom${number}`, JSON.parse(list));
  51. const { mq } = this.ctx;
  52. if (mq) {
  53. const exchange = 'liveroom-personcount';
  54. const parm = {
  55. durable: true,
  56. headers: {
  57. userid: 1,
  58. },
  59. };
  60. await mq.fanout(exchange, number, list, parm);
  61. }
  62. }
  63. }
  64. module.exports = LiveroomService;