コード例 #1
0
        //Обработка отправки сообщений
        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);
        }
コード例 #2
0
        //Обработка отключения пользователя
        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;
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        //Обработка подключения пользователя
        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;
            }
        }
コード例 #5
0
        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);
            }
        }