Ejemplo n.º 1
0
        public void SendMessage(int senderId, List <int> recipientNames, string message)
        {
            Abonent sender = allAbonents[senderId];

            if (recipientNames == null) //оправить всем
            {
                foreach (var index in links.Keys)
                {
                    if (allAbonents[index].status == Status.Online)
                    {
                        links[index].cbSendMessage(sender.name, message);
                    }
                    else
                    {
                        AddMessageToDb(sender.id, allAbonents[index].id, message);
                    }
                }

                logger.Logging(sender.name + " отправил всем сообщение");
            }
            else
            {
                foreach (var index in recipientNames)
                {
                    if (allAbonents[index].status == Status.Online)
                    {
                        links[index].cbSendMessage(sender.name, message);
                    }
                    else
                    {
                        AddMessageToDb(senderId, index, message); //сохранить сообщение в базу данных
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void AddAbonentToDb(int _id, string _name)
        {
            var abonent = new Abonent
            {
                id     = _id,
                name   = _name,
                status = Status.Offline
            };

            this.Abonents.Add(abonent);
            this.SaveChanges();
        }
Ejemplo n.º 3
0
        private void AddAbonentInDb(int _id, string _name)
        {
            using (var context = new DataBaseOfAbonents())
            {
                var abonent = new Abonent
                {
                    id     = _id,
                    name   = _name,
                    status = Status.Offline
                };

                context.Abonents.Add(abonent);
                context.SaveChanges();
            }
        }
Ejemplo n.º 4
0
        public int Connect(string name)
        {
            Abonent abonent;
            string  typeConnect;

            if (allAbonents.ToList().Exists(ab => ab.Value.name == name))
            {
                abonent = allAbonents.ToList().Find(ab => ab.Value.name == name).Value;
                if (abonent.status == Status.Online)
                {
                    logger.Logging("Попытка повторного входа!");
                    return(-1);
                }

                typeConnect       = "существующий ";
                links[abonent.id] = OperationContext.Current.GetCallbackChannel <IMessageCallback>();
                abonent.status    = Status.Online;
            }
            else
            {
                typeConnect = "новый ";
                abonent     = new Abonent()
                {
                    id     = idAbonent,
                    name   = name,
                    status = Status.Online
                };

                AddAbonentInDb(abonent.id, abonent.name);

                allAbonents.Add(idAbonent++, abonent);
                links[abonent.id] = OperationContext.Current.GetCallbackChannel <IMessageCallback>();
            }

            //Дать знать остальным пользователям о подключении нового
            foreach (var index in  links.Keys)
            {
                if (allAbonents[index].status == Status.Online && allAbonents[index].id != abonent.id)
                {
                    var i = links[index];
                    links[index].cbShowAbonent(abonent);
                }
            }

            logger.Logging("Подключился " + typeConnect + abonent.name);
            return(abonent.id);
        }
        public void Disconnect(int id)
        {
            Abonent abonent = allAbonents[id];

            if (abonent.status == Status.Offline)
            {
                _logger.Logging("Клиент уже отключен");
                return;
            }

            _logger.Logging("Отключился " + abonent.name);
            abonent.status    = Status.Offline;
            links[abonent.id] = null;
            foreach (var index in links.Keys)
            {
                if (allAbonents[index].status == Status.Online && allAbonents[index].id != abonent.id)
                {
                    links[index].cbShowAbonent(abonent);
                }
            }
        }