You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.8 KiB

5 years ago
5 years ago
5 years ago
5 years ago
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Networking;
  5. namespace Multiplayer
  6. {
  7. public class LoginManager
  8. {
  9. private ServerManager ServerManager;
  10. public LoginManager(ServerManager ServerManager)
  11. {
  12. this.ServerManager = ServerManager;
  13. RegisterHandles();
  14. }
  15. public void RegisterHandles()
  16. {
  17. ServerManager.Server.RegisterHandler(LoginMsgID.Name, OnPlayerLogin);
  18. ServerManager.Server.RegisterHandler(MsgType.Connect, OnConnect);
  19. ServerManager.Server.RegisterHandler(MsgType.Disconnect, OnDisconnect);
  20. ServerManager.Server.RegisterHandler(PlayerMsgID.GameStart, ClientStartsGame);
  21. ServerManager.Server.RegisterHandler(PlayerMsgID.Lobby, GoToLobby);
  22. }
  23. //Called when a player logs in
  24. public void OnPlayerLogin(NetworkMessage msg)
  25. {
  26. StringMsg stringMsg;
  27. if (!Utility.ReadMessage<StringMsg>(msg, out stringMsg))
  28. return;
  29. Debug.Log("Player login: " + stringMsg.String);
  30. if (ServerManager.AllPlayers.ContainsKey(stringMsg.ID))
  31. {
  32. Debug.Log(stringMsg.String + " already logged in");
  33. return;
  34. }
  35. Player newPlayer = new Player(msg.conn, stringMsg.String);
  36. ServerManager.AllPlayers.Add(newPlayer.ID, newPlayer);
  37. }
  38. private void OnConnect(NetworkMessage msg)
  39. {
  40. Debug.Log("New Connection: \n Address: " + msg.conn.address + "\n ID: " + msg.conn.connectionId);
  41. msg.conn.Send(LoginMsgID.QueryName, new PlayerMsg((byte)msg.conn.connectionId));
  42. }
  43. private void OnDisconnect(NetworkMessage msg)
  44. {
  45. if (ServerManager.AllPlayers.ContainsKey(msg.conn.connectionId))
  46. {
  47. Debug.Log(ServerManager.AllPlayers[msg.conn.connectionId].Name + "has disconnected.");
  48. ServerManager.AllPlayers.Remove(msg.conn.connectionId);
  49. }
  50. else
  51. Debug.Log("Unkown player has disconnected.");
  52. }
  53. private void ClientStartsGame(NetworkMessage msg)
  54. {
  55. StartGame();
  56. }
  57. private void StartGame()
  58. {
  59. foreach (Player player in ServerManager.AllPlayers.Values)
  60. {
  61. player.Connection.Send(LoginMsgID.Seed, new longMsg(player.ID, ServerManager.Seed));
  62. player.Connection.Send(PlayerMsgID.GameStart, new PlayerMsg(player.ID));
  63. }
  64. }
  65. private void GoToLobby(NetworkMessage msg)
  66. {
  67. foreach(Player player in ServerManager.AllPlayers.Values)
  68. player.Connection.Send(PlayerMsgID.Lobby, new PlayerMsg(player.ID));
  69. }
  70. }
  71. }