private void opendev_Click(object sender, EventArgs e) { if (BriSDKLib.QNV_OpenDevice(BriSDKLib.ODT_LBRIDGE, 0, "") <= 0 || BriSDKLib.QNV_DevInfo(0, BriSDKLib.QNV_DEVINFO_GETCHANNELS) <= 0) { AppendStatus("打开设备失败"); MessageBox.Show("打开设备失败"); return; } selchannel.Items.Clear(); spkamvalue.Items.Clear(); micamvalue.Items.Clear(); for (Int16 i = 0; i < BriSDKLib.QNV_DevInfo(-1, BriSDKLib.QNV_DEVINFO_GETCHANNELS); i++) {//在windowproc处理接收到的消息 BriSDKLib.QNV_Event(i, BriSDKLib.QNV_EVENT_REGWND, (Int32)this.Handle, "", new StringBuilder(0), 0); selchannel.Items.Add(i + 1); } selchannel.SelectedIndex = 0; for (int i = 0; i < 16; i++) { spkamvalue.Items.Add(i); } spkamvalue.SelectedIndex = 0; for (int i = 0; i < 7; i++) { micamvalue.Items.Add(i); } micamvalue.SelectedIndex = 0; AppendStatus("打开设备成功"); return; }
private void resumeplayfile_Click(object sender, EventArgs e) { if (m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle > 0) { BriSDKLib.QNV_PlayFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_PLAY_FILE_RESUME, m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle, 0, ""); } }
private void resumerecfile_Click(object sender, EventArgs e) { if (m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle > 0) { BriSDKLib.QNV_RecordFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_RECORD_FILE_RESUME, m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle, 0, ""); } }
/// <summary> /// 窗口加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Loaded(object sender, RoutedEventArgs e) { Utils.WriteLog("Window_Loaded"); string serverAddress = ConfigurationManager.AppSettings["server"]; #region browser #region 初始化环境 禁用gpu 防止闪烁 var setting = new CefSharp.CefSettings(); setting.CefCommandLineArgs.Add("disable-gpu", "1"); setting.Locale = "zh-CN"; setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 LY_CRM_BOX"; CefSharp.Cef.Initialize(setting); #endregion browser = new ChromiumWebBrowser(); //browser.Address = System.AppDomain.CurrentDomain.BaseDirectory + "index.html"; // 解决input框无法输入中文的BUG browser.PreviewTextInput += Browser_PreviewTextInput; browser.Address = serverAddress; browser.LifeSpanHandler = new prohibitNewPageJump(); //browser.Address = "http://ie.icoa.cn"; //注册JS调用函数 browser.RegisterJsObject("__phone", new CallBackForJs()); // 菜单处理事件 browser.MenuHandler = new MenuHandler(); // 下载处理事件 browser.DownloadHandler = new browerDownLoad(); this.main.Children.Add(browser); // 浏览器按键事件 browser.KeyDown += Browser_KeyDown; #endregion #region 盒子初始化 if (VoipHelper.OpenDevice() == 0) { VoipHelper.deviceState = false; MessageBox.Show("电话硬件设备连接存在问题,请关闭软件检查硬件后重试。"); } hwnd = (new System.Windows.Interop.WindowInteropHelper(this)).Handle;//盒子事件注册 for (Int16 i = 0; i < BriSDKLib.QNV_DevInfo(-1, BriSDKLib.QNV_DEVINFO_GETCHANNELS); i++) { //在windowproc处理接收到的消息 BriSDKLib.QNV_Event(i, BriSDKLib.QNV_EVENT_REGWND, (int)hwnd, "", new StringBuilder(0), 0); } VoipHelper.init(); #endregion #region 录音 uploadRecordingFile = new BackgroundWorker(); uploadRecordingFile.DoWork += uploadRecordingFile_DoWork; uploadRecordingFile.WorkerSupportsCancellation = true; uploadRecordingFile.RunWorkerAsync(); #endregion Utils.PreventSleep(); }
private void startrecfile_Click(object sender, EventArgs e) { SaveFileDialog dlg = new SaveFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { Int32 dwmask = 0; if (echoenable.Checked) { dwmask |= BriSDKLib.RECORD_MASK_ECHO; } if (agcenable.Checked) { dwmask |= BriSDKLib.RECORD_MASK_AGC; } m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle = BriSDKLib.QNV_RecordFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_RECORD_FILE_START, recformat.SelectedIndex, dwmask, dlg.FileName); if (m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle <= 0) { AppendStatus("文件录音失败:" + dlg.FileName); } else { AppendStatus("开始文件录音:" + dlg.FileName); AppendStatus("录音ID:" + m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle); } } }
private void opendevice_Click(object sender, EventArgs e) { if (BriSDKLib.QNV_OpenDevice(BriSDKLib.ODT_LBRIDGE, 0, "") <= 0 || BriSDKLib.QNV_DevInfo(0, BriSDKLib.QNV_DEVINFO_GETCHANNELS) <= 0) { AppendStatus("打开设备失败"); MessageBox.Show("打开设备失败"); return; } for (Int16 i = 0; i < BriSDKLib.QNV_DevInfo(-1, BriSDKLib.QNV_DEVINFO_GETCHANNELS); i++) {//在windowproc处理接收到的消息 BriSDKLib.QNV_Event(i, BriSDKLib.QNV_EVENT_REGWND, (Int32)this.Handle, "", new StringBuilder(0), 0); } //打开CC模块 if (BriSDKLib.QNV_OpenDevice(BriSDKLib.ODT_CC, 0, BriSDKLib.QNV_CC_LICENSE) <= 0)//加载CC模块 { AppendStatus("加载CC模块失败"); MessageBox.Show("加载CC模块失败"); return; } else { //注册本窗口接收CC模块的事件 //在windowproc处理接收到的消息 BriSDKLib.QNV_Event(BriSDKLib.CCCTRL_CHANNELID, BriSDKLib.QNV_EVENT_REGWND, (Int32)this.Handle, "", new StringBuilder(0), 0); AppendStatus("加载CC模块完成"); } AppendStatus("打开设备成功"); return; }
private void stopplayfile_Click(object sender, EventArgs e) { if (m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle > 0) { BriSDKLib.QNV_PlayFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_PLAY_FILE_STOP, m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle, 0, ""); m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle = 0; AppendStatus("停止播放文件"); } }
private void stoprecfile_Click(object sender, EventArgs e) { if (m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle > 0) { AppendStatus("停止文件录音 ID:" + m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle); long lRet = BriSDKLib.QNV_RecordFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_RECORD_FILE_STOP, m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle, 0, ""); m_tagpstnData[(short)selchannel.SelectedIndex].lRecFileHandle = 0; AppendStatus("停止文件录音 Ret:" + lRet); } }
private void setserver_Click(object sender, EventArgs e) { if (BriSDKLib.QNV_CCCtrl(BriSDKLib.QNV_CCCTRL_SETSERVER, ccsvraddr.Text, 0) <= 0) { AppendStatus("修改服务器IP地址失败 " + ccsvraddr.Text); } else { AppendStatus("修改服务器IP地址完成,可以重新登陆.. " + ccsvraddr.Text); } }
/// <summary> /// 停止录音 /// </summary> /// <param name="handle"></param> public static void EndRecord() { BriSDKLib.QNV_RecordFile(VoipIndex, BriSDKLib.QNV_RECORD_FILE_STOP, recordingHanle, 0, ""); if (MainWindow.uploadRecordingFile != null) { if (!MainWindow.uploadRecordingFile.IsBusy) { MainWindow.uploadRecordingFile.RunWorkerAsync(); } } }
/// <summary> /// 软摘/挂机 1 摘机 0 挂机 /// </summary> /// <param name="hook"></param> /// <returns></returns> public static void OffOnHook(int hook) { if (hook == 1) { StartRecord(); } if (hook == 0) { EndRecord(); } BriSDKLib.QNV_SetDevCtrl((short)VoipIndex, BriSDKLib.QNV_CTRL_DOHOOK, hook); }
private void startdial_Click(object sender, EventArgs e) { if (dialcode.Text.Length <= 0) { AppendStatus("拨号号码不能为空"); } else { AppendStatus("开始拨号:" + dialcode.Text); BriSDKLib.QNV_General((short)selchannel.SelectedIndex, BriSDKLib.QNV_GENERAL_STARTDIAL, 0, dialcode.Text); dohook.Checked = true;//拨好时系统会自动摘机,改变显示状态 } }
private Int32 StopCallCC(Int16 uChannelID)//停止转移到该CC { if (m_tagGateData[uChannelID].lCCHandle > 0) { BriSDKLib.QNV_CCCtrl_Call(BriSDKLib.QNV_CCCTRL_CALL_STOP, m_tagGateData[uChannelID].lCCHandle, "", 0); m_tagGateData[uChannelID].lCCHandle = 0; AppendStatus("通道线路断开,停止转移到CC"); return(1); } else { return(0); } }
/// <summary> /// 开始录音 /// </summary> /// <param name="path">路径</param> /// <returns>返回录音句柄</returns> public static int StartRecord() { if (!string.IsNullOrEmpty(callId)) { var path = string.Format("{0}\\{1}.wav", recordPath, callId.ToString().Trim()); recordingHanle = BriSDKLib.QNV_RecordFile(VoipIndex, BriSDKLib.QNV_RECORD_FILE_START, BriSDKLib.BRI_WAV_FORMAT_PCM8K16B, BriSDKLib.RECORD_MASK_ECHO | BriSDKLib.RECORD_MASK_AGC, path); if (recordingHanle < 0)//录音失败 { Utils.WriteLog("录音失败"); BriSDKLib.QNV_RecordFile(VoipIndex, BriSDKLib.QNV_RECORD_FILE_STOPALL, 0, 0, "0"); OffOnHook(0); return(-1); } } return(recordingHanle); }
private void logonbtn_Click(object sender, EventArgs e) { if (BriSDKLib.QNV_CCCtrl(BriSDKLib.QNV_CCCTRL_ISLOGON, "", 0) > 0) { BriSDKLib.QNV_CCCtrl(BriSDKLib.QNV_CCCTRL_LOGOUT, "", 0); AppendStatus("已经在线,先离线."); } string strValue = cccode.Text + "," + ccpwd.Text; //','分隔 if (BriSDKLib.QNV_CCCtrl(BriSDKLib.QNV_CCCTRL_LOGIN, strValue, 0) <= 0) //开始登陆 { MessageBox.Show("登陆失败,CC:" + cccode.Text); } else { AppendStatus("开始登陆,CC: " + cccode.Text); } }
/// <summary> /// 初始化盒子 设置相关配置 /// </summary> public static void init() { BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_BUSY, 10); //修复 意外远程挂机 lineToSpk(0); //初始化线路声音到耳机 关闭 因为来电有干扰声音 很刺耳 BriSDKLib.QNV_SetDevCtrl(VoipIndex, BriSDKLib.QNV_CTRL_DOMICTOLINE, 1); //打开麦克风到电话线 BriSDKLib.QNV_SetDevCtrl(VoipIndex, BriSDKLib.QNV_CTRL_LINEOUT, 1); //打开线路输出功能 BriSDKLib.QNV_SetDevCtrl(VoipIndex, BriSDKLib.QNV_CTRL_DOPLAYTOSPK, 1); //打开播放的语音到耳机 BriSDKLib.QNV_SetDevCtrl(VoipIndex, BriSDKLib.QNV_CTRL_PLAYTOLINE, 1); //打开播放的语音到线路 BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_AM_MIC, 0); //获取插在设备上的麦克风增益大小// BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_AM_SPKOUT, 10); //设置插在设备上的耳机音量等级大小 BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_AM_LINEOUT, 15); //设置播放语音到线路的音量等级大小// BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_AM_LINEIN, 7); //电话线路信号强 BriSDKLib.QNV_SetParam(VoipIndex, BriSDKLib.QNV_PARAM_AM_DOPLAY, 15); createDirectory(crmRoot); createDirectory(Utils.crmLog); createDirectory(recordPath); }
private void startplayfile_Click(object sender, EventArgs e) { { OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { //this.textBox1.Text = dlg.FileName; //PLAYFILE_MASK_REPEAT 使用重复播放 m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle = BriSDKLib.QNV_PlayFile((short)selchannel.SelectedIndex, BriSDKLib.QNV_PLAY_FILE_START, 0, BriSDKLib.PLAYFILE_MASK_REPEAT, dlg.FileName); if (m_tagpstnData[(short)selchannel.SelectedIndex].lPlayFileHandle <= 0) { AppendStatus("播放文件失败:" + dlg.FileName); } else { AppendStatus("开始播放文件:" + dlg.FileName); } } } }
private Int32 StartCallCC(BriSDKLib.TBriEvent_Data EventData) { AppendStatus("启动呼叫转移到CC"); string strDestCC = destcc.Text; if (strDestCC.Length == 0 || strDestCC.Length > 18) { AppendStatus("目标CC号错误:" + strDestCC); return(0); } else {//呼叫CC,使用 pEvent->uChannelID通道做为语音输入输出设备 string strCallParam = strDestCC; string strData = FromASCIIByteArray(EventData.szData); if (strData.Length > 0)//","分隔参数 { strCallParam += ","; strCallParam += "2 1 ";//发送PSTN号码过去,(使用该格式可以兼容CC商务终端,如果转移到的目标CC是使用CC商务终端登陆的话就可以在界面弹出接收到的来电号码) strCallParam += strData; } m_tagGateData[EventData.uChannelID].lCCHandle = BriSDKLib.QNV_CCCtrl_Call(BriSDKLib.QNV_CCCTRL_CALL_START, 0, strCallParam, EventData.uChannelID); if (m_tagGateData[EventData.uChannelID].lCCHandle > 0) { m_tagGateData[EventData.uChannelID].uChannelID = EventData.uChannelID; m_tagGateData[EventData.uChannelID].szCC = strDestCC; AppendStatus("启动呼叫转移成功 CC:" + strDestCC); //---------- //如果直接先接通,因为正在转移CC,无任何声音,就需要考虑给对方播放等候提示音,等CC接通后停止播放提示音 //AnswerChannel(pEvent->uChannelID); // return(1); } else { AppendStatus("呼叫CC失败:" + strDestCC); return(0); } } }
private Int32 StopChannel(Int32 lCCHandle)//CC呼叫停止,断开通道PSTN线路 { long lID = GetCCHandleGateID(lCCHandle); if (lID >= 0) {//如果已经是接通了 if (BriSDKLib.QNV_GetDevCtrl(m_tagGateData[lID].uChannelID, BriSDKLib.QNV_CTRL_DOHOOK) > 0) { BriSDKLib.QNV_SetDevCtrl(m_tagGateData[lID].uChannelID, BriSDKLib.QNV_CTRL_DOHOOK, 0); } else//还没有接通,直接调用拒接 { BriSDKLib.QNV_General(m_tagGateData[lID].uChannelID, BriSDKLib.QNV_GENERAL_STARTREFUSE, 0, ""); } AppendStatus("停止通道转移"); m_tagGateData[lID].lCCHandle = 0; return(1); } else { return(0); } }
private void closedev_Click(object sender, EventArgs e) { BriSDKLib.QNV_CloseDevice(BriSDKLib.ODT_ALL, 0); selchannel.Items.Clear(); AppendStatus("设备已关闭"); }
/// <summary> /// 拒绝当前呼入来电 大于零=成功 /// </summary> /// <returns></returns> public static int refuseCurrentIncoming() { return(BriSDKLib.QNV_General(0, BriSDKLib.QNV_GENERAL_STARTREFUSE, BriSDKLib.REFUSE_SYN, "")); }
private void dophone_CheckedChanged(object sender, EventArgs e) { BriSDKLib.QNV_SetDevCtrl((short)selchannel.SelectedIndex, BriSDKLib.QNV_CTRL_DOPHONE, dophone.Checked ? 0 : 1); }
/// <summary> /// 停止拒接 /// </summary> /// <returns></returns> public static int stopCusttentIncoming() { return(BriSDKLib.QNV_General(0, BriSDKLib.QNV_GENERAL_STOPREFUSE, 0, "")); }
private void startflash_Click(object sender, EventArgs e) { BriSDKLib.QNV_General((short)selchannel.SelectedIndex, BriSDKLib.QNV_GENERAL_STARTFLASH, BriSDKLib.FT_ALL, ""); }
private void refusecallin_Click(object sender, EventArgs e) { BriSDKLib.QNV_General((short)selchannel.SelectedIndex, BriSDKLib.QNV_GENERAL_STARTREFUSE, BriSDKLib.REFUSE_ASYN, ""); }
private void doline2spk_CheckedChanged(object sender, EventArgs e) { BriSDKLib.QNV_SetDevCtrl((short)selchannel.SelectedIndex, BriSDKLib.QNV_CTRL_DOLINETOSPK, doline2spk.Checked ? 1 : 0); }
private void doplay_CheckedChanged(object sender, EventArgs e) { BriSDKLib.QNV_SetDevCtrl((short)selchannel.SelectedIndex, BriSDKLib.QNV_CTRL_DOPLAY, doplay.Checked ? 1 : 0); }
private void domic2line_CheckedChanged(object sender, EventArgs e) { BriSDKLib.QNV_SetDevCtrl((short)selchannel.SelectedIndex, BriSDKLib.QNV_CTRL_DOMICTOLINE, domic2line.Checked ? 1 : 0); }
private void micamvalue_SelectedIndexChanged(object sender, EventArgs e) { BriSDKLib.QNV_SetParam((short)selchannel.SelectedIndex, BriSDKLib.QNV_PARAM_AM_MIC, micamvalue.SelectedIndex); }
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { BriSDKLib.QNV_CloseDevice(BriSDKLib.ODT_ALL, 0); }