Example #1
0
        public async Task <List <User> > GetAllUsers()
        {
            var request  = new ConnectedUsers();
            var response = await router.Send <ConnectedUsers, ConnectedUsersList>(request, timeout);

            return(response.Users.Select(u => User.FromDTO(u)).ToList());
        }
Example #2
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);
        }
Example #3
0
        private void FigureOutConnectedClients()
        {
            try
            {
                List <ConnectedClient> clientlist = GetConnectedClients();
                ConnectedUsers.Clear();
                Connectedports.Clear();
                //int count = 0;
                foreach (ConnectedClient temp in clientlist)
                {
                    string user = temp.UserName;
                    this.ConnectedUsers.Add(user);
                    this.Connectedports.Add(temp.UrlAddress);
                }


                this.lbConnectedClients.Items.Clear();
                foreach (string client in this.ConnectedUsers)
                {
                    string display = (client == this.username ? "(ME) " : string.Empty) + client;

                    this.lbConnectedClients.Items.Add(display);
                }

                this.SetupSenderFactories();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Example #4
0
 public void Connect(int userid)
 {
     if (!ConnectedUsers.Contains(userid))
     {
         ConnectedUsers.Add(userid);
     }
 }
Example #5
0
 public ConnectedUsersList Handle(ConnectedUsers request)
 {
     return(new ConnectedUsersList(
                users
                .Select(u => u.ToDTO())
                .ToList()));
 }
Example #6
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;
            }
        }
 public static async Task Mute(SausageConnection user)
 {
     try
     {
         // user exists
         if (ConnectedUsers.Any(x => x.UserInfo.Guid == user.UserInfo.Guid))
         {
             PacketFormat packet = new PacketFormat(PacketOption.UserMuted)
             {
                 Guid    = user.UserInfo.Guid,
                 Content = "Place-holder reason"
             };
             user.UserInfo.IsMuted = true;
             await Log(packet);
         }
         else
         {
             MessageBox.Show("User not found", "Kick result");
         }
     }
     catch (ArgumentNullException e)
     {
         MessageBox.Show($"User returned null {e}", "Exception Caught");
     }
 }
        // TODO: logging
        public static async Task Ban(SausageConnection user)
        {
            try
            {
                if (!(user.Socket.Connected || MainSocket.Connected))
                {
                    return;
                }
                // user exists
                if (ConnectedUsers.Any(x => x.UserInfo.Guid == user.UserInfo.Guid))
                {
                    Blacklisted.Add(user.Ip.Address);
                    PacketFormat packet = new PacketFormat(PacketOption.UserBanned)
                    {
                        Guid    = user.UserInfo.Guid,
                        Content = "Place-holder reason"
                    };
                    Log(packet);
                    await Task.Delay(1000);

                    // delay for waiting on the client to recieve a message
                    user.Disconnect();
                    UiCtx.Send(x => ConnectedUsers.Remove(user));
                }
                else
                {
                    MessageBox.Show("User not found", "Ban result");
                }
            }
            catch (ArgumentNullException e)
            {
                MessageBox.Show($"User returned null {e}", "Exception Caught");
            }
        }
Example #9
0
        public async void Game()
        {
            var c = ConnectedUsers.FirstOrDefault(u => u.ID == Context.ConnectionId);

            if (c.Room.WaitingUsers.Count == 0 && c.Room.ReadyUsers.Count > 0 && c.Room.game == false)
            {
                c.Room.game = true;
                Random        rnd          = new Random();
                var           palabra      = palabras[rnd.Next(0, palabras.Length)];
                List <string> asignaciones = new List <string>();
                for (int i = 0; i < c.Room.ReadyUsers.Count; i++)
                {
                    asignaciones.Add(palabra);
                }
                asignaciones[rnd.Next(0, c.Room.ReadyUsers.Count)] = "Imbecil";
                await Clients.Group(c.Room.Name).SendAsync("empezando");

                Task.Delay(4000).Wait();
                int i2 = 0;
                foreach (var user in c.Room.ReadyUsers)
                {
                    string secreto = null;
                    secreto = asignaciones[i2];
                    i2++;
                    await Clients.Client(user.ID).SendAsync("recibeTarjeta", secreto);
                }
            }
        }
Example #10
0
        private void Disonnect()
        {
            if (_tcpClient.Connected)
            {
                try
                {
                    _formatter.Serialize(_networkStream, new Message()
                    {
                        ChatMessage = Username, Type = Message.MessageType.Disconnect, Username = Username
                    });
                }
                catch (IOException)
                {
                    //Client closed connection
                }

                _networkStream.Close();
                _tcpClient.Close();
            }

            IsConnected = false;
            _tcpClient  = new TcpClient();

            ConnectedUsers.Clear();
            ChatMessages = String.Empty;

            _worker.CancelAsync();
        }
Example #11
0
        public async Task <IActionResult> SendPrivateMessage(MessageDetail message)
        {
            if (!ConnectedUsers.Any(x => x.UserId.Equals(message.FromUserId)))
            {
                throw new InvalidOperationException(Resources.UserIsDisconnected);
            }

            var toUser = ConnectedUsers.FirstOrDefault(x => x.UserId == message.ToUserId);

            if (toUser is null)
            {
                throw new InvalidOperationException(Resources.UserIsDisconnected);
            }

            await Clients.AllExcept(Context.ConnectionId)
            .SendAsync(ChatHubMethods.UpdateUnreadMessages, message.FromUserId);

            // send a private message to listener user
            await Clients.Client(toUser.ConnectionId)
            .SendAsync(ChatHubMethods.ReceiveMessage, message);

            AddMessageInCache(message);

            return(new OkResult());
        }
Example #12
0
        private void GotMessageOnConnection(object sender, MessageEventArgs e)
        {
            string msgType     = e.msg.GetType().Name;
            string textToPrint = "";

            switch (msgType)
            {
            case "IdentificationMessage":
                textToPrint = "user " + ((IdentificationMessage)e.msg).SourceUser.Name + " got connected";
                UserContext UserContextInActiveConnectionsList = ConnectedUsers.Single(uc => uc.Connection == (Connection)sender);
                UserContextInActiveConnectionsList.User = ((IdentificationMessage)e.msg).SourceUser;

                IdentificationMessage retMsg = (IdentificationMessage)e.msg;
                retMsg.Status = true;
                ((Connection)sender).SendMessage(retMsg);
                if (NewClientLoginEv != null)
                {
                    NewClientLoginEv(sender, new UserContextEventArgs(UserContextInActiveConnectionsList));
                }
                break;

            case "TextMessage":
                foreach (var item in ConnectedUsers.Where(uc => uc.Connection != (Connection)sender))
                {
                    item.Connection.SendMessage(e.msg);
                }
                break;

            default:
                break;
            }
            Logger.Print("INFO: " + textToPrint);
        }
Example #13
0
        public override Task OnDisconnectedAsync(Exception exception)
        {
            ChatUser user;

            ConnectedUsers.TryRemove(Context.ConnectionId, out user);
            BroadcastOnlineUsers();
            return(base.OnDisconnectedAsync(exception));
        }
Example #14
0
        public void GetMessages(string projectId, string fromId, string toId)
        {
            if (!Guid.TryParse(projectId, out Guid result))
            {
                throw new InvalidOperationException(Resources.UnableToGetMessages);
            }

            if (!Guid.TryParse(fromId, out Guid fromUserGuid))
            {
                throw new InvalidOperationException(Resources.UnableToGetMessages);
            }

            if (!Guid.TryParse(toId, out Guid toUserGuid))
            {
                throw new InvalidOperationException(Resources.UnableToGetMessages);
            }

            var queryResult = new Dictionary <string, string>
            {
                { nameof(fromId), fromId },
                { nameof(toId), toId }
            };

            var messages = CallApiGET <List <MessageResponseDTO> >(uri: "api/messages/" + projectId + QueryString.Create(queryResult), isSecured: true);

            if (messages is null || messages.Count == 0)
            {
                return;
            }

            var userMessages = messages
                               .Select(x => new
            {
                fromUserId  = x.FromUserId,
                toUserId    = x.ToUserId,
                userName    = (x.FromUserId == fromUserGuid)? "Yo" : x.User.UserName,
                text        = x.Text,
                messageDate = x.MessageDate
            });

            Clients.Caller.SendAsync(ChatHubMethods.ReceiveConversation, userMessages).Wait();

            var toUser = ConnectedUsers.FirstOrDefault(x => x.Id == toUserGuid);

            if (toUser != null)
            {
                var user     = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
                var fromUser = new
                {
                    id           = user.Id,
                    userName     = user.UserName,
                    messageCount = 0
                };

                Clients.Client(toUser.ConnectionId)
                .SendAsync(ChatHubMethods.NewUserAvailable, fromUser).Wait();
            }
        }
Example #15
0
        public void RemoveUser(User user)
        {
            if (ConnectedUsers.Contains(user))
            {
                ConnectedUsers.Remove(user);

                AddMessage($"{user.Name} left the chat", ChatMessage.ChatMessageTypes.META);
            }
        }
Example #16
0
        public void MessageHandler(object sender, MessageArgs args)
        {
            var user = (User)ConnectedUsers.Find(p => p.webSocket == sender);

            if (args.frame.opCode == 1)
            {
                SendAll(user.Username + ": " + Encoding.UTF8.GetString(args.frame.message));
            }
        }
Example #17
0
        /// <summary>
        /// Occurs each time the event 'BlockReceived' raised!
        /// Event does: Blocking the user, or displays the user that has blocked from the server!
        /// </summary>
        /// <param name="message">The message information</param>
        private void OnBlockReceived(ChatMessage message)
        {
            int indexOfUser = ConnectedUsers.FindIndex(u => u.UserName == message.SendTo); // Gets the index of the user in the list

            if (indexOfUser > -1)
            {
                ConnectedUsers.RemoveAt(indexOfUser); // Removes the blocked user from the list
            }
        }
Example #18
0
        /// <summary>
        /// Occurs each time the event 'UserDisconnected' raised!
        /// Event does: Removes a user who disconnected from the list of connected users!
        /// </summary>
        /// <param name="user">The user disconnected</param>
        private void OnUserDisconnected(UserLogin user)
        {
            int indexOfUser = ConnectedUsers.FindIndex(u => u.UserName == user.UserName); // Gets the index of the user in the list

            if (indexOfUser > -1)
            {
                ConnectedUsers.RemoveAt(indexOfUser); // Removes the disconnected user from the list
            }
        }
Example #19
0
 private void ChannelOnUsersListReceived(object sender, EventArgs e)
 {
     ExecuteOnUiThread(() =>
     {
         var users = Channel.Users.Select(u => GetUserViewModel(u.User));
         ConnectedUsers.Clear();
         ConnectedUsers.AddRange(users);
     });
 }
 public void RemoveUser(string user, string reason)
 {
     if (UserExists(user))
     {
         Send(user, "close", reason);
         ConnectedUsers[user].Connected = false;
         ConnectedUsers.Remove(user);
     }
 }
Example #21
0
        private void ListenToIncommingConnections()
        {
            try
            {
                TcpListener = new TcpListener(ServerLocalIPEP);
                TcpListener.Start();
                while (ServerIsUp)
                {
                    Connection  NewConnection  = new Connection(TcpListener.AcceptTcpClient());
                    UserContext NewUserContext = new UserContext()
                    {
                        Connection = NewConnection, ID = ++ClientIDToken
                    };
                    ConnectedUsers.Add(NewUserContext);
                    NewUserContext.Connection.ConnectionClosedEv += OnClientConnectionClose;


                    if (NewClientConnectedEv != null)
                    {
                        NewClientConnectedEv(this, new ConnectionEventArgs(NewUserContext.Connection));
                    }
                    //Logger.Print("Server got new incomming connection from"+NewConnection.IPAddress +":"+NewConnection.Port);

                    // when new connection established (new client just connected) ,
                    // starts msg listening thread for that connection
                    if (NewUserContext.Connection.IsConnected)
                    {
                        NewUserContext.Connection.ListenForIncMessagesThread = new Thread(NewUserContext.Connection.WaitForMessages);
                        NewUserContext.Connection.ListenForIncMessagesThread.CurrentUICulture = new System.Globalization.CultureInfo("en-us");
                        NewUserContext.Connection.ListenForIncMessagesThread.IsBackground     = true;
                        NewUserContext.Connection.GotMessageEv += GotMessageOnConnection;
                        NewUserContext.Connection.ListenForIncMessagesThread.Name = "ServerListenMessagesOn" + NewUserContext.ID;
                        NewUserContext.Connection.ListenForIncMessagesThread.Start();
                        Logger.Print("INFO: new connection created, connID=" + NewUserContext.ID);
                    }
                    else
                    {
                        Logger.Print("Error: couldnt start listen msgs , tcp connection is not connected");
                    }
                }
            }
            catch (Exception e)
            {
                if (ServerIsUp)
                {
                    Logger.Print("Error: Got Exception [" + e.Message + "] while ServerIsUp=true");
                    // throw e;
                }
            }
            finally
            {
                TcpListener.Stop();
                ServerIsUp = false;
            }
        }
Example #22
0
 public HomeController(
     IHubContext <ChatHub> chatHub,
     ConnectedUsers users,
     ILogger <HomeController> logger,
     IConfiguration config)
 {
     this.ChatHub   = chatHub;
     ConnectedUsers = users;
     _logger        = logger;
     FreeGroups     = config.GetSection("App:Groups").Get <string[]>();
 }
 public void AddUser(string user, WebSockUser instance)
 {
     if (!UserExists(user))
     {
         ConnectedUsers.Add(user, instance);
     }
     else
     {
         Logger.LogError("cannot add user \"{0}\"; already added.", user);
     }
 }
Example #24
0
 private void ChannelOnUserJoined(object sender, IrcChannelUserEventArgs e)
 {
     ExecuteOnUiThread(() =>
     {
         var vm = ConnectedUsers.FirstOrDefault(vmu => vmu.User == e.ChannelUser.User);
         if (vm == null)
         {
             ConnectedUsers.Add(GetUserViewModel(e.ChannelUser.User));
         }
     });
 }
Example #25
0
 private void ChannelOnUserLeft(object sender, IrcChannelUserEventArgs e)
 {
     ExecuteOnUiThread(() =>
     {
         var vm = ConnectedUsers.FirstOrDefault(vmu => vmu.User == e.ChannelUser.User);
         if (vm != null)
         {
             ConnectedUsers.Remove(vm);
         }
     });
 }
Example #26
0
        public void Message(string toUserId, string message)
        {
            string fromUserID = Context.ConnectionId;
            var    toUser     = ConnectedUsers.FirstOrDefault(x => x.ID == toUserId);
            var    fromUser   = ConnectedUsers.FirstOrDefault(x => x.ID == fromUserID);

            if (fromUser != null && toUser != null)
            {
                Clients.Client(toUserId).message(fromUserID, fromUser.Name, message);
                Clients.Caller.message(toUserId, fromUser.Name, message);
            }
        }
Example #27
0
        public override void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
        {
            NebulaUser user = GetUser(peer.Id);

            if (user != null)
            {
                ConnectedUsers.Remove(user.Id);
            }
            UserDisconnected?.Invoke(this, new UserDisconnectedEventArgs(user, disconnectInfo));
            WriteLine($"Client Disconnected '{peer.EndPoint.Address}:{peer.EndPoint.Port}'. Reason: {disconnectInfo.Reason} ({disconnectInfo.SocketErrorCode})",
                      ConsoleColor.Red);
        }
Example #28
0
        public override void OnWebSocketOpen(WebSocket webSocket)
        {
            User user = new User(webSocket, GenerateName());

            webSocket.OnClose += (object sender, CloseArgs args) => {
                ConnectedUsers.RemoveAll(p => p.webSocket == webSocket);
                SendAll(user.Username + " disconnected");
            };
            webSocket.OnMessageReceived += MessageHandler;
            ConnectedUsers.Add(user);
            SendAll(user.Username + " connected!");
        }
Example #29
0
        public override Task OnDisconnectedAsync(Exception exception)
        {
            var user = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);

            if (user == null)
            {
                return(base.OnDisconnectedAsync(exception));
            }

            ConnectedUsers.Remove(user);
            return(base.OnDisconnectedAsync(exception));
        }
Example #30
0
        public async void Ready()
        {
            var c = ConnectedUsers.FirstOrDefault(u => u.ID == Context.ConnectionId);

            c.Room.ReadyUsers.Add(c);
            c.Room.WaitingUsers.Remove(c.Room.WaitingUsers.FirstOrDefault(u => u.ID == Context.ConnectionId));
            await Clients.Group(c.Room.Name).SendAsync("updateUsers", c.Room.WaitingUsers.Count, c.Room.WaitingUsers.Select(u => u.Usuario));

            await Clients.Group(c.Room.Name).SendAsync("updateReadyUsers", c.Room.WaitingUsers.Count + c.Room.ReadyUsers.Count, c.Room.ReadyUsers.Count, c.Room.ReadyUsers.Select(u => u.Usuario), c.Room.game);

            Game();
        }