Example #1
0
        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);
        }
Example #2
0
        //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);
            }
        }
Example #4
0
        /// <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
            {
            }
        }
Example #5
0
        /// <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
            {
            }
        }
Example #6
0
        /// <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);
        }
Example #7
0
        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);
                        }
                    }
                }
            }
        }