/// <summary> /// 检测客户端是否在线,否则移除sesion /// </summary> /// <param name="activeColor"></param> /// <param name="disableColor"></param> private void CheckHeartbeat_ClientDesk(Color activeColor, Color disableColor) { var clients = SessionPool.GetClientsGroup(ClientTypeEnum.Client); var sessionIds = clients.Keys.ToArray(); int okCount = 0; if (sessionIds.Length > 0) { DateTime checkTime = DateTime.Now.AddSeconds(-20); foreach (var item in sessionIds) { if (clients[item].Heartbeat >= checkTime) { okCount++; } else { // 移除控盘端资源 SessionControler.Disconnect(item, new ValueTypeParam <ClientTypeEnum>(ClientTypeEnum.Client)); } } } if (okCount > 0) { } else { } }
private async Task <bool> GetNextPosts(FacebookContext context, SessionControler Session, int need) { var user = db.Users.Single(u => u.UserId == context.UserId); while (Session.FriendsFeed.Count < need) { var friends = user.UserFriends.Where(uf => long.Parse(uf.FriendId) > Session.FriendsFeedUserId && uf.IsOwerAppUser).OrderBy(uf => long.Parse(uf.FriendId)).ToArray(); if ((friends.Count() == 0 && Session.FriendsFeedUserId == 0) || Session.FriendsFeedPostNumber == 100) { break; } foreach (var friend in friends) { var Posts = (await context.Client.GetTaskAsync <FQLPosts>("fql", new { q = "SELECT post_id,permalink,source_id,message,description,created_time,type,attachment FROM stream WHERE source_id = \"" + friend.FriendId + "\" limit " + Session.FriendsFeedPostNumber })).Data; foreach (var Post in Posts) { if (!Session.FriendsFeed.Any(p => p.Id == Post.Id) && Post != null && ValidateNewPost(Post)) { var dbPost = db.Posts.SingleOrDefault(p => p.PostId == Post.Id); if (dbPost == null) { Post.SetAuthor(db.Users.Single(u => u.UserId == Post.Source_id)); } else { Post.SetFullInfo(dbPost, context.UserId); } Session.AddFriendsFeed(Post); } } Session.FriendsFeedUserId = long.Parse(friend.FriendId); if (Session.FriendsFeed.Count >= need) { return(true); } } Session.FriendsFeedPostNumber = Session.FriendsFeedPostNumber + 10; Session.FriendsFeedUserId = 0; } return(true); }
public async Task <IEnumerable <FQLPost> > GetFriendsPosts(FacebookContext context, int from, HttpSessionStateBase session) { IEnumerable <FQLPost> result = new List <FQLPost>(); SessionControler Session = new SessionControler(session); if (from == 0) { Session.Clear(); var user = db.Users.Single(u => u.UserId == context.UserId); var friends = user.UserFriends.Where(uf => uf.IsOwerAppUser); string friensString = " "; foreach (var friend in friends) { friensString += "\"" + friend.FriendId + "\","; } friensString = friensString.Remove(friensString.Count() - 1); var BasePosts = (await context.Client.GetTaskAsync <FQLPosts>("fql", new { q = "SELECT post_id,permalink,source_id,message,description,created_time,type,attachment FROM stream WHERE source_id IN (" + friensString + ") limit 100" })).Data; foreach (var post in BasePosts) { if (ValidateNewPost(post)) { var dbPost = db.Posts.SingleOrDefault(p => p.PostId == post.Id); if (dbPost == null) { post.SetAuthor(db.Users.Single(u => u.UserId == post.Source_id)); } else { post.SetFullInfo(dbPost, context.UserId); } Session.AddFriendsFeed(post); } } if (Session.FriendsFeed.Count > 10) { result = GetNext <FQLPost>(Session.FriendsFeed, from); } else { await GetNextPosts(context, Session, 10); } } while (Session.FriendsFeed.Count < from + 10) { if (Session.FriendsFeedTask.Status == TaskStatus.Running) { Thread.Sleep(100); } else { break; } } result = GetNext <FQLPost>(Session.FriendsFeed, from); Session.FriendsFeedTask = Task.Factory.StartNew(() => { var task = GetNextPosts(context, Session, from + 20); task.Wait(); }); //while (Session.FriendsFeedTask.Status != TaskStatus.RanToCompletion) //{ // Thread.Sleep(1000); //} return(result); }