npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ecg-at-sdk

v1.1.4

Published

answer tool sdk

Downloads

3

Readme

英语答题器上层 sdk

封装了操作答题器的常用步骤

安装

npm i ecg-at-sdk

用法

import { IpcTool, answers } from 'ecg-at-sdk'

const ipcTool = new IpcTool()

// 开启调试模式,开发模式会打印log
ipcTool.enableDebug()

// 事件回调
ipcTool.on('device-inited', msg => {
  console.log(msg)
})

ipcTool.on('pong', (cmd, msg) => {
  console.log(cmd, msg)
})

// 方法调用
ipcTool.init() // 可选参数 type: any/audio/no-audio

API

实例方法

vm.enableDebug(mode)

  • 参数

    • {number} mode - 0 关闭 1 打印到console 2 通过debug事件传出
  • 用法

    • 开启debug模式
    • 只在 process.env.NODE_ENVdevelopment 时有效

vm.init(type)

  • 参数

    • {string} type - any|audio|no-audio
  • 用法

    • 初始化答题器实例
  • 备注

    • 另有别名方法 vm.answerInit()

vm.startLesson(lessonId, students)

  • 参数

    • {string} lessonId - 班级id,一般由业务后台提供
    • {Array} students - 学生列表,超过30个只去前30个
  • 用法

    • 开始上课,一般在登录后调用
  • 备注

    • 学生对象中必须有 stuid, stuname, stupoint 字段

vm.stopLesson()

  • 用法
    • 结束上课

vm.startAnswer(type, options)

  • 参数

    • {string} type - 答题类型,具体类型见可用常量
    • {Object} options - 答题参数,具体见示例
  • 示例

    // 可用答题类型: 
    vm.startAnswer('audio', {
      row1: "哈哈哈哈",
      row2: "请按选项键",
      row3: "总积分:0",  // 空格清空 " ", 保留上次内容 ""
      context: {
        stems:["stem1", "stem2"],  // stems:字符串数组,音频评测原型,可以单个,也可以是多个,根据题目类型不同,数量不同
        'audio-file-name-prefix': "",  // 拼接音频文件名前缀
      },
      custom: ""  // 在按键事件上报时会原样返回, 用于数据跟踪
    })

vm.stopAnswer(options)

  • 参数

    • {Object} options - 答题器回显参数
  • 示例

    vm.stopAnswer({
      row1: "哈哈哈哈",
      row2: "请按选项键",
      row3: "总积分:0",  // 空格清空 " ", 保留上次内容 ""
    })

vm.stopAnswerAndClear()

  • 示例

    vm.stopAnswerAndClear() // 停止答题并且清空 row2

vm.addStudent(student)

  • 参数

    • {Object} student - 添加的学生
  • 用法

    • 一般在缺勤或同步班上学生时使用,添加的学生会去重取最新的
  • 示例

    vm.addStudent({
      stuid: '0101',
      stuname: '张三丰',
      stupoint: 20
    })

vm.removeStudent(studentOrId)

  • 参数

    • {string | Object} studentOrId - 学生id 或者 学生对象
  • 用法

    • 用来同步学生列表,删除的学生在实例中会消失
  • 示例

    vm.removeStudent('0101')
    vm.removeStudent({
      stuid: '0101'
    })

vm.unbindStudent(stuid)

  • 参数

    • {string} - 学生id
  • 用法

    • 解绑学生,业务解绑+答题器drop

vm.setStudentContext(student)

  • 参数

    • {Object} student - 学生对象
  • 用法

    • 用来设置已绑定学生的答题器的回显
  • 示例

    vm.setStudentContext({
      stuid: '0101',
      stuname: '张三', // 姓名会截取8个字符
      stupoint: 20
    })

vm.setStudentScore(stuid, stupoint)

  • 参数

    • {string|number} stuid - 学生id
    • {string|number} stupoint - 学生分数
  • 用法

    • 用来直接更新答题器分数
    • 不会更新学生姓名
  • 示例

    vm.setStudentScore('0101', 20)
  • 别名 `vm.updateScore(student, stupoint)

vm.addScore(stuid, point)

  • 参数

    • {string|number} stuid - 学生id
    • {string|number} point - 学生加的分数
  • 用法

    • 增加学生分数
  • 示例

    vm.addScore(1000, 3)

ipc事件

device-inited

  • 说明

    • 设备初始化
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    event: "device-inited",
    avaliable-device-type: "audio",  // non-audio/audio
    ready: true,  // false
    info: ""  // no-power, not-connected, ip-not-set
  }

arrived

  • 说明

    • 答题器接收器插入
    • arrived 事件发生后,会紧接着发送 device-inited 事件
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    event: "arrived",
  }

removed

  • 说明

    • 答题器接收器拔出
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    event: "removed",
    info: "",  // no-power, not-connected, ip-not-set
  }

activated

  • 说明

    • 答题器激活
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    event: "activated",
    device: "device_id"
  }

inactivated

  • 说明

    • 答题器反激活
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    event: "inactivated",
    device: "device_id"
  }

key-pressed | audio-recognized | voice-evaluated

  • 说明

    • 答题器按键上报|语音已识别|语音已评测
  • 参数

  {
    id: "",  // GUID IPC 指令唯一标识,用于统计收发两端是否配对;原则指令是从哪边发哪边负责生成 id
    stuid: "0x01", // sdk 附加的学生id
    event: "key-pressed",  // audio-recognized/voice-evaluated
    device: "device-id",
    key: "T",  // T/F/A/B/C/D/G 多选题时是:"ABC"
    data: { start_time:Number, end_time:Number, result:string, score:int },
    extra: "|device-id|-|tickcount|.wav",
    custom: ""  // 发题时传入的原值
  }

底层事件

command

  • 说明

    • 原始 command 事件,由 @ecg/at-ipc 中触发
    • 业务中一般只需要处理ipc事件即可
  • 参数

    • {number} cmd 命令标识符 固定为 2018
    • {string} msg 消息JSON串

pong

  • 说明

    • 心跳事件
    • 由中科答题器定义的,任意一方在发送 ping,另外一方需发送 pong
  • 参数

    • {number} cmd 命令标识符 固定为 202 (ping 201, pong 202)
    • {string} msg 目前为 空字符串

自定义事件

active-device-exists

  • 说明

    • 激活设备已绑定时触发
  • 参数

    • {string} device 设备id
    • {Object} student 学生对象

active-device-success

  • 说明

    • 激活设备成功时触发
  • 参数

    • {string} device 设备id
    • {Object} student 学生对象

active-device-error

  • 说明

    • 激活设备不存在时触发
  • 参数

    • {string} device 设备id

inactive-device-success

  • 说明

    • 反激活设备成功时触发
  • 参数

    • {string} device 设备id
    • {Object} student 学生对象

inactive-device-error

  • 说明

    • 反激活设备不存在时触发
  • 参数

    • {string} device 设备id

unbind-student-success

  • 说明

    • 解绑学生成功时触发
  • 参数

    • {string} device 设备id
    • {Object} student 学生对象

unbind-student-error

  • 说明

    • 解绑学生不存在时触发
  • 参数

    • {string} stuid 学生id

可用常量

可用常量可以直接导出使用,如下:

import { answers, events, cmds } from '@ecg/at-sdk'

answers - 答题类型

const answers = {
  SINGLE_CHOICE: 'single-choice', // 单选
  MULTIPLE_CHOICE: 'multiple-choice', // 多选
  RED_ENVELOPE: 'red-envelope', // 红包
  CONTINUOUS_RED_ENVELOPE: 'continous-red-envelope', // 连续红包
  TRUE_FALSE: 'true-false', // 对错
  AUDIO: 'audio', // 语音
  GENERAL: 'general', // 通用
  MULTIPLE_QUESTION_SINGLE_CHOICE: 'multiple-question-single-choice', // 多题单选
  AUDIO_SINGLE: 'audio-single', // 单标准答案语音题
  AUDIO_MUTIPLE: 'audio-multiple', // 多标准答案语音题
  SIGN_UP: 'sign-up',
  AUDIO_MULTIPLE_CHN: 'audio-multiple-chn', // 多标准答案语音题(语文)
  EVALUATION: 'evaluation', // 通用语音评测
  VOICE_RECORD: 'voice-record' // 录音测试
}

events - 事件

const events = {
  DEVICE_INITED: 'device-inited', // 检测结果
  ARRIVED: 'arrived', // 答题器插入
  REMOVED: 'removed', // 答题器拔出
  ACTIVATED: 'activated', // 答题器激活
  INACTIVATED: 'inactivated', // 答题器反激活
  KEY_PRESSED: 'key-pressed', // 答题器按键
  VOICE_EVALUATED: 'voice-evaluated', // 语言评测结果(先声))
  AUDIO_RECOGNIZED: 'audio-recognized' // 语音识别结果(百度)
}

cmds - 命令

const cmds = {
  INIT: 'init', // 启用答题器
  ASK: 'ask', // 发题
  TEXT: 'text', // 设置回显
  HI: 'hi', // 控制指令
  STOP: 'stop', // 停止
  DROP: 'drop', // 清理多刷的答题器
  QUIT: 'quit' // 退出 (可能没用)
}

更多信息请参考 ts 定义文件

文档