public ConferenceMatrixEntity GetMatrixEntity(int conferenceID) { ConferenceMatrixEntity conferenceMatrixEntity = null; try { //上锁,达到线程互斥作用 lock (objGetMatrixEntity) { try { //会议名称不为空 if (conferenceID == 0) { return(null); } //查看缓存中是否包含该会议名称 if (dicConferenceMatrixEntity.ContainsKey(conferenceID)) { //取出临时矩阵投影人 conferenceMatrixEntity = dicConferenceMatrixEntity[conferenceID]; SeatEntity seatEntity = conferenceMatrixEntity.SeatEntity; string strIP = seatEntity.SettingIP; if (dicSeatEntity.ContainsKey(conferenceID) && !string.IsNullOrEmpty(strIP)) { List <SeatEntity> seatList = dicSeatEntity[conferenceID].Where(Item => Item.SettingIP.Equals(strIP)).ToList <SeatEntity>(); if (seatList.Count > 0 && seatList[0].SettingIP.Equals(strIP)) { if (Constant.DicMatrixMeetServerSocket.ContainsKey(conferenceID)) { string uri = seatList[0].SharerUri; conferenceMatrixEntity.SharerUri = uri; MeetServerSocket meetSocekt = Constant.DicMatrixMeetServerSocket[conferenceID]; if (meetSocekt != null && meetSocekt.DicClientSocket != null && meetSocekt.DicClientSocket.Count > 0 && !string.IsNullOrEmpty(uri) && meetSocekt.DicClientSocket.ContainsKey(uri)) { SocketModel socketModel = meetSocekt.DicClientSocket[uri]; bool isOnline = Constant.ServerSendData(socketModel.Socket, 10); //判断是否在线 conferenceMatrixEntity.IsOnline = isOnline; } } } } } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } return(conferenceMatrixEntity); }
//public int PointDealWidth(int point) //{ // if (point > 1) // { // //多个会议,合理分配端口 // point += point * 5; // } //} /// <summary> /// 服务器通讯节点初始化辅助 /// </summary> public static ServerSocket ServerSocketInitHelper(MeetServerSocket meetServerSocket, int point) { ServerSocket serverSocket = null; try { //指派一个端口 meetServerSocket.ServerPort = point; //生成一个服务套接字 meetServerSocket.ServerSocket = new ServerSocket(); //开启侦听 meetServerSocket.ServerSocket.Listen(IPAddress.Parse(Constant.ServerAddress), point); //返回的服务套接字 serverSocket = meetServerSocket.ServerSocket; } catch (Exception ex) { LogManage.WriteLog(typeof(Constant), ex); } finally { } return(serverSocket); }
/// <summary> /// 判断用户是否存在 /// </summary> public bool CheckUserIsOnline(string Uri) { lock (objCheckUserIsOnline) { bool isOnline = false; try { for (int i = Constant.DicInfoMeetServerSocket.Count - 1; i > -1; i--) { KeyValuePair <int, MeetServerSocket> itemMeet = Constant.DicTreeMeetServerSocket.ElementAt(i); MeetServerSocket meetServerSocket = itemMeet.Value; Dictionary <string, SocketModel> dicSocket = meetServerSocket.DicClientSocket; if (dicSocket.ContainsKey(Uri)) { Socket socket = dicSocket[Uri].Socket; if (Constant.ServerSendData(socket, 20)) { isOnline = true; break; } } } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } finally { } return(isOnline); } }
/// <summary> /// 会议通讯节点信息发送管理中心 /// </summary> /// <param name="conferenceName">会议名称</param> /// <param name="pack">数据包</param> public static void SendClientCenterManage(Dictionary <int, MeetServerSocket> dicMeetServerSocket, int conferenceID, PackageBase pack) { try { //会议通讯节点字典集合是否包含此项 if (dicMeetServerSocket.ContainsKey(conferenceID)) { MeetServerSocket meetServerSocket = dicMeetServerSocket[conferenceID]; //获取会议通讯节点 ServerSocket ServerSocket = meetServerSocket.ServerSocket; //获取客户端通讯节点字典集合 Dictionary <string, SocketModel> dicSocket = meetServerSocket.DicClientSocket; //Thread.Sleep(100); //遍历客户端通讯节点字典集合 for (int i = dicSocket.Count - 1; i > -1; i--) { SocketModel socketModel = dicSocket.Values.ElementAt(i); switch (socketModel.SocketClientType) { case SocketClientType.PC: //会议通讯节点给客户端发送信息 ServerSocket.ServerSendData(socketModel.Socket, pack, new Action <bool>((successed) => { //socket.Poll(10, SelectMode.SelectRead) || !socket.Connected) Socket socket = socketModel.Socket; if (!successed || !ServerSendData(socket, 10)) { //错误返回标示,异常废弃的客户端通讯节点 dicSocket.Remove(dicSocket.Keys.ElementAt(i)); } })); break; case SocketClientType.Android: if (pack.ConferenceAudioItemTransferEntity != null && pack.ConferenceAudioItemTransferEntity.Operation == ConferenceWebCommon.EntityHelper.ConferenceDiscuss.ConferenceAudioOperationType.AddType) { //传输json string json = CommonMethod.Serialize(pack); //会议通讯节点给手机端发送信息 ServerSocket.ServerSendData(socketModel.Socket, json, new Action <bool>((successed) => { Socket socket = socketModel.Socket; if (!successed || !ServerSendData(socket, 10)) { //错误返回标示,异常废弃的客户端通讯节点 dicSocket.Remove(dicSocket.Keys.ElementAt(i)); //LogManage.WriteLog(typeof(Constant), "已作废一个节点,该节点为" + dicSocket.Keys.ElementAt(i)); } })); } break; default: break; } } } } catch (Exception ex) { LogManage.WriteLog(typeof(Constant), ex); } finally { } }
/// <summary> /// 服务器通讯节点集合初始化辅助 /// </summary> public static void DicServerSocketInitHelper(MeetServerSocket meetServerSocket) { try { int point = 0; switch (meetServerSocket.ConferenceClientAcceptType) { case ConferenceClientAcceptType.ConferenceTree: //知识树服务端口绑定 point = Constant.TreeServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket TreeServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 TreeServerSocket.TCPDataArrival += TreeServerSocket_TCPDataArrival; break; case ConferenceClientAcceptType.ConferenceAudio: //语音服务端口绑定 point = Constant.AudioServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket AudioServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 AudioServerSocket.TCPDataArrival += AudioServerSocket_TCPDataArrival; //获取手机端信息 AudioServerSocket.TCPDataAccroiding += AudioServerSocket_TCPDataAccroiding; break; case ConferenceClientAcceptType.ConferenceFileSync: //文件服务端口绑定【甩屏】 point = Constant.FileServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket FileServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 FileServerSocket.TCPDataArrival += FileServerSocket_TCPDataArrival; break; case ConferenceClientAcceptType.ConferenceSpaceSync: //文件服务端口绑定【甩屏】 point = Constant.SpaceServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket OfficeServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 OfficeServerSocket.TCPDataArrival += SpaceServerSocket_TCPDataArrival; break; case ConferenceClientAcceptType.ConferenceInfoSync: //消息服务端口绑定 point = Constant.InfoServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket InfoServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 InfoServerSocket.TCPDataArrival += InfoServerSocket_TCPDataArrival; break; case ConferenceClientAcceptType.LyncConversationSync: //lync服务端口绑定 point = Constant.LyncServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket LyncServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 LyncServerSocket.TCPDataArrival += LyncServerSocket_TCPDataArrival; break; case ConferenceClientAcceptType.ConferenceMatrixSync: //lync服务端口绑定 point = Constant.MatrixServerPoint; if (Constant.MeetCount > 1) { //多个会议,合理分配端口 point += Constant.MeetCount * 7; } //服务器通讯节点初始化辅助 ServerSocket MatrixServerSocket = Constant.ServerSocketInitHelper(meetServerSocket, point); //获取客户端信息 MatrixServerSocket.TCPDataArrival += MatrixServerSocket_TCPDataArrival; break; default: break; } } catch (Exception ex) { LogManage.WriteLog(typeof(Constant), ex); } finally { } }
/// <summary> /// 服务器通讯节点初始化 /// </summary> /// <param name="conferenceName">会议名称</param> /// <returns>返回端口号</returns> public static int ServerSocketInitAndRetunPort(int conferenceID, ConferenceClientAcceptType conferenceClientAcceptType) { int ConferencePort = 0; try { //声明一个服务集合 Dictionary <int, MeetServerSocket> DicmeetServerSocket = null; switch (conferenceClientAcceptType) { case ConferenceClientAcceptType.ConferenceTree: //知识树服务 DicmeetServerSocket = Constant.DicTreeMeetServerSocket; break; case ConferenceClientAcceptType.ConferenceAudio: //语音服务 DicmeetServerSocket = Constant.DicAudioMeetServerSocket; break; case ConferenceClientAcceptType.ConferenceFileSync: //甩屏服务 DicmeetServerSocket = Constant.DicFileMeetServerSocket; break; case ConferenceClientAcceptType.ConferenceSpaceSync: //甩屏服务 DicmeetServerSocket = Constant.DicSpaceMeetServerSocket; break; case ConferenceClientAcceptType.ConferenceInfoSync: //消息服务 DicmeetServerSocket = Constant.DicInfoMeetServerSocket; break; case ConferenceClientAcceptType.LyncConversationSync: //lync通讯服务 DicmeetServerSocket = Constant.DicLyncMeetServerSocket; break; case ConferenceClientAcceptType.ConferenceMatrixSync: //矩阵应用 DicmeetServerSocket = Constant.DicMatrixMeetServerSocket; break; default: break; } //判断是否包含该会议通讯节点 if (!DicmeetServerSocket.ContainsKey(conferenceID)) { //生成一个服务器通讯节点 MeetServerSocket meetServerSocket = new MeetServerSocket(); //服务处理类型 meetServerSocket.ConferenceClientAcceptType = conferenceClientAcceptType; //加载一个新的会议节点 DicmeetServerSocket.Add(conferenceID, meetServerSocket); //设置会议的数量 Constant.MeetCount = DicmeetServerSocket.Count; //服务器通讯节点初始化辅助 Constant.DicServerSocketInitHelper(meetServerSocket); //返回端口 ConferencePort = meetServerSocket.ServerPort; } else { //返回端口 ConferencePort = DicmeetServerSocket[conferenceID].ServerPort; } } catch (Exception ex) { LogManage.WriteLog(typeof(Constant), ex); } //返回指定端口 return(ConferencePort); }
public void RemoveConversation(string conferenceName) { lock (objRemoveConversation) { int trueCount = 0; bool canRemove = false; try { //会议名称不为空 if (!string.IsNullOrEmpty(conferenceName)) { for (int i = Constant.DicInfoMeetServerSocket.Count - 1; i > -1; i--) { KeyValuePair <string, MeetServerSocket> itemMeet = Constant.DicInfoMeetServerSocket.ElementAt(i); if (itemMeet.Key.Equals(conferenceName)) { MeetServerSocket meetServerSocket = itemMeet.Value; Dictionary <string, SocketModel> dicSocket = meetServerSocket.DicClientSocket; for (int j = dicSocket.Count - 1; j > -1; j--) { try { KeyValuePair <string, SocketModel> itemSocket = dicSocket.ElementAt(j); //即使有一个连着都说明还有参会人,不能去清除会话标识 SocketModel socketModel = itemSocket.Value; if (Constant.ServerSendData(socketModel.Socket, 10)) { trueCount++; } } catch (Exception) { continue; } } break; } } } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } finally { if (trueCount > 0) { canRemove = false; } else if (trueCount == 0) { canRemove = true; } if (canRemove) { if (dicConversationList.ContainsKey(conferenceName)) { dicConversationList.Remove(conferenceName); } if (dicConversationCanInitList.ContainsKey(conferenceName)) { dicConversationCanInitList.Remove(conferenceName); } } } } }