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()); }
//Обработка отправки сообщений 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); }
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()); } }
public void Connect(int userid) { if (!ConnectedUsers.Contains(userid)) { ConnectedUsers.Add(userid); } }
public ConnectedUsersList Handle(ConnectedUsers request) { return(new ConnectedUsersList( users .Select(u => u.ToDTO()) .ToList())); }
//Обработка отключения пользователя 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"); } }
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); } } }
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(); }
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()); }
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); }
public override Task OnDisconnectedAsync(Exception exception) { ChatUser user; ConnectedUsers.TryRemove(Context.ConnectionId, out user); BroadcastOnlineUsers(); return(base.OnDisconnectedAsync(exception)); }
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(); } }
public void RemoveUser(User user) { if (ConnectedUsers.Contains(user)) { ConnectedUsers.Remove(user); AddMessage($"{user.Name} left the chat", ChatMessage.ChatMessageTypes.META); } }
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)); } }
/// <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 } }
/// <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 } }
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); } }
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; } }
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); } }
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)); } }); }
private void ChannelOnUserLeft(object sender, IrcChannelUserEventArgs e) { ExecuteOnUiThread(() => { var vm = ConnectedUsers.FirstOrDefault(vmu => vmu.User == e.ChannelUser.User); if (vm != null) { ConnectedUsers.Remove(vm); } }); }
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); } }
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); }
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!"); }
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)); }
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(); }