Newer
Older
safe_production_front / public / DispatchLib / DispatchWsWorkerVideo.js
wangxitong on 16 Aug 15 KB first commit


/************************** 视频业务 ******************************/
function VideoCall(callid) {
    this.Js_CallID = callid;    //js的callid
    this.Ws_CallID = "";        //ws的callid
    this.CalledNum = "";
    this.CalledType = 0;        //1-终端 2-调度台 5-摄像头 6-GBT28181
    this.CalledName = 0;
    this.CallMode = 0;          //1-拉取视频 2-推送视频
    this.LocalSdp = "";
    this.RemoteSdp = "";
    this.OnlineCallID = "";
    this.Status = 0;           //0-初始 1-链接中 2-响铃中 3-已接入
}

VideoCallList = [];      


onWebWorkerMessage_Video = function (parm) {
    switch (parm.Msg) {
        case "MonitorVideoPullReq":
            MonitorVideoPull(parm);
            break
        case "MonitorVideoHangupReq":
            MonitorVideoHangup(parm);
            break
        case "MonitorVideoHandleIncomingCallReq":
            MonitorVideoHandleIncomingCall(parm);
            break
        case "MonitorVideoPushReq":
            MonitorVideoPush(parm);
            break
        case "MonitorVideoPtzReq":
            MonitorVideoPtz(parm);
            break
        case "MonitorVideoControlReq":
            MonitorVideoRemoteControl(parm);
            break
    }
}


MonitorVideoPull = function (parm) {
    var call = new VideoCall(parm.CallID);
    call.CalledNum = parm.Number;
    call.CalledType = parm.Type;
    call.CalledName = parm.Name;
    call.CallMode = 1;
    call.LocalSdp = parm.OfferSdp;
    call.Ws_CallID = guid();

    VideoCallList.push(call);

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

        postMessage(msgData);
    }
    msg.Set("nCallMode", 1);
    msg.Set("nCalledType", parm.Type);
    msg.Set("cCalledUserNum", parm.Number);
    msg.Set("cCalledUserName", parm.Name);
    msg.Set("cCallID", call.Ws_CallID);
    msg.Set("nPushMode", 0);
    msg.Set("cCallingUserNum", DcInfo.Number);
    msg.Set("cCallingUserName", DcInfo.Name);
    msg.Set("nCallingUserType", 2);
    msg.Set("cSdp", parm.OfferSdp);
    msg.Set("cOnlineCallID", "");

    msg.Send("Video_Call_Rsp");
}

MonitorVideoHangup = function (parm) {
    for (var i = 0; i < VideoCallList.length; i++)
    {
        var call = VideoCallList[i];
        if (call.Js_CallID == parm.CallID)
        {
            if (call.Status < 3)
            {
                msg = new WsBaseMsg("Video_Call_Cancel", 704);
                msg.Set("cCallID", call.Ws_CallID);           
                msg.Send();
            }
            else
            {
                msg = new WsBaseMsg("Video_Call_Bye_Req", 705);
                msg.Set("cCallID", call.Ws_CallID);           
                msg.Send();
            }

            VideoCallList.splice(i, 1);

            break;
        }
    }
}


MonitorVideoHandleIncomingCall = function (parm) {
    for (var i = 0; i < VideoCallList.length; i++)
    {
        var call = VideoCallList[i];
        if (call.Js_CallID == parm.CallID)
        {
            if (call.Status < 3 && call.CallMode == 2) //推送且还未接入
            {
                if (parm.Handle == 1)
                {
                    call.LocalSdp = parm.OfferSdp;
                    msg = new WsBaseMsg("Video_Call_Rsp", 702);
                    msg.Set("cCallID", call.Ws_CallID);    
                    msg.Set("nRetCode", 200); 
                    msg.Set("cSdp", parm.OfferSdp);
                    msg.Set("cOnlineCallID", "");
                    msg.Send();
                }
                else
                {
                    msg = new WsBaseMsg("Video_Call_Rsp", 702);
                    msg.Set("cCallID", call.Ws_CallID);    
                    msg.Set("nRetCode", 486); 
                    msg.Set("cSdp", "");
                    msg.Set("cOnlineCallID", "");    
                    msg.Send();

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


MonitorVideoPush = function (parm) {
    for (var i = 0; i < VideoCallList.length; i++)
    {
        var call = VideoCallList[i];
        if (call.Js_CallID == parm.CallID)
        {
            msg = new WsBaseMsg("Video_Call_Forward_Req", 707);
            msg.Set("cOnlineCallID", call.OnlineCallID);    
            msg.Set("nRequsetID", i); 
            msg.Set("nCalledType", 1);
            msg.Set("cCalledUserNum", parm.Number);
            msg.Send("Video_Call_Forward_Rsp");
            break;
        }
    }
}


MonitorVideoPtz = function (parm) {
    msg = new WsBaseMsg("Video_Ipc_Ptz", 709);
    msg.Set("nCalledType", 5);
    msg.Set("cCalledUserNum", parm.Number);
    msg.Set("nCommandID", parm.Command);
    msg.Set("nDirection", parm.Direction);
    msg.Set("nSpeed", parm.Speed);
    msg.Send();
}

MonitorVideoRemoteControl = function (parm) {
    msg = new WsBaseMsg("Video_Control_Req", 710);
    msg.Set("nCalledType", 1);
    msg.Set("cCalledUserNum", parm.Number);
    msg.Set("nResolution", parm.Resolution);
    msg.Set("nCamera", parm.Camera);
    msg.Send();
}


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

    VideoCallList = []
}


VideoOnline = function()
{
 
}


var VideoIncomingCallID = 14560;

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


onWs_Video_Call_Req = function (data) {
    //推送来电
    VideoIncomingCallID++;

    var call = new VideoCall(VideoIncomingCallID);    
    call.CalledNum = data.cCallingUserNum;
    call.CalledType = data.nCallingUserType;
    call.CalledName = data.cCallingUserName;
    call.CallMode = 2;
    call.Ws_CallID = data.cCallID;
    call.OnlineCallID = data.cOnlineCallID;
    call.Status = 2;

    VideoCallList.push(call);

    msg = new WsBaseMsg("Video_Call_Rsp", 702);
    msg.Set("cCallID", call.Ws_CallID);   
    msg.Set("nRetCode", 101);   
    msg.Set("cSdp", ""); 
    msg.Set("cOnlineCallID", "");
    msg.Send();

    msg = new WsBaseMsg("Video_Call_Rsp", 702);
    msg.Set("cCallID", call.Ws_CallID);   
    msg.Set("nRetCode", 180);   
    msg.Set("cSdp", ""); 
    msg.Set("cOnlineCallID", "");
    msg.Send();

    var msgData = {
        Msg: "MonitorVideoIncomingCallNotify",
        CallID: call.Js_CallID,
        Number: call.CalledNum,
        Name: call.CalledName,
    };

    postMessage(msgData);
}

onWs_Video_Call_Rsp = function (data) {
    for (var i = 0; i < VideoCallList.length; i++)
    {
        var call = VideoCallList[i];
        if (call.Ws_CallID == data.cCallID)
        {
            switch (data.nRetCode) 
            {
                case 101:
                    if (call.Status == 0)
                    {                       
                        call.Status = 1;
                        var msgData = {
                            Msg: "MonitorVideoStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 1,
                            Reason: "trying",
                        };
                
                        if (data.cOnlineCallID)
                        {
                            call.OnlineCallID = data.cOnlineCallID;
                        }

                        postMessage(msgData);
                    }
                    break;
                case 180:
                    if (call.Status <= 1)
                    {
                        call.Status = 2;
                        var msgData = {
                            Msg: "MonitorVideoStatusNotify",
                            CallID: call.Js_CallID,
                            Status: 1,
                            Reason: "ringing",
                        };
                
                        if (data.cOnlineCallID)
                        {
                            call.OnlineCallID = data.cOnlineCallID;
                        }

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

                        if (data.cOnlineCallID)
                        {
                            call.OnlineCallID = data.cOnlineCallID;
                        }

                        call.RemoteSdp = data.cSdp;

                        var WebrtcSdpNotify = {
                            Msg: "WebrtcSdpNotify",
                            CallID: call.Js_CallID,
                            WebrtcSdp: call.RemoteSdp,
                            CallType: 0,
                        };
                        postMessage(WebrtcSdpNotify);

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

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

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

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

                if (data.cOnlineCallID)
                {
                    call.OnlineCallID = data.cOnlineCallID;
                }

                call.RemoteSdp = data.cSdp;

                var WebrtcSdpNotify = {
                    Msg: "WebrtcSdpNotify",
                    CallID: call.Js_CallID,
                    WebrtcSdp: call.RemoteSdp,
                    CallType: 0,
                };
                postMessage(WebrtcSdpNotify);

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

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

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

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

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

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

            break;
        }
    }
}

onWs_Video_Call_Forward_Rsp = function (data) {
    var call = VideoCallList[data.nRequsetID];
    if (typeof call != 'undefined') {
        //call.Js_CallID

    }
}

onWs_Video_Query_CallMember_Rsp = function (data) {

}


onWsTextMessage_Video = function (msg) {
    switch (msg.msg) {
        case "Video_Call_Req":
            onWs_Video_Call_Req(msg.data)
            break;
        case "Video_Call_Rsp":
            onWs_Video_Call_Rsp(msg.data)
            break;
        case "Video_Call_Ack":
            onWs_Video_Call_Ack(msg.data)
            break;
        case "Video_Call_Cancel":
            onWs_Video_Call_Cancel(msg.data)
            break;
        case "Video_Call_Bye_Req":
            onWs_Video_Call_Bye_Req(msg.data)
            break;
        case "Video_Call_Bye_Rsp":
            onWs_Video_Call_Bye_Rsp(msg.data)
            break;
        case "Video_Call_Forward_Rsp":
            onWs_Video_Call_Forward_Rsp(msg.data)
            break;
        case "Video_Query_CallMember_Rsp":
            onWs_Video_Query_CallMember_Rsp(msg.data)
            break;
    }
}