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); //сохранить сообщение в базу данных } } } }
public void AddAbonentToDb(int _id, string _name) { var abonent = new Abonent { id = _id, name = _name, status = Status.Offline }; this.Abonents.Add(abonent); this.SaveChanges(); }
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(); } }
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); } } }