Example #1
0
        public void ApplyChats(ModelUpdateChat updateDate)
        {
            ChatsTime = updateDate.Time;
            int newPost = 0;
            var newStr  = "";

            if (Chats != null)
            {
                foreach (var chat in updateDate.Chats)
                {
                    var cur = Chats.FirstOrDefault(c => c.Id == chat.Id);
                    if (cur != null)
                    {
                        cur.Posts.AddRange(chat.Posts);
                        var newPosts = chat.Posts.Where(p => p.OwnerLogin != SessionClientController.My.Login).ToList();
                        newPost += newPosts.Count;
                        if (newStr == "" && newPosts.Count > 0)
                        {
                            newStr = chat.Name + ": " + newPosts[0].Message;
                        }
                        chat.Posts = cur.Posts;
                    }
                }
            }
            Chats = updateDate.Chats;
            if (UIInteraction && newPost > 0)
            {
                if (newStr.Length > 50)
                {
                    newStr = newStr.Substring(0, 49) + "OCity_ClientData_ChatDot".Translate();
                }
                Messages.Message("OCity_ClientData_Chat".Translate() + newStr, MessageTypeDefOf.NeutralEvent);
            }
        }
Example #2
0
        public bool ApplyChats(ModelUpdateChat updateDate, ref string newStr)
        {
            ChatsTime = updateDate.Time;
            int newPost = 0;

            newStr = "";
            if (Chats != null)
            {
                foreach (var chat in updateDate.Chats)
                {
                    var cur = Chats.FirstOrDefault(c => c.Id == chat.Id);
                    if (cur != null)
                    {
                        cur.Posts.AddRange(chat.Posts);
                        var newPosts = chat.Posts.Where(p => p.OwnerLogin != _myLogin).ToList();
                        newPost += newPosts.Count;
                        if (newStr == "" && newPosts.Count > 0)
                        {
                            newStr = chat.Name + ": " + newPosts[0].Message;
                        }
                        chat.Posts = cur.Posts;
                    }
                }
            }

            Chats            = updateDate.Chats;
            ChatNotReadPost += newPost;
            return(newPost > 0);
        }
Example #3
0
        public bool ApplyChats(ModelUpdateChat updateDate)
        {
            ChatsTime = updateDate.Time;
            int newPost = 0;
            var newStr  = "";

            if (Chats != null)
            {
                foreach (var chat in updateDate.Chats)
                {
                    var cur = Chats.FirstOrDefault(c => c.Id == chat.Id);
                    if (cur != null)
                    {
                        cur.Posts.AddRange(chat.Posts);
                        var newPosts = chat.Posts.Where(p => p.OwnerLogin != SessionClientController.My.Login).ToList();
                        newPost += newPosts.Count;
                        if (newStr == "" && newPosts.Count > 0)
                        {
                            newStr = chat.Name + ": " + newPosts[0].Message;
                        }
                        chat.Posts = cur.Posts;
                    }
                }
            }
            Chats = updateDate.Chats;
            if (UIInteraction && newPost > 0)
            {
                GameMessage(newStr);
            }
            ChatNotReadPost += newPost;
            return(newPost > 0);
        }
Example #4
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);
            }
        }
Example #5
0
        public bool ApplyChats(ModelUpdateChat updateDate)
        {
            int newPost = 0;
            var newStr  = "";

            if (Chats != null)
            {
                lock (Chats)
                {
                    foreach (var chat in updateDate.Chats)
                    {
                        var cur = Chats.FirstOrDefault(c => c.Id == chat.Id);
                        if (cur != null)
                        {
                            cur.Posts.AddRange(chat.Posts);
                            var newPosts = chat.Posts.Where(p => p.OwnerLogin != SessionClientController.My.Login).ToList();
                            newPost += newPosts.Count;
                            if (newStr == "" && newPosts.Count > 0)
                            {
                                newStr = chat.Name + ": " + newPosts[0].Message;
                            }
                            chat.Posts = cur.Posts;
                            cur.Name   = chat.Name;
                            // это только для ускорения, сервер не передает список пати логинов, если ничего не изменилось
                            // т.к. передать 3000+ логинов по 8 байт, это уже несколько пакетов
                            if (chat.PartyLogin != null && chat.PartyLogin.Count > 0)
                            {
                                cur.PartyLogin = chat.PartyLogin;
                            }
                        }
                        else
                        {
                            Chats.Add(chat);
                        }
                    }

                    var ids = updateDate.Chats.Select(x => x.Id);
                    Chats.RemoveAll(x => !ids.Contains(x.Id));
                }
            }
            else
            {
                Chats = updateDate.Chats;
            }

            if (UIInteraction && newPost > 0)
            {
                GameMessage(newStr);
            }

            ChatNotReadPost += newPost;
            return(newPost > 0);
        }
Example #6
0
        public void UpdateChats()
        {
            ModelUpdateChat dc = _sessionClient.UpdateChat(_modelUpdateTime);

            if (dc == null)
            {
                Data.LastServerConnectFail = true;
                if (Data.ServerConnected)
                {
                    Disconnected();
                }

                return;
            }

            _modelUpdateTime.Time      = dc.Time;
            _modelUpdateTime.Value     = dc.LastChatPostId;
            Data.LastServerConnectFail = false;
            Data.LastServerConnect     = DateTime.UtcNow;
            var lastMessage = string.Empty;

            Data.ApplyChats(dc, ref lastMessage);
        }
Example #7
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);
            }
        }