예제 #1
0
        public ModelUpdateChat UpdateChat(ModelUpdateTime time)
        {
            if (Player == null)
            {
                return(null);
            }

            lock (Player)
            {
                var res = new ModelUpdateChat()
                {
                    Time = DateTime.UtcNow
                };

                //Список игроков кого видим
                var ps = PartyLoginSee();

                /*
                 * string ttt = "";
                 *
                 * try ////////////////////////////////
                 * {
                 *  Loger.Log("Server test " + Repository.GetData.PlayersAll[1].Chats[0].Posts.Count + "=" + Player.Chats[0].Posts.Count);
                 *  Repository.GetData.PlayersAll[1].Chats[0].Posts.Add(new ChatPost());
                 *  Loger.Log("Server test " + Repository.GetData.PlayersAll[1].Chats[0].Posts.Count + "=" + Player.Chats[0].Posts.Count);
                 * }
                 * catch { }
                 * try
                 * {
                 *  ttt = Player.Chats[0].Posts[0].OnlyForPlayerLogin + " - " + Player.Chats[0].Posts[0].OwnerLogin;
                 * }
                 * catch { }
                 *
                 * Loger.Log("Server UpdateChat " + Player.Public.Login + " " + time.Time.Ticks + ": " + string.Join(",", ps.ToArray())
                 + " | " + ttt);
                 */
                //Копируем чат без лишнего и отфильтровываем посты
                res.Chats = Player.Chats
                            .Select(ct => new Chat()
                {
                    Id         = ct.Id,
                    OwnerLogin = ct.OwnerLogin,
                    Name       = ct.Name,
                    OwnerMaker = ct.OwnerMaker,
                    PartyLogin = ct.PartyLogin,
                    Posts      = ct.Posts
                                 .Where(p => p.Time > time.Time)
                                 .Where(p => p.OnlyForPlayerLogin == null && ps.Any(pp => pp == p.OwnerLogin) ||
                                        p.OnlyForPlayerLogin == ct.OwnerLogin)
                                 .ToList()
                })
                            .Where(ct => ct != null)
                            .ToList();

                //Loger.Log("Server " + res.Chats.Count);
                return(res);
            }
        }
예제 #2
0
        private void checkGetToken(string msg, int index)
        {
            var res = _sessionClient.PostingChat(1, msg);

            Assert.IsTrue(res.Status == 0);
            var ic = new ModelUpdateTime();
            var dc = _sessionClient.UpdateChat(ic);

            Assert.IsNotNull(dc);
            Assert.IsTrue(dc.Chats[0].OwnerLogin == userName);

            var m       = dc.Chats[0].Posts[index].Message;
            var boolres = Guid.TryParse(m, out Guid guid);

            Assert.IsTrue(boolres);
        }
예제 #3
0
        private ModelUpdateChat updateChat(ModelUpdateTime time, ServiceContext context)
        {
            lock (context.Player)
            {
                var res = new ModelUpdateChat()
                {
                    Time  = DateTime.UtcNow,
                    Chats = new List <Chat>(),
                };
                bool fullRequest = time.Time == DateTime.MinValue;

                var myLogin = context.Player.Public.Login;

                //Список игроков кого видим, а видим мы пока не построили консоль связи всех кто рядом в 10 клетках)
                // ( ну или мы админ админ, модератор or discord)
                var ps = StaticHelper.PartyLoginSee(context.Player);
                //Копируем чат без лишнего и отфильтровываем посты

                foreach (var chatPair in context.Player.Chats)
                {
                    var ct      = chatPair.Key;
                    var resChat = new Chat()
                    {
                        Id          = ct.Id,
                        OwnerLogin  = ct.OwnerLogin,
                        Name        = ct.Name,
                        OwnerMaker  = ct.OwnerMaker,
                        Posts       = new List <ChatPost>(),
                        LastChanged = ct.LastChanged,
                    };

                    //Копируем чат без лишнего и отфильтровываем посты
                    var ix                       = chatPair.Value;
                    var countOfPosts             = ct.Posts.Count;
                    var fullRequestMinCountPosts = 20;
                    if (fullRequest && countOfPosts - ((int)ix.Value + 1) < fullRequestMinCountPosts)
                    {
                        ix.Value = countOfPosts - fullRequestMinCountPosts - 1;
                        if (ix.Value < 0)
                        {
                            ix.Value = 0;
                        }
                    }

                    for (var i = (int)ix.Value + 1; i < countOfPosts; i++)
                    {
                        var post = ct.Posts[i];
                        if (post.OnlyForPlayerLogin == null && ps.Any(pp => pp == post.OwnerLogin) || post.OnlyForPlayerLogin == myLogin)
                        {
                            resChat.Posts.Add(post);
                        }
                    }

                    ix.Value = countOfPosts - 1;

                    // Если с с момента последнего изменения изменился список логинов ( добавили или удалили, обновляем список)
                    if (fullRequest || ct.LastChanged > ix.Time)
                    {
                        resChat.PartyLogin = ct.PartyLogin;
                        ix.Time            = ct.LastChanged;
                    }

                    res.Chats.Add(resChat);
                }

                return(res);
            }
        }