Beispiel #1
0
        /// <summary>
        /// Начальный прослушиватель.
        /// </summary>
        /// <param name="sernder"></param>
        /// <param name="message"></param>
        public static void BotHomeListner(object sernder, Telegram.Bot.Args.MessageEventArgs message)
        {
            bool IsNewUser = true;                                                 //Флаг на то что новый USer написал боту.

            if (message.Message.Type != Telegram.Bot.Types.Enums.MessageType.Text) //Проверяем что пришел текст
            {
                return;
            }

            if (ChatUsers.Count <= 0)           //Если коллекция пользователей пуста , то создаем нового пользователя.
            {
                dispatcher.Invoke(() =>
                                  ChatUsers.Add(new TelegramBot.ChatUser
                {
                    Messeges = new ObservableCollection <UserMessege>(),
                    Name     = message.Message.From.FirstName + " " + message.Message.From.LastName,
                    UserID   = message.Message.From.Id,
                    UserName = message.Message.From.Username
                }));
            }

            foreach (var user in ChatUsers)
            {
                if (user.UserID == message.Message.From.Id)       //Если UserID уже есть в коллекции , то ему добовляем новое сообщение.
                {
                    dispatcher.Invoke(() =>
                                      user.Messeges.Add(new UserMessege
                    {
                        ChatID    = message.Message.Chat.Id,
                        Date      = DateTime.Now,
                        Text      = message.Message.Text,
                        IsNew     = true,
                        MessageId = message.Message.MessageId
                    }));
                    user.NewMessage();          //Костыль что бы время в UI обновлялось.
                    IsNewUser = false;          //Раз пользователь найде то меняем флаг.
                    return;                     //Так как нашли пользователя которому надо добавить сообщение, то дальнейшие проверки бесмыслены
                }
            }

            if (IsNewUser)           //Если все же новый пользователь.
            {
                dispatcher.Invoke(() =>
                                  ChatUsers.Add(new TelegramBot.ChatUser
                {
                    Messeges = new ObservableCollection <UserMessege>(),
                    Name     = message.Message.From.FirstName + " " + message.Message.From.LastName,
                    UserID   = message.Message.From.Id,
                    UserName = message.Message.From.Username
                }));
                dispatcher.Invoke(() =>
                                  ChatUsers[ChatUsers.Count - 1].Messeges.Add(new UserMessege
                {
                    ChatID = message.Message.Chat.Id,
                    Date   = DateTime.Now,
                    Text   = message.Message.Text
                }));                                         //Добовляем ему сразу сообщение.
                ChatUsers[ChatUsers.Count - 1].NewMessage(); //Костыль что бы время в UI обновлялось.
            }
        }
Beispiel #2
0
        /// <summary>
        /// Прослушивание пользователя чата
        /// </summary>
        /// <param name="user">Пользователь чата</param>
        private void ListenUser(ChatUser user)
        {
            bool firstUser = true;

            while (user.IsOnline)
            {
                try
                {
                    if (user.Stream.DataAvailable)
                    {
                        byte[]     message    = user.RecieveMessage();
                        TcpMessage tcpMessage = new TcpMessage(message);
                        int        code       = tcpMessage.Code;
                        switch (code)
                        {
                        case CONNECT:
                            user.Ip       = tcpMessage.Ip;
                            user.Username = tcpMessage.Username;
                            ChatUsers.Add(user);
                            if (firstUser)
                            {
                                GetHistory(SEND_HISTORY, user);
                                firstUser = false;
                            }
                            break;

                        case MESSAGE:
                            ShowInChat(code, user.Username, tcpMessage.MessageText);
                            break;

                        case EXIT_USER:
                            user.Dispose();
                            ChatUsers.Remove(user);
                            ShowInChat(code, user.Username, tcpMessage.MessageText);
                            break;

                        case SEND_HISTORY:
                            GetHistory(SHOW_HISTORY, user);
                            break;

                        case SHOW_HISTORY:
                            ShowInChat(code, user.Username, tcpMessage.MessageText);
                            break;

                        default:
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
Beispiel #3
0
 public void AddChatUser(ChatUser user)
 {
     if (user != null && user.conn != null && !ChatUsers.ContainsKey(user.conn))
     {
         ChatUsers.Add(user.conn, user);
         MsgChatLoginSuccessFromServer msg = new MsgChatLoginSuccessFromServer();
         msg.userId = user.userId;
         msg.name   = user.name;
         user.conn.Send(MsgChatLoginSuccessFromServer.MsgId, msg);
     }
 }
Beispiel #4
0
        public ChatUser CreateChatUser(Models.Chat chat, ChatUserSetting chatUserSetting, long joinedAt)
        {
            var chatUser = new ChatUser()
            {
                Chat       = chat,
                User       = chatUserSetting.User,
                Address    = chatUserSetting.User.Address,
                Rank       = chatUserSetting.Rank,
                PrivateKey = chatUserSetting.PrivateKey,
                JoinedAt   = DateTimeOffset.FromUnixTimeMilliseconds(joinedAt).DateTime,
                CreatedAt  = DateTime.UtcNow,
            };

            ChatUsers.Add(chatUser);

            return(chatUser);
        }
Beispiel #5
0
        /// <summary>
        /// Приём UDP-пакетов от новых пользователей
        /// </summary>
        private void ListenUdpMessages()
        {
            const int REMOTE_UDP_PORT = 8501;
            const int LOCAL_UDP_PORT  = 8502;
            const int TCP_PORT        = 8503;

            aliveUdpTask = true;

            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse(IpAddress), LOCAL_UDP_PORT);
            UdpClient  udpReceiver   = new UdpClient(localEndPoint);

            while (aliveUdpTask)
            {
                try
                {
                    IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, REMOTE_UDP_PORT);
                    byte[]     message        = udpReceiver.Receive(ref remoteEndPoint);
                    UdpMessage receiveMessage = new UdpMessage(message);

                    // Устанавливаем подключение с новым пользователем
                    ChatUser newUser = new ChatUser(receiveMessage.Username, receiveMessage.Ip, TCP_PORT);
                    newUser.Connect();

                    // Отправляем новому пользователю своё имя
                    TcpMessage tcpMessage = new TcpMessage(CONNECT, IpAddress, Username);
                    newUser.SendMessage(tcpMessage);
                    ChatUsers.Add(newUser);

                    Task.Factory.StartNew(() => ListenUser(newUser));

                    context.Post(delegate(object state)
                    {
                        string datetime    = DateTime.Now.ToString();
                        string messageChat = string.Format("{0} {1} присоединился к чату\r\n", datetime, newUser.Username);
                        tbChat.AppendText(messageChat);
                    }, null);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            udpReceiver.Dispose();
        }
Beispiel #6
0
        private void GetOnlineListCallback(ResultInfo <IEnumerable <User> > res)
        {
            Observable.Start(() =>
            {
                foreach (var item in res.RData)
                {
                    if (!ChatUsers.Any(o => o.User.Name.Equals(item.Name)))
                    {
                        ChatUsers.Add(new ChatUser()
                        {
                            User = item
                        });
                        Loginer.CurrCC.DownloadAvatar(item.Id);
                    }
                }

                var users = this.ChatUsers.Where(o => !res.RData.Any(x => x.Id == o.User.Id)).ToList();
                foreach (var item in users)
                {
                    this.RemoveUser(item);
                }
            }, RxApp.MainThreadScheduler);
        }
Beispiel #7
0
 public void addUser(IChatUser newUser)
 {
     ChatUsers.Add(newUser);
 }