Пример #1
0
        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);
                }
            });
        }
Пример #2
0
        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}");
        }
Пример #3
0
        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}");
             *  }
             * }*/
        }