public WinCallViewModel(WinCall window, string str) { try { //if (SingletonObj.LoginInfo.LyncName != str.Split(';')[0] && str.Split(';').Length != 1) //{ // this.flag = false; //} //else //{ // this.flag = true; //} //StrTemp = winlync.strTempBool.ToString(); callBackConfMemberEventCB = new ConfMemberEventCB(callBackConfMemberEventCBProcess); callBackVideoCallEventCB = new CallEventCB(callBackVideoCallEventCBProcess); callReservedEventCB = new CallReservedEventCB(callReservedEventCBProcess); callTransEventCB = new CallTransEventCB(callTransEventCBProcess); //modify by jinyeqing 2015/5/22 jiaji 说要把这三个事件回调函数放之前 (上下顺序倒了一下 下面的注释了) call.SetConfMemEventCallBack(callBackConfMemberEventCB); call.SetVideoCallEventCallBack(callBackVideoCallEventCB); call.SetCallReservedEventCallBack(callReservedEventCB); call.SetCallTransEventCallBack(callTransEventCB); //modify by jinyeqing 2015/5/22 jiaji 说要把这三个事件回调函数放之前 (上下顺序倒了一下 下面的注释了) winCall = window; VideoCommand = new DelegateCommand(VideoCommandProcess); CallSuspendCommand = new DelegateCommand(CallSuspendCommandProcess); HoldDownCommand = new DelegateCommand(HoldDownCommandProcess); SetMicPhoneCommand = new DelegateCommand(SetMicPhoneCommandProcess); AddContactCommand = new DelegateCommand(AddContactCommandProcess); HoldDownOneCommand = new DelegateCommand(HoldDownOneCommandProcess); ReInviteOneCommand = new DelegateCommand(ReInviteOneCommandProcess); MuteCommand = new DelegateCommand(MuteCommandProcess); RemoveCommand = new DelegateCommand(RemoveCommandProcess); OpenDialCommand = new DelegateCommand(OpenDialCommandProcess); SetVolCommand = new DelegateCommand(SetVolCommandProcess); BlindTransCallCommand = new DelegateCommand(BlindTransCallCommandProcess); this.winlync = winCall.lync; //modify by 00327190 2015/7/16 try { lock (WinCall.lockObject) { try { LogManager.SystemLog.Info("WinCallViewModel Monitor.Enter"); contactList = new List<UCContact>(); string[] listStr = str.Split(';'); foreach (string con in listStr) { if (str.IndexOf("VideoCall") > -1 && contactList.Count == 2) { break; } if (con == "VideoCall") { IsVideo = true; continue; } UCContact uc = new UCContact(); uc.UserName = con; if (contactList.Exists(x => x.UserName == uc.UserName)) { continue; } if (uc.UserName.IndexOf("@") != -1) { uc.UCMemberType = MemberType.UC_ACCOUNT; } else //如果是纯数字,则再分能不能查到对应的UC用户 2015/9/21 { StringBuilder ucName = new StringBuilder(100); call.GetUCAccountByPhoneNo(uc.UserName, ucName); if (ucName.ToString() == "") //纯话机 2015/9/21 { uc.UCMemberType = MemberType.UC_IPPHONE; } else { uc.UCMemberType = MemberType.UC_ACCOUNT; uc.UserName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName); } //uc.UCMemberType = MemberType.UC_IPPHONE; } if (contactList.Count == 0) { if (IsVideo) { //2015/8/24 UTF8 转码UNICODE //byte[] buffer1 = Encoding.Default.GetBytes(str); //byte[] buffer2 = Encoding.Convert(Encoding.UTF8, Encoding.Default, buffer1, 0, buffer1.Length); //string strBuffer = Encoding.Default.GetString(buffer2, 0, buffer2.Length); winCall.Title = (uc.UserName == SingletonObj.LoginInfo.LyncName ? str.Split(';')[2].ToString() : uc.UserName); } else { //2015/8/24 UTF8 转码UNICODE //byte[] buffer1 = Encoding.Default.GetBytes(str); //byte[] buffer2 = Encoding.Convert(Encoding.UTF8, Encoding.Default, buffer1, 0, buffer1.Length); //string strBuffer = Encoding.Default.GetString(buffer2, 0, buffer2.Length); winCall.Title = (uc.UserName == SingletonObj.LoginInfo.LyncName ? str.Split(';')[1].ToString() : uc.UserName); } uc.IsLeader = true; uc.Mute = MemStatusInCall.CONF_MEM_INCONF; } else { uc.Mute = MemStatusInCall.CONF_MEM_INVITING; } uc.Online = GetContactAvailability((int)uc.UCMemberType, StringHelper.GetSubString(uc.UserName)); contactList.Add(uc); } bool isConf = false; if (contactList.Count > 2) { isConf = true; StrTemp = isConf; } winCall.Render(contactList, isConf); } finally { LogManager.SystemLog.Info("WinCallViewModel Monitor.Exit"); } //call.SetConfMemEventCallBack(callBackConfMemberEventCB); //call.SetVideoCallEventCallBack(callBackVideoCallEventCB); //call.SetCallReservedEventCallBack(callReservedEventCB); } } catch (System.Exception ex) { LogManager.SystemLog.Error(ex.ToString()); } } catch (System.Exception ex) { LogManager.SystemLog.Error(ex.ToString()); } }
/// <summary> /// 增加新的与会人 /// </summary> /// <param name="obj"></param> void GetSelectContactFun(object obj) { DataTable dt1 = (DataTable)obj; //modifty by 00327190 做校验,防止已经通话中的人再次入会 for (int i = 0; i < contactList.Count; i++) { for (int j = 0; j < dt1.Rows.Count; j++) { string b = dt1.Rows[j]["Url"].ToString().Trim(); if (b != "" && b != null) //UC帐号和话机联动账号添加,url不空 { string a = contactList[i].UserName.ToString().Trim(); //string c = a.Substring(0, a.Length - 10).ToString().Trim(); //这个是截取 @lync1.com之前的字符串的方法 if (String.Compare(a, b) == 0 || a.Equals(b) || a == b) { string message = (a) + " " + StringHelper.FindLanguageResource("theconferencehassameperson"); winCall.OpenDialogTiming(message, "error", 2); dt1.Rows[j].Delete(); // return; } } else //话机添加(没有对应UC账号),url为空,只能根据phone比较 { string a = contactList[i].UserName.ToString().Trim(); string d = dt1.Rows[j]["phone"].ToString().Trim(); if (String.Compare(a, d) == 0 || a.Equals(d) || a == d) { string message = (a)+ " " +StringHelper.FindLanguageResource("theconferencehassameperson"); winCall.OpenDialogTiming(message, "error", 2); dt1.Rows[j].Delete(); //return; } } } } dt1.AcceptChanges(); int count = dt1.Rows.Count + contactList.Count; if (dt1.Rows.Count != 0) { if (count <= 20) //多于20个人就不添加了 (应该是原先列表加上新加的人数大于20才不添加) { lock (WinCall.lockObject) { if (StrTemp == true) //为conference 时,走这个接口 { try { LogManager.SystemLog.Info("GetSelectContactFun Monitor.Enter"); DataTable dt = (DataTable)obj; int type = 0; foreach (DataRow dr in dt1.Rows) { string str = dr["Url"].ToString() == "" ? dr["Phone"].ToString() : dr["Url"].ToString(); string userName = ""; if (str.IndexOf("sip") > -1) { str = str.Substring(str.IndexOf(":") + 1); } STConfMember ST = new STConfMember(); StringBuilder ucName = new StringBuilder(100); // if (call.GetUCAccount(str, ucName) == 0) //回调成功 modify by 00327190 之前没有if判断,现在只有能成功才可以入会 //{ if (dr["Name"].ToString() == "") { call.GetUCAccount(str, ucName); if (ucName.ToString() != "") { userName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName); type = 0; str = userName.ToString(); //2015/8/6 ST.membertype = type; ST.account = ucName.ToString(); } else { userName = str; type = 1; //2015/8/6 ST.membertype = type; ST.account = str; } } else { userName = str; type = 0; //2015/8/6 ST.membertype = type; ST.account = str.Replace(StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName), ""); } UCContact uc = new UCContact(); uc.UCMemberType = (MemberType)type; uc.Mute = MemStatusInCall.CONF_MEM_INVITING; uc.UserName = userName; uc.Online = GetContactAvailability(type, StringHelper.GetSubString(uc.UserName));//查询uc状态 contactList.Add(uc); call.InviteMemberInCall(type, new StringBuilder(StringHelper.GetSubString(str))); //} //else //{ // string message = StringHelper.FindLanguageResource("error") + (str); // winCall.OpenDialogTiming(message, "error", 3); //} } IEnumerable<UCContact> noduplicates = contactList.Distinct(new ContactCompar()); List<UCContact> temp = new List<UCContact>(); foreach (var contact in noduplicates) { temp.Add(contact); } contactList = temp; winCall.Render(contactList); winCall.IsEnableChanged(); } finally { LogManager.SystemLog.Info("GetSelectContactFun Monitor.Exit"); } } else ////为call 时,点呼转多人,走这个接口 { StrTemp = true; LogManager.SystemLog.Info("GetSelectContactFun Monitor.Enter"); DataTable dt = (DataTable)obj; int type = 0; STConfMemList ST1 = new STConfMemList(); ST1.stConfMem = new STConfMember[dt.Rows.Count]; ST1.size = dt.Rows.Count; for (int i = 0; i < dt1.Rows.Count; i++) { DataRow dr = dt.Rows[i]; STConfMember ST = new STConfMember(); string str = dr["Url"].ToString() == "" ? dr["Phone"].ToString() : dr["Url"].ToString(); string userName = ""; if (str.IndexOf("sip") > -1) { str = str.Substring(str.IndexOf(":") + 1); } StringBuilder ucName = new StringBuilder(100); if (dr["Name"].ToString() == "") { call.GetUCAccount(str, ucName); if (ucName.ToString() != "") { userName = ucName + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName); type = 0; str = userName.ToString(); ST.membertype = type; ST.account = ucName.ToString(); } else { userName = str; type = 1; ST.membertype = type; ST.account = str; } } else { userName = str; type = 0; ST.membertype = type; ST.account = str.Replace(StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName), ""); } ST1.stConfMem[i] = ST; ST1.size = i + 1; UCContact uc = new UCContact(); uc.UCMemberType = (MemberType)type; uc.Mute = MemStatusInCall.CONF_MEM_INVITING; uc.UserName = userName; uc.Online = GetContactAvailability(type, StringHelper.GetSubString(uc.UserName));//查询uc状态 contactList.Add(uc); } int iSizeSTContact = Marshal.SizeOf(typeof(STConfMember)); int iSizeSTContactList = Marshal.SizeOf(typeof(STConfMemList)); uiSize = iSizeSTContactList + (dt.Rows.Count - 1) * iSizeSTContact; pSTContactList = StructToBytes(ST1); if (call.UC_SDK_TransCallToConf(pSTContactList, uiSize) == 0) { IEnumerable<UCContact> noduplicates = contactList.Distinct(new ContactCompar()); List<UCContact> temp = new List<UCContact>(); foreach (var contact in noduplicates) { temp.Add(contact); } contactList = temp; winCall.Render(contactList); //winCall.IsConf(); winCall.IsEnableChanged(); } else { DialogShow.Show(StringHelper.FindLanguageResource("error"), StringHelper.FindLanguageResource("error"), 2); return; } } } } else { winCall.OpenDialogTiming("somanypeople", "error", 2); winCall.lync.setBtn(); //2015/8/17 之前由于视频转移导入的添加界面OK键使得加人键禁用原因 return; } } else { //winCall.OpenDialogTiming("PleaseAddOneAccountFirst", "error", 2); //return; } winCall.lync.setBtn(); }
void StartUpdateCallWin(object avParam) { lock (WinCall.lockObject) { //this.flag1 = false; try { if (contactList != null) //modify by 00327190 2015/8/10 { LogManager.SystemLog.Info("StartUpdateCallWin Monitor.Enter"); STConfParam _avParam = new STConfParam(); _avParam = (STConfParam)avParam; LogManager.SystemLog.Info("Start ConfMemberEventCB"); string str = _avParam.callerAcc_; if (str == "") { if (_avParam.memStatus == (int)MemStatusInCall.CONF_MEM_SPK) { foreach (UCContact uc1 in contactList) { uc1.IsSpeaker = false; } } LogManager.SystemLog.Info("End ConfMemberEventCB1"); return; } else { if (contactList.FindIndex((x) => { return StringHelper.GetSubString(x.UserName) == str; }) == -1) { UCContact uc = new UCContact(); if (_avParam.memType == (int)MemberType.UC_IPPHONE) { uc.UserName = str; } else { uc.UserName = str + StringHelper.GetLyncDomainString(SingletonObj.LoginInfo.LyncName); } uc.Mute = (MemStatusInCall)_avParam.memStatus; uc.UCMemberType = (MemberType)_avParam.memType; uc.Online = GetContactAvailability(_avParam.memType, str); //if 是modify by jinyeqing 之前是没有的 if (_avParam.memStatus != (int)MemStatusInCall.CONF_MEM_DEL) { contactList.Add(uc); } winCall.Render(contactList); //winCall.AddContactWinSize(contactList); LogManager.SystemLog.Info("End ConfMemberEventCB2"); return; } else if (!winCall.IsConf())//修改呼叫三人会议,一人未接,被叫者不是会议状态的bug { winCall.Render(contactList); } } UCContact ucFrist = contactList.First((x) => { return StringHelper.GetSubString(x.UserName) == str; }); if (ucFrist != null) { if ((_avParam.memStatus == (int)MemStatusInCall.CONF_MEM_DEL || _avParam.memStatus == (int)MemStatusInCall.CONF_MEM_QUIT) && contactList.FindIndex((x) => { return x.IsLeader == true && StringHelper.GetSubString(x.UserName) == str; }) != -1) { //临时注释掉 会议主席离会时,关闭会议的处理,只更新状态 //winCall.CloseCallInThread(); ucFrist.Mute = (MemStatusInCall)_avParam.memStatus; return; } switch (_avParam.memStatus) { case (int)MemStatusInCall.CONF_MEM_SPK: foreach (UCContact uc1 in contactList) { uc1.IsSpeaker = false; } ucFrist.IsSpeaker = true; break; //case (int)MemStatusInCall.CONF_MEM_QUIT: case (int)MemStatusInCall.CONF_MEM_DEL: contactList.Remove(ucFrist); winCall.Render(contactList); // winCall.AddContactWinSize(contactList); break; default: ucFrist.Mute = (MemStatusInCall)_avParam.memStatus; break; } } } } finally { LogManager.SystemLog.Info("End ConfMemberEventCB3"); LogManager.SystemLog.Info("StartUpdateCallWin Monitor.Exit"); } //this.flag1 = true; } }