//Обработка отправки сообщений 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 Disconnect(ChatUser User) { //Определение подключения ICallbackMessage Connection = ConnectedUsers.FirstOrDefault(x => x.Value.Name == User.Name).Key; Console.WriteLine(User.Name + " trying to disconnect!"); //Если подкючение найдено if (Connection != null) { //Удаление текущего пользователя из списка подключенных ConnectedUsers.Remove(Connection); Console.WriteLine(User.Name + " disconnected!"); //Обновление списка подключенных у всех пользователей foreach (ICallbackMessage u in ConnectedUsers.Keys) { u.UpdateConnected(ConnectedUsers.Values.ToArray()); } return; } else { Console.WriteLine(User.Name + " connection not found!"); return; } }
protected void SendMessages(ICallbackMessage callback) { foreach (var message in Messages) { bool onCallback = callback != null && callback.Token != null; if (onCallback) { message.Token = callback.Token; } message.Send(onCallback: onCallback); } }
//Обработка подключения пользователя 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; } }
public static void Send(this IDto dto, ICallbackMessage callback = null) { if (dto == null) { return; } var message = dto.ToMessage(); bool onCallback = callback != null && callback.Token != null; if (onCallback) { message.Token = callback.Token; } using (var ctx = BusFactory.CreateBusContext()) { SendInternal(ctx, message, onCallback); } }