//Обработка отправки сообщений public void Message(Message Msg) { //Подключение отправителя ICallbackMessage Connection = OperationContext.Current.GetCallbackChannel <ICallbackMessage>(); //Если отправитель не подключен if (!ConnectedUsers.TryGetValue(Connection, out ChatUser Sender)) { return; } //Установка идентификатора отправителя к сообщению Msg.SenderID = Sender.ID; //Установка даты отправки Msg.SendDate = DateTime.Now; //Определение подключения получателя ICallbackMessage Receiver = ConnectedUsers.FirstOrDefault(x => x.Value.ID == Msg.ReceiverID).Key; //Отправка сообщения получателю если он подключен if (Receiver != null) { Receiver.GetMessage(Msg); } //Добавление сообщения в общий список Messages.Add(Msg); }
//Обработка подключения пользователя public void Connect(ChatUser User, string Password) { //Подключаемый пользователь ChatStoredUser StoredUser = Registred.FirstOrDefault(x => x.Name == User.Name && x.Password == Password); //Подключение пользователя ICallbackMessage Connection = OperationContext.Current.GetCallbackChannel <ICallbackMessage>(); //Проверка зарегистрирован ли пользователь if (StoredUser != null) { //Проверка не подключен ли уже пользователь if (ConnectedUsers.Values.FirstOrDefault(x => x.Name == StoredUser.Name) != null) { Console.WriteLine(User.Name + " already logged!"); Connection.GetMessage(new Message("alreadylogged", -1, StoredUser.ID, DateTime.Now)); return; } else { Connection.GetMessage(new Message("connect", -1, StoredUser.ID, DateTime.Now)); //Идентификатор подключенного пользователя User.ID = StoredUser.ID; //Добавление подключения в словарь ConnectedUsers[Connection] = User; Console.WriteLine(StoredUser.Name + "Connected!"); //Обновление списка пользователей для всех подключенных foreach (var u in ConnectedUsers.Keys) { u.UpdateConnected((ChatUser[])ConnectedUsers.Values.ToArray()); } return; } } else { Console.WriteLine(User.Name + " unregistred!"); Connection.GetMessage(new Message("unregistred", -1, User.ID, DateTime.Now)); return; } }