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); } }
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); }
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); }
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); } }
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); }
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); }
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); } }