private static void SendMessage(SenderObjectRelation senderObjectRelation) { Application.Current.Dispatcher.Invoke(delegate { if (senderObjectRelation.Group == null) { if (!MessageCollection.ContainsKey(senderObjectRelation.SenderId)) { MessageCollection.Add(senderObjectRelation.SenderId, new ObservableCollection <Message>()); } User friend = Friends.SingleOrDefault(f => f.Id == senderObjectRelation.SenderId); MessageCollection[senderObjectRelation.SenderId].Add((Message)senderObjectRelation.Data); IncomingText?.Invoke(senderObjectRelation); } else { Group group = Group.groups.SingleOrDefault(g => g.Id == senderObjectRelation.DestinationId); User friend = Friends.SingleOrDefault(f => f.Id == senderObjectRelation.SenderId); if (friend == null) { friend = new User(senderObjectRelation.SenderId); } group.Messages.Add(new Message(friend, senderObjectRelation.Data.ToString(), DateTime.Now)); IncomingText?.Invoke(senderObjectRelation, group); } }); }
private static void AddToQueue(UserConnection user, SenderObjectRelation senderObjectRelation) { if (!QueuedMessages.ContainsKey(user.Id)) { QueuedMessages[user.Id] = new List <SenderObjectRelation>(); } QueuedMessages[user.Id].Add(new SenderObjectRelation(senderObjectRelation.SenderId, senderObjectRelation.DestinationId, senderObjectRelation.Data, senderObjectRelation.Group)); Printer.WriteLine($"Message stored due to unreachable client from {senderObjectRelation.SenderId} to {user.Id}:\n\t{senderObjectRelation.Data}"); }
public static void SendMessage(ServerObject data, int?exclusiveMessageId = null) { SenderObjectRelation senderObjectRelation = (SenderObjectRelation)data.Data; if (senderObjectRelation.Group != null) { Baco.ServerObjects.Group group = groups.SingleOrDefault(g => g.Id == senderObjectRelation.DestinationId); senderObjectRelation.Group = group; if (exclusiveMessageId == null) { group.Users.ForEach(u => { if (u.Id != senderObjectRelation.SenderId) { UserConnection user = connectedUsers.SingleOrDefault(c => c.Id == u.Id); if (user != null) { formatter.Serialize(user.Client.GetStream(), new ServerObject(ServerFlag.SendMessage, senderObjectRelation)); Printer.WriteLine($"Groupal message sent from {senderObjectRelation.SenderId} to {u.Id}:\n\t{senderObjectRelation.Data}"); } else { AddToQueue(new UserConnection(u.Id), senderObjectRelation); } } }); } else { UserConnection user = connectedUsers.SingleOrDefault(c => c.Id == exclusiveMessageId); if (user != null) { formatter.Serialize(user.Client.GetStream(), new ServerObject(ServerFlag.SendMessage, senderObjectRelation)); Printer.WriteLine($"Groupal message sent from {senderObjectRelation.SenderId} to {exclusiveMessageId} (stored):\n\t{senderObjectRelation.Data}"); } else { AddToQueue(new UserConnection(exclusiveMessageId.Value), senderObjectRelation); } } } else { UserConnection user = connectedUsers.SingleOrDefault(u => u.Id == senderObjectRelation.DestinationId); if (user != null) { formatter.Serialize(user.Client.GetStream(), new ServerObject(ServerFlag.SendMessage, senderObjectRelation)); Printer.WriteLine($"Message sent from {senderObjectRelation.SenderId} to {user.Id}:\n\t{senderObjectRelation.Data}"); } else { AddToQueue(new UserConnection(senderObjectRelation.DestinationId), senderObjectRelation); } } /*for (int i = 0; i < senderObjectRelation.DestinationIds.Length; i++) * { * UserConnection user = connectedUsers.FirstOrDefault(u => u.Id == senderObjectRelation.DestinationIds[i]); * * if (user != null) * { * formatter.Serialize(user.Client.GetStream(), new ServerObject(ServerFlag.SendMessage, senderObjectRelation)); * Printer.WriteLine($"Message sent from {senderObjectRelation.SenderId} to {senderObjectRelation.DestinationIds[i]}:\n\t{senderObjectRelation.Data}"); * } * else * { * if (!QueuedMessages.ContainsKey(senderObjectRelation.DestinationIds[i])) * QueuedMessages[senderObjectRelation.DestinationIds[i]] = new List<Message>(); * * QueuedMessages[senderObjectRelation.DestinationIds[i]].Add((Message)senderObjectRelation.Data); * Printer.WriteLine($"Message stored due to unreachable client from {senderObjectRelation.SenderId} to {senderObjectRelation.DestinationIds[i]}:\n\t{senderObjectRelation.Data}"); * } * }*/ }