Пример #1
0
 private void ThreadStart()
 {
     while (heartThread.IsAlive)
     {
         if (socketServerManager.GetClientList().Count > 0)
         {
             UserToken[] userList = socketServerManager.GetClientList().ToArray();
             for (int i = 0; i < userList.Length; i++)
             {
                 //心跳超时
                 if ((DateTime.Now - userList[i].HeartTime).TotalSeconds > heartOutTime)
                 {
                     Console.WriteLine("Heart out time:" + userList[i].UserName);
                     //关闭客户端
                     socketServerManager.CloseClient(userList[i]);
                 }
             }
         }
         //每10秒检测一次
         for (int i = 0; i < 10; i++)
         {
             if (!startCheck)
             {
                 return;
             }
             Thread.Sleep(1000);
         }
     }
 }
Пример #2
0
        /// <summary>
        /// 通知所有用户房间列表有更新,发送新的房间列表
        /// </summary>
        internal void OnRoomListUpdate()
        {
            RoomList list = new RoomList();

            for (int i = 0; i < socketServerManager.GetRoomList().Count; i++)
            {
                string str = socketServerManager.GetRoomList()[i].RoomName + "," + socketServerManager.GetRoomList()[i].UserList.Count;
                list.List.Add(str);
            }
            DataModel model = new DataModel();

            model.Type    = DataType.TYPE_SPORDER;
            model.Request = DataRequest.GET_ROOMLIST_S;
            model.Message = DataCodec.TobyteArray(list);

            for (int i = 0; i < socketServerManager.GetClientList().Count; i++)
            {
                Send(socketServerManager.GetClientList()[i], model);
            }
        }