GameHandler.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using YJMPD_UWP.Helpers.EventArgs;
  4. namespace YJMPD_UWP.Model
  5. {
  6. public class GameHandler
  7. {
  8. public delegate void OnStatusUpdateHandler(object sender, GameStatusUpdatedEventArgs e);
  9. public event OnStatusUpdateHandler OnStatusUpdate;
  10. public delegate void OnPlayersUpdateHandler(object sender, GamePlayersUpdatedEventArgs e);
  11. public event OnPlayersUpdateHandler OnPlayersUpdate;
  12. public enum GameStatus { STARTED, SEARCHING, WAITING, ENDED, STOPPED }
  13. public GameStatus Status { get; private set; }
  14. public Dictionary<string, double> Players { get; private set; }
  15. private void UpdateGameStatus(GameStatus status)
  16. {
  17. Status = status;
  18. if (OnStatusUpdate == null) return;
  19. OnStatusUpdate(this, new GameStatusUpdatedEventArgs(status));
  20. }
  21. private void UpdateGamePlayers(string username, double points)
  22. {
  23. if (OnPlayersUpdate == null) return;
  24. OnPlayersUpdate(this, new GamePlayersUpdatedEventArgs(username, points));
  25. }
  26. public GameHandler()
  27. {
  28. Players = new Dictionary<string, double>();
  29. Status = GameStatus.STOPPED;
  30. }
  31. public void AddPlayer(string username, double points)
  32. {
  33. Players.Add(username, points);
  34. UpdateGamePlayers(username, points);
  35. }
  36. public void UpdatePlayer(string username, double points)
  37. {
  38. Players.Remove(username);
  39. AddPlayer(username, points);
  40. }
  41. //Searching
  42. public async Task<bool> Search()
  43. {
  44. return await SearchGame();
  45. }
  46. private async Task<bool> SearchGame()
  47. {
  48. UpdateGameStatus(GameStatus.SEARCHING);
  49. await App.Network.SearchGame();
  50. return true;
  51. }
  52. //Starting and Stopping
  53. public async Task<bool> Start()
  54. {
  55. return await StartGame();
  56. }
  57. public async Task<bool> Stop()
  58. {
  59. return await StopGame();
  60. }
  61. private async Task<bool> StartGame()
  62. {
  63. //Do stuff
  64. UpdateGameStatus(GameStatus.STARTED);
  65. return true;
  66. }
  67. private async Task<bool> StopGame()
  68. {
  69. //Do stuff
  70. UpdateGameStatus(GameStatus.STOPPED);
  71. return true;
  72. }
  73. }
  74. }