/// <summary> /// Envoie un mess /// </summary> /// <param name="player"></param> /// <param name="room"></param> /// <param name="message"></param> /// <returns>True si envoyé avec succès.</returns> public bool SendGlobalMessage(Guid player, string message) { try { using (MilleBornesEntities context = new MilleBornesEntities()) { int userId = context.LoggedInUser.Where(p => p.Token == player) .ToList().First().UserId; Message msg = new Message(); msg.Content = message; msg.Date = DateTime.UtcNow; msg.UserId = userId; msg.Type = MessageType.GLOBAL; context.Message.Add(msg); context.SaveChanges(); } return true; } catch { return false; } }
/// <summary> /// Parse la commande demandée par l'utilisateur dans le message. /// </summary> /// <param name="input"></param> /// <returns>True si succès, false autrement</returns> /// o /teams => affiche les équipes. /// o /status => affiche le status des gens (prêt, pas prêt, j'y vais! :^) /// o /validate => Valide la composition et les équipes et retourne ce qui ne va pas! /// o /kick [name]; [reason] => Kick le joueur "name" avec la raison "reason". private bool GetCommandOuput(Guid player, Guid room, string input) { try { using (MilleBornesEntities context = new MilleBornesEntities()) { User caller = context.LoggedInUser.First(p => p.Token == player).User; var lstPlayers = context.PlayerRoomState .Where(p => p.Room.Token == room) .OrderBy(o => o.Team); string output = ""; if (input.StartsWith("/teams")) { output = "**" + caller.Name + " a demandé à afficher les équipes.**\r\n"; foreach (PlayerRoomState prs in lstPlayers) output += " - [" + prs.Team.ToString() + "] " + prs.User.Name + "\r\n"; } else if (input.StartsWith("/status")) { output = "**" + caller.Name + " a demandé à afficher les status:**\r\n"; foreach (PlayerRoomState prs in lstPlayers) output += " - [" + (prs.IsReady ? "Prêt" : "Pas prêt") + "] " + prs.User.Name + "\r\n"; } else if (input.StartsWith("/validate")) { // Les équipes sont-elles balancées? // Les joueurs sont-ils prêts? if (lstPlayers.Where(p => p.IsReady == false).Count() > 0) output += " - Certains joueurs ne sont pas prêts. (/status)\r\n"; byte t1 = 0; byte t2 = 0; byte t3 = 0; foreach (var user in lstPlayers) { if (user.Team == 0) t1++; else if (user.Team == 1) t2++; else t3++; } // On regarde si il y a moins de 2 équipes if (t1 == 0 && ( (t2 == 0 || t3 == 0) || (t1 == 0 || t3 == 0) )) { output += " - Il y a moins de 2 équipes! (/teams)\r\n"; } // Si 2 équipe, et la troisième vide. if ((t1 != t2 && t3 == 0) || (t2 != t3 && t1 == 0) || (t3 != t1 && t2 == 0)) { output += " - Équipes non équilibrées! (/teams)\r\n"; } // Si aucune erreur if (output == "") { output += "**Validation (/validate): Tous les éléments sont prêt pour commencer une belle partie!**"; } else { output = "**Validation (/validate) échouée.**\r\nRaison:\r\n" + output; } } else if (input.StartsWith("/kick ") && input.Length > "/kick ".Length + 1 && input.Contains(";")) { // Si le caller est le master. if (context.Room.First(p => p.Token == room).MasterUserId == caller.UserId) { string kName = input.Substring("/kick ".Length, input.IndexOf(';') - "/kick ".Length); string reason = input.Substring(input.IndexOf(';') + 1); Guid pId = context.LoggedInUser.First(p => p.User.Name == kName).Token; LeaveRoom(pId, room); output = "**Le joueur " + kName + " a été kické de la salle.**\r\nRaison: " + reason; } else { output = "**Avertissement. Seul le maître peut kicker un joueur.**"; } } else { return false; } if (output.Length == 0) return true; Room r = context.Room.First(p => p.Token == room); Message msg = new Message(); msg.Content = output; msg.Date = DateTime.UtcNow; msg.Type = MessageType.ROOM; // 1== room. msg.UserId = 5; // sys msg.Room.Add(r); context.Message.Add(msg); context.SaveChanges(); return true; } } catch { } return false; }