Newer
Older
safe_production_front / public / DispatchLib / DispatchWsWorkerVoip.js
wangxitong on 16 Aug 24 KB first commit


/************************** 视频业务 ******************************/
function VoipCall(callid) {
    this.Js_CallID = callid;    //js的callid
    this.Ws_CallID = "";        //ws的callid
    this.CalledNum = "";
    this.LocalSdp = "";
    this.RemoteSdp = "";
    this.Status = 0;            //0-初始 1-链接中 2-响铃中 3-已接入
    this.CallIn = true;         //呼入
}

VoipCallList = [];      

VoipMode = 0;   //0-默认模式 1-无话机调度模式 2-左话机调度模式 3-左右话机调度模式
VoipLeftPhone = "";
VoipRightPhone = "";

//-1左话机 -2右话机
getDcPhoneExt = function(phone)
{
    console.log("getDcPhoneExt mode:", VoipMode, "phone:", phone);
    if (phone > 0)
    {
        return DcInfo.Number;
    }
    
    if (VoipMode == 1)
    {
        return DcInfo.Number;
    }
    else if (VoipMode == 2)
    {
        return VoipLeftPhone;
    }
    else if (VoipMode == 3 && phone == -1)
    {
        return VoipLeftPhone;
    }
    else if (VoipMode == 3 && phone == -2)
    {
        return VoipRightPhone;
    }
    else
    {
        return DcInfo.Number;
    }
}


onWebWorkerMessage_Voip = function (parm) {
    switch (parm.Msg) {
        case "VoipMakeAudioCallReq":
            VoipMakeAudioCall(parm);
            break
        case "VoipMakeVideoCallReq":
            VoipMakeVideoCall(parm);
            break
        case "VoipHangupCallReq":
            VoipHangupCall(parm);
            break
        case "VoipHandleIncomingCallReq":
            VoipHandleIncomingCall(parm);
            break
        case "VoipTransferCallReq":
            VoipTransferCall(parm);
            break
        case "VoipHoldCallReq":
            VoipHoldCall(parm);
            break
        case "VoipDispatchInsertCallReq":
            VoipDispatchInsertCall(parm);
            break
        case "VoipDispatchInterruptCallReq":
            VoipDispatchInterruptCall(parm);
            break
        case "VoipDispatchBreakCallReq":
            VoipDispatchBreakCall(parm);
            break
        case "VoipDispatchMoniterCallReq":
            VoipDispatchMoniterCall(parm);
            break
        case "VoipDispatchCallToConferenceReq":
            VoipDispatchCallToConference(parm);
            break
        case "VoipDispatchSubstituteCallReq":
            VoipDispatchSubstituteCall(parm);
            break
        case "VoipDispatchSetDcPhoneReq":
            VoipDispatchSetDcPhone(parm);
            break
        case "VoipDispatchAnswerFifoReq":
            VoipDispatchAnswerFifo(parm);
            break
        case "VoipDispatchCallBridgeReq":
            VoipDispatchCallBridge(parm);
            break
        case "VoipDispatchStopRingReq":
            VoipDispatchStopRing(parm);
            break
        case "VoipLastIncomingCall":
            VoipLastIncomingCall(parm);
            break
        case "VoipConferenceInviteReq":
            VoipConferenceInviteReq(parm);
            break
        case "VoipMsgToMcu":
            VoipMsgToMcu(parm);
            break
    }
}


VoipMakeAudioCall = function (parm) {

    var phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 7);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();

    }
    else
    {
        var call = new VoipCall(parm.CallID);
        call.CalledNum = parm.ExtNum;
        call.LocalSdp = parm.OfferSdp;
        call.Ws_CallID = guid();
        call.CallIn = false;
        VoipCallList.push(call);
    
        msg = new WsBaseMsg("Voip_Call_Req", 801);
        msg.onRspFail = function (reason) {
            var msgData = {
                Msg: "VoipCallStatusNotify",
                CallID: parm.CallID,
                Status: 4,
                Reason: "timeout",
            };
    
            postMessage(msgData);
        }
        msg.Set("nCalledType", 0);
        msg.Set("cCalledUserNum", parm.ExtNum);
        msg.Set("cCalledUserName", "");
        msg.Set("cCallID", call.Ws_CallID);
        msg.Set("cCallingUserNum", DcInfo.Number);
        msg.Set("cCallingUserName", DcInfo.Name);
        msg.Set("nCallingUserType", 2);
        msg.Set("cSdp", parm.OfferSdp);
        if (typeof SysThirdID != "undefined") {
            msg.Set("cThirdID", SysThirdID);
        }

        msg.Send("Voip_Call_Rsp");
    }

}

VoipMakeVideoCall = function (parm) {

    var call = new VoipCall(parm.CallID);
    call.CalledNum = parm.ExtNum;
    call.LocalSdp = parm.OfferSdp;
    call.Ws_CallID = guid();
    call.CallIn = false;
    VoipCallList.push(call);

    msg = new WsBaseMsg("Voip_Call_Req", 801);
    msg.onRspFail = function (reason) {
        var msgData = {
            Msg: "VoipCallStatusNotify",
            CallID: parm.CallID,
            Status: 4,
            Reason: "timeout",
        };

        postMessage(msgData);
    }
    msg.Set("nCalledType", 0);
    msg.Set("cCalledUserNum", parm.ExtNum);
    msg.Set("cCalledUserName", "");
    msg.Set("cCallID", call.Ws_CallID);
    msg.Set("cCallingUserNum", DcInfo.Number);
    msg.Set("cCallingUserName", DcInfo.Name);
    msg.Set("nCallingUserType", 2);
    msg.Set("cSdp", parm.OfferSdp);
    if (typeof SysThirdID != "undefined") {
        msg.Set("cThirdID", SysThirdID);
    }
    
    msg.Send("Voip_Call_Rsp");
}

VoipHangupCall = function (parm) {

    var phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 8);    
        msg.Set("oData", {
            Phone: phone,
        }); 
        msg.Send();

    }
    else
    {
        for (var i = 0; i < VoipCallList.length; i++)
        {
            var call = VoipCallList[i];
            if (call.Js_CallID == parm.CallID)
            {
                if (call.Status < 3)
                {
                    msg = new WsBaseMsg("Voip_Call_Cancel", 804);
                    msg.Set("cCallID", call.Ws_CallID);           
                    msg.Send();
                }
                else
                {
                    msg = new WsBaseMsg("Voip_Call_Bye_Req", 805);
                    msg.Set("cCallID", call.Ws_CallID);           
                    msg.Send();
                }
    
                VoipCallList.splice(i, 1);
    
                break;
            }
        }
    }

}


VoipHandleIncomingCall = function (parm) {
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Js_CallID == parm.CallID)
        {
            if (call.Status < 3 && call.CallIn) //推送且还未接入
            {
                if (parm.Handle == 1)
                {
                    var msgData = {
                        Msg: "VoipCallStatusNotify",
                        CallID: call.Js_CallID,
                        Status: 1,
                        Reason: "trying",
                    };

                    postMessage(msgData);
                    
                    
                    call.LocalSdp = parm.AnswerSdp;
                    msg = new WsBaseMsg("Voip_Call_Rsp", 802);
                    msg.Set("cCallID", call.Ws_CallID);    
                    msg.Set("nRetCode", 200); 
                    msg.Set("cSdp", parm.AnswerSdp);
                    msg.Send();
                }
                else
                {
                    msg = new WsBaseMsg("Voip_Call_Rsp", 802);
                    msg.Set("cCallID", call.Ws_CallID);    
                    msg.Set("nRetCode", 486); 
                    msg.Set("cSdp", ""); 
                    msg.Send();

                    VoipCallList.splice(i, 1);
                }
            }
            break;
        }
    }
}


VoipTransferCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 10);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式
        for (var i = 0; i < VoipCallList.length; i++)
        {
            var call = VoipCallList[i];
            if (call.Js_CallID == parm.CallID)
            {
                if (call.Status >= 3)
                {
                    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
                    msg.Set("nOperationType", 10);    
                    msg.Set("oData", {
                        Phone: DcInfo.ExtNumber,
                        Target: parm.ExtNum,
                    }); 
                    msg.Send();
                }
    
                break;
            }
        }
    }
}


VoipHoldCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 9);    
        msg.Set("oData", {
            Phone: phone,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchInsertCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 1);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchInterruptCall = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 2);    
    msg.Set("oData", {
        Target: parm.ExtNum,
    }); 
    msg.Send();
}

VoipDispatchBreakCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 6);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchMoniterCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 3);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchCallToConference = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 4);    
    msg.Set("oData", {
        Target: parm.ExtNum,
        ConfID: parm.ConfID,
    }); 
    msg.Send();
}

VoipDispatchSubstituteCall = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 5);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchSetDcPhone = function (parm) {

    VoipLeftPhone = parm.LeftExt;
    VoipRightPhone = parm.RightExt;

    if (VoipLeftPhone == "" && VoipRightPhone == "")
    {
        VoipMode = 1;
    }
    else if (VoipLeftPhone != "" && VoipRightPhone == "")
    {
        VoipMode = 2;
    }
    else if (VoipLeftPhone != "" && VoipRightPhone != "")
    {
        VoipMode = 3;
    }

    if (VoipMode > 1) {
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 15);    
        msg.Set("oData", {
            Left: VoipLeftPhone,
            Right: VoipRightPhone,
        }); 
        msg.Send();

        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 14);    
        msg.Set("oData", {
        }); 
        msg.Send();
    }
}

VoipDispatchAnswerFifo = function (parm) {
    phone = getDcPhoneExt(parm.CallID)
    if (phone != DcInfo.Number)
    {
        //话机模式
        msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
        msg.Set("nOperationType", 11);    
        msg.Set("oData", {
            Phone: phone,
            Target: parm.ExtNum,
        }); 
        msg.Send();
    } 
    else {
        //呼叫模式

    }
}

VoipDispatchCallBridge = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 12);    
    msg.Set("oData", {
        Target1: parm.ExtNum,
        Target: parm.OtherExtNum,       
    }); 
    msg.Send();
}

VoipDispatchStopRing = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 13);    
    msg.Set("oData", {
        Phone: parm.CallID,       
    }); 
    msg.Send();
}

VoipLastIncomingCall = function (parm) {
    //会议来电使用
}

VoipConferenceInviteReq = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 16);
    msg.Set("oData", {
        ConfID: parm.ConfID, 
        ExtNumList: parm.ExtNumList,
    }); 
    msg.Send();
}
    
VoipMsgToMcu = function (parm) {
    msg = new WsBaseMsg("Voip_Dispatch_Req", 811);
    msg.Set("nOperationType", 17);    
    msg.Set("oData", parm.Data); 
    msg.Send();
}



VoipOffline = function()
{
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call)
        {
            var msgData = {
                Msg: "VoipCallStatusNotify",
                CallID: call.Js_CallID,
                Status: 3,
                Reason: "server offline",
            };
            postMessage(msgData);
        }
    }

    VoipCallList = []
}


VoipOnline = function()
{
 
}


var VoipIncomingCallID = 16560;

//——————————————————————————————————————— weboscket 接收 ———————————————————————————————————————————


onWs_Voip_Call_Req = function (data) {
    //推送来电
    VoipIncomingCallID++;

    var call = new VoipCall(VoipIncomingCallID);    
    call.CalledNum = data.cCallingUserNum;
    call.CalledType = data.nCallingUserType;
    call.CalledName = data.cCallingUserName;
    call.CallIn = true;
    call.Ws_CallID = data.cCallID;
    call.Status = 2;
    call.RemoteSdp = data.cSdp;
    call.ThirdID = data.cThirdID;

    VoipCallList.push(call);

    msg = new WsBaseMsg("Voip_Call_Rsp", 802);
    msg.Set("cCallID", call.Ws_CallID);   
    msg.Set("nRetCode", 101);   
    msg.Set("cSdp", ""); 
    msg.Send();

    msg = new WsBaseMsg("Voip_Call_Rsp", 802);
    msg.Set("cCallID", call.Ws_CallID);   
    msg.Set("nRetCode", 180);   
    msg.Set("cSdp", ""); 
    msg.Send();

    var WebrtcSdpNotify = {
        Msg: "WebrtcSdpNotify",
        CallID: call.Js_CallID,
        WebrtcSdp: call.RemoteSdp,
        CallType: 1,
    };

    if (call.RemoteSdp.indexOf("m=video") != -1)
    {
        WebrtcSdpNotify.CallType = 2;
    }

    postMessage(WebrtcSdpNotify);


    var msgData = {
        Msg: "VoipIncomingCallNotify",
        CallID: call.Js_CallID,
        ExtNum: call.CalledNum,
        Name: call.CalledName,
        ConferenceInvite: 0,
        CallType: 0,
        ThirdID: data.cThirdID,
    };

    if (call.RemoteSdp.indexOf("m=video") != -1)
    {
        msgData.CallType = 1;
    }

    if (call.CalledType == 7)
    {
        msgData.ConferenceInvite = 1;
    } 
    else if (call.CalledType == 8)
    {
        msgData.ConferenceInvite = 1;
        msgData.CallType = 1;
    } 

    postMessage(msgData);


}

onWs_Voip_Call_Rsp = function (data) {
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {
            switch (data.nRetCode) 
            {
                case 101:
                    if (call.Status == 0)
                    {                       
                        call.Status = 1;
                        var msgData = {
                            Msg: "VoipCallStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 1,
                            Reason: "trying",
                        };
 
                        postMessage(msgData);
                    }
                    break;
                case 180:
                    if (call.Status <= 1)
                    {
                        call.Status = 2;
                        var msgData = {
                            Msg: "VoipCallStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 1,
                            Reason: "ringing",
                        };

                        if (data.cSdp)
                        {
                            call.RemoteSdp = data.cSdp;

                            var WebrtcSdpNotify = {
                                Msg: "WebrtcSdpNotify",
                                CallID: call.Js_CallID,
                                WebrtcSdp: call.RemoteSdp,
                                CallType: 1,
                            };
    
                            if (call.RemoteSdp.indexOf("m=video") != -1)
                            {
                                WebrtcSdpNotify.CallType = 2;
                            }
    
                            postMessage(WebrtcSdpNotify);
                        }

                        postMessage(msgData);
                    }
                    break;
                case 200:
                    if (call.Status <= 2)
                    {
                        call.Status = 3;

                        if (call.RemoteSdp == "") 
                        {
                            call.RemoteSdp = data.cSdp;

                            var WebrtcSdpNotify = {
                                Msg: "WebrtcSdpNotify",
                                CallID: call.Js_CallID,
                                WebrtcSdp: call.RemoteSdp,
                                CallType: 1,
                            };
    
                            if (call.RemoteSdp.indexOf("m=video") != -1)
                            {
                                WebrtcSdpNotify.CallType = 2;
                            }
    
                            postMessage(WebrtcSdpNotify);
                        }

                        var msgData = {
                            Msg: "VoipCallStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 2,
                            Reason: "ok",
                        };
                        postMessage(msgData);

                        msg = new WsBaseMsg("Voip_Call_Ack", 803);
                        msg.Set("cCallID", call.Ws_CallID);    
                        msg.Set("cSdp", ""); 
                        msg.Send();
                    }
                    break;
                case 404:
                    var msgData = {
                        Msg: "VoipCallStatusNotify",
                        CallID: call.Js_CallID,
                        Status: 9,
                        Reason: "offline",
                    };
                    postMessage(msgData);
                    VoipCallList.splice(i, 1);
                    break;
                case 408:
                    var msgData = {
                        Msg: "VoipCallStatusNotify",
                        CallID: call.Js_CallID,
                        Status: 6,
                        Reason: "timeout",
                    };
                    postMessage(msgData);
                    VoipCallList.splice(i, 1);
                    break;
                case 486:
                    var msgData = {
                        Msg: "VoipCallStatusNotify",
                        CallID: call.Js_CallID,
                        Status: 8,
                        Reason: "busy",
                    };
                    postMessage(msgData);
                    VoipCallList.splice(i, 1);
                    break;
                case 603:
                    var msgData = {
                        Msg: "VoipCallStatusNotify",
                        CallID: call.Js_CallID,
                        Status: 5,
                        Reason: "busy",
                    };
                    postMessage(msgData);
                    VoipCallList.splice(i, 1);
                    break;
                default:
                    if (data.nRetCode >= 400)
                    {
                        var msgData = {
                            Msg: "VoipCallStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 7,
                            Reason: "fail",
                        };
                        postMessage(msgData);

                        VoipCallList.splice(i, 1);
                    }
                    break;
            }
            break;
        }
    }
}

onWs_Voip_Call_Ack = function (data) {
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {
            if (call.Status <= 2)
            {
                call.Status = 3;

                var msgData = {
                    Msg: "VoipCallStatusNotify",
                    CallID: call.Js_CallID,
                    Status: 2,
                    Reason: "ok",
                };
                postMessage(msgData);
            }
        }
    }
}

onWs_Voip_Call_Cancel = function (data) {
   for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {
            if (call.Status <= 2)
            {
                var msgData = {
                    Msg: "VoipCallStatusNotify",
                    CallID: call.Js_CallID,
                    Status: 3,
                    Reason: "cancel",
                };
                postMessage(msgData);
            }

            VoipCallList.splice(i, 1);
            break;
        }
    }
}

onWs_Voip_Call_Bye_Req = function (data) {
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {
            if (call.Status == 3)
            {
                var msgData = {
                    Msg: "VoipCallStatusNotify",
                    CallID: call.Js_CallID,
                    Status: 3,
                    Reason: "hangup",
                };
                postMessage(msgData);
            }

            VoipCallList.splice(i, 1);
            break;
        }
    }
}

onWs_Voip_Call_Bye_Rsp = function (data) {
    for (var i = 0; i < VoipCallList.length; i++)
    {
        var call = VoipCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {

            break;
        }
    }
}


onWs_Voip_Conference_Ws_Notify = function (data) {
    //会议端口
    var port = data.nServerPort;
    var msgData = {
        Msg: "ConferenceWsInviteNotify",
        ConfID: 0,
        Url: "ws://127.0.0.1:"+port,
    };
    postMessage(msgData);
}

onWs_Voip_Dispatch_Rsp = function (data) {

    var msgData = {
        Msg: "VoipDispatchCallRsp",
        CallID: 0,
        ExtNum: data.cExtNum,
        Type: data.nOperationType,
        Result: data.nRetCode,
    };
    postMessage(msgData);
}

onWs_Voip_Fifo_Notify = function (data) {

    var msgData = {
        Msg: "VoipDispatchFifoNotify",
        ExtNum: data.ExtNum,
        IsAdd: data.Add,
        IsHold: data.Hold,
        IsAbort: data.Abort,
    };
    postMessage(msgData);
}

onWs_Voip_Fifo_Refresh = function (data) {

    var msgData = {
        Msg: "VoipDispatchFifoRefresh",
        IncomingList: data.IncomingList,
        HoldList: data.HoldList,
    };
    postMessage(msgData);
}



onWsTextMessage_Voip = function (msg) {
    switch (msg.msg) {
        case "Voip_Call_Req":
            onWs_Voip_Call_Req(msg.data)
            break;
        case "Voip_Call_Rsp":
            onWs_Voip_Call_Rsp(msg.data)
            break;
        case "Voip_Call_Ack":
            onWs_Voip_Call_Ack(msg.data)
            break;
        case "Voip_Call_Cancel":
            onWs_Voip_Call_Cancel(msg.data)
            break;
        case "Voip_Call_Bye_Req":
            onWs_Voip_Call_Bye_Req(msg.data)
            break;
        case "Voip_Call_Bye_Rsp":
            onWs_Voip_Call_Bye_Rsp(msg.data)
            break;
        case "Voip_Conference_Ws_Notify":
            onWs_Voip_Conference_Ws_Notify(msg.data);
            break
        case "Voip_Dispatch_Rsp":
            onWs_Voip_Dispatch_Rsp(msg.data);
            break
        case "Voip_Fifo_Notify":
            onWs_Voip_Fifo_Notify(msg.data);
            break
        case "Voip_Fifo_Refresh":
            onWs_Voip_Fifo_Refresh(msg.data);
            break
    }
}