//Обработка отправки сообщений 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; } }
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); } } }
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()); }
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(); } }
private void ChannelOnUserLeft(object sender, IrcChannelUserEventArgs e) { ExecuteOnUiThread(() => { var vm = ConnectedUsers.FirstOrDefault(vmu => vmu.User == e.ChannelUser.User); if (vm != null) { ConnectedUsers.Remove(vm); } }); }
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)); } }); }
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(); }
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 async Task End() { var c = ConnectedUsers.FirstOrDefault(u => u.ID == Context.ConnectionId); c.Room.game = false; await Clients.Group(c.Room.Name).SendAsync("solucion"); c.Room.WaitingUsers.InsertRange(c.Room.WaitingUsers.Count, c.Room.ReadyUsers); c.Room.ReadyUsers.Clear(); 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); }
public override Task OnDisconnectedAsync(Exception exception) { var user = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId); if (user == null) { return(base.OnDisconnectedAsync(exception)); } Clients.All.SendAsync(ChatHubMethods.UserNotAvailable, user.UserId); ConnectedUsers.Remove(user); return(base.OnDisconnectedAsync(exception)); }
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 situacion = situaciones[rnd.Next(0, situaciones.Length)]; var roles = situacion.Roles.ToList(); List <string> asignaciones = new List <string>(); var randomIndex = 0; for (int i = 0; i < c.Room.ReadyUsers.Count; i++) { if (roles.Count == 0) { asignaciones.Add("Espia"); } else { randomIndex = rnd.Next(0, roles.Count); //Choose a random object in the list asignaciones.Add(roles[randomIndex]); //add it to the new, random list roles.RemoveAt(randomIndex); //remove to avoid duplicates } } if (!asignaciones.Contains("Espia")) { asignaciones[rnd.Next(0, asignaciones.Count)] = "Espia"; } roles = asignaciones; for (int i = 0; i < c.Room.ReadyUsers.Count; i++) { randomIndex = rnd.Next(0, roles.Count); //Choose a random object in the list asignaciones.Add(roles[randomIndex]); //add it to the new, random list roles.RemoveAt(randomIndex); //remove to avoid duplicates } await Clients.Group(c.Room.Name).SendAsync("empezando"); Task.Delay(4000).Wait(); int i2 = 0; foreach (var user in c.Room.ReadyUsers) { string rol = null; rol = asignaciones[i2]; i2++; await Clients.Client(user.ID).SendAsync("recibeTarjeta", situacion.Nombre, rol); } } }
public async Task <IActionResult> RequestConversation(string fromId, string toId) { Guid fromUserId = Guid.Parse(fromId); Guid toUserId = Guid.Parse(toId); if (!ConnectedUsers.Any(x => x.UserId.Equals(fromUserId))) { throw new InvalidOperationException(Resources.UserIsDisconnected); } var toUser = ConnectedUsers.FirstOrDefault(x => x.UserId == toUserId && (x.IsOnHold || x.ConnectedWith == fromUserId)); if (toUser is null) { throw new InvalidOperationException(Resources.UserIsDisconnected); } if (toUser.IsOnHold) { toUser.IsOnHold = false; toUser.ConnectedWith = fromUserId; // set all cached messages to the requesting user CurrentMessages.Where(u => u.FromUserId == toUserId) .ToList() .ForEach(message => message.ToUserId = fromUserId); } // get all cached messages var cachedConversation = CurrentMessages .Where(u => (u.FromUserId == fromUserId && u.ToUserId == toUserId) || (u.FromUserId == toUserId && u.ToUserId == fromUserId)); // hide user to others await Clients.AllExcept(Context.ConnectionId) .SendAsync(ChatHubMethods.UserNotAvailable, toUserId); await Clients.Client(toUser.ConnectionId) .SendAsync(ChatHubMethods.ConnectWith, fromUserId); await Clients.Caller.SendAsync(ChatHubMethods.ReceiveConversation, cachedConversation); return(new OkResult()); }
public void Connect(string name) { Client c = new Client() { Id = Context.ConnectionId, NickName = name }; var result = ConnectedUsers.FirstOrDefault(u => u.NickName == c.NickName); if (result == null) { AddUser(c); // return true; } Clients.Client(Context.ConnectionId).onMessage("Seleccionar otro usuario"); }
public override async Task OnDisconnectedAsync(Exception exception) { var c = ConnectedUsers.FirstOrDefault(u => u.ID == Context.ConnectionId); c.Room.ReadyUsers.Remove(c); c.Room.WaitingUsers.Remove(c); if ((c.Room.WaitingUsers.Count + c.Room.ReadyUsers.Count) == 0) { OnlineRooms.Remove(c.Room); } Game(); 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); await Clients.Caller.SendAsync("close"); ConnectedUsers.Remove(c); }
public IActionResult SendPrivateMessage(MessageResponseDTO message) { var newMessage = CallApiPOST <MessageResponseDTO>(uri: "api/messages/", body: message, isSecured: true); var toUser = ConnectedUsers.FirstOrDefault(x => x.Id == message.ToUserId); if (toUser != null) { var sendMessage = new { fromUserId = newMessage.FromUserId, toUserId = newMessage.ToUserId, userName = newMessage.User.UserName, text = newMessage.Text, messageDate = newMessage.MessageDate }; Clients.Client(toUser.ConnectionId) .SendAsync(ChatHubMethods.ReceiveMessage, sendMessage).Wait(); Clients.Client(toUser.ConnectionId) .SendAsync(ChatHubMethods.UpdateUnreadMessages, sendMessage.fromUserId).Wait(); } return(new OkResult()); }
public IMinecraftUser GetUser(string username) => ConnectedUsers.FirstOrDefault(x => x.Username == username);
public LoginClient GetClientByUserID(int userID) { return(ConnectedUsers.FirstOrDefault(x => x.UserId == userID)); }