import md5 from "md5";
class ControlWSMsg {
  constructor(ws, fid, tids = []) {
    // 消息ID
    this.mid = URL.createObjectURL(new Blob()).substr(-36).replace(/-/g, "");
    // 精确到秒
    this.timeunix = Math.floor(Date.now() / 1000);
    // 发送者ID
    this.fid = String(fid);
    // 接收收者数组 空数组则发送给其他所有人
    this.tids = tids;
    this.ws = ws;
  }
  // 连接后回发(确认)
  afterConnection(body) {
    this.code = 1001;
    // {userid, username, schoolid, usertype(1管理员, 2学生)}
    this.body = body;
  }
  // 获取在线用户列表
  onlineUsers(body) {
    this.code = 1002;
    // {schoolid}
    this.body = body;
  }
  // 发送消息
  msgContent(msg) {
    this.code = 2001;
    // {msg}
    this.body = { msg };
  }
  // 锁定
  limitedUse() {
    this.code = 2002;
  }
  // 解除锁定
  removeLimit() {
    this.code = 2003;
  }
  // 更新策略
  updateStrategy() {
    this.code = 2004;
  }
  // 重启设备
  rebootDevice() {
    this.code = 2005;
  }
  // 恢复出厂
  restoreFactory() {
    this.code = 2006;
  }
  // 解除管控
  removeControl() {
    this.code = 2007;
  }
  // 解除绑定
  removeBind() {
    this.code = 2008;
  }
  toJSONString() {
    let tempObj = {};
    for (let key in this) {
      if (key !== "ws") {
        tempObj[key] = this[key];
      }
    }
    return JSON.stringify(tempObj);
  }
  send(cb) {
    // 计算方式(md5(md5(code_mid_timeunix)))
    let code_mid_timeunix = `${this.code}_${this.mid}_${this.timeunix}`;
    this.sign = md5(md5(code_mid_timeunix));
    let ws = this.ws;
    if (ws && ws.readyState === 1) {
      let msg = this.toJSONString();
      // console.log("发送消息", msg);
      ws.send(msg);
      cb && cb(true);
    } else {
      cb && cb(false);
    }
  }
}
export default ControlWSMsg;
