VoiceXSMessageChannel.swift 3.32 KB
//
//  VoiceXSMessageChannel.swift
//  Runner
//
//  Created by MacBook Pro on 2023/6/28.
//

import UIKit

class VoiceXSMessageChannel: NSObject,SSOralEvaluatingManagerDelegate {
    var resultData:Dictionary<String, Any>?
    var channel:FlutterBasicMessageChannel?
    init(messager:FlutterBinaryMessenger) {
        super.init()
        resultData = Dictionary()
        self.setEvaluateConfig()
        channel = FlutterBasicMessageChannel(name: "com.owEnglish.voiceXs.BasicMessageChannel", binaryMessenger: messager)
        channel!.setMessageHandler { message, reply in
            if let dict = message as? Dictionary<String, Any> {
                self.evaluateVioce(dict: dict);
            }
        }
    }
    
    //配置评测信息
    func setEvaluateConfig() {
        let config = SSOralEvaluatingManagerConfig.init()
        config.appKey = "a418"
        config.secretKey = "1a16f31f2611bf32fb7b3fc38f5b2c81"
        config.vad = true
        config.frontTime = 3
        config.backTime = 3
        config.isOutputLog = false
        SSOralEvaluatingManager.register(config)
        SSOralEvaluatingManager.share().register(.line, userId: "321")
        SSOralEvaluatingManager.share().delegate = self
    }
    
    //开始评测
    func evaluateVioce(dict:Dictionary<String, Any>)  {
        let text = dict["word"] as! String
        let type = dict["type"] as! Int
        let userId = dict["userId"] as! String
        let config = SSOralEvaluatingConfig()
        config.oralContent = text
        if (type == 0) {
            config.oralType = .word
        } else {
            config.oralType = .sentence
        }
        config.userId = userId
        SSOralEvaluatingManager.share().startEvaluateOral(with: config)
    }
    
    //评测结果回调
    func evaluateResult() {
        channel!.sendMessage(resultData) {(reply) in
            self.resultData?.removeAll()
        }
    }
    
    //SSOralEvaluatingManagerDelegate
    /**
     评测开始
     */
    func oralEvaluatingDidStart() {
        print("评测开始")
    }
    
    /**
     评测停止
     */
    func oralEvaluatingDidStop() {
        print("评测结束")
    }
    
    /**
     评测完成后的结果
     */
    func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]?, requestId request_id: String?) {
        print("评测完成结果")
        let resultDict:Dictionary<String, Any> = result?["result"] as! Dictionary
        resultData!["result"] = "1"
        //分数
        resultData!["overall"] = resultDict["overall"]
        self.evaluateResult()
    }
    
    /**
     评测失败回调
     */
    func oralEvaluatingDidEndError(_ error: Error?, requestId request_id: String?) {
        print("评测失败")
        resultData!["result"] = "0"
        self.evaluateResult()
    }
    
    /**
     VAD(前置时间超时回调
     */
    func oralEvaluatingDidVADFrontTimeOut() {
        print("前置超时--->取消")
        SSOralEvaluatingManager.share().cancelEvaluate()
        if(resultData?.keys.count == 0) {
            resultData!["result"] = "0"
            self.evaluateResult();
        }
    }
    
    /**
     VAD(后置时间超时回调
     */
    func oralEvaluatingDidVADBackTimeOut() {
        print("后置超时--->结束")
        ///结束回调
        SSOralEvaluatingManager.share().stopEvaluate();
    }
}