ClientConnectingState.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Threading.Tasks;
  3. using Unity.Multiplayer.Samples.Utilities;
  4. using UnityEngine;
  5. //客户端正在连接
  6. public class ClientConnectingState : OnlineState
  7. {
  8. ConnectionMethodIP m_ConnectionMethod;
  9. //设置客户端账号、服务端IP、端口
  10. public ClientConnectingState Configure()
  11. {
  12. m_ConnectionMethod = m_ConnectionManager.ConnectionMethod;
  13. return this;
  14. }
  15. public override void Enter()
  16. {
  17. #pragma warning disable 4014
  18. ConnectClientAsync();
  19. #pragma warning restore 4014
  20. }
  21. public override void Exit()
  22. {
  23. }
  24. //客户端连接成功。切换到ClientConnectedState状态
  25. public override void OnClientConnected(ulong clientId)
  26. {
  27. MessageCenter.SendMessage(EventDefine.ConnectStatusEvent, ConnectStatus.Success);
  28. m_ConnectionManager.ChangeState(m_ConnectionManager.m_ClientConnected);
  29. }
  30. //StartingClient失败
  31. public override void OnClientDisconnect(ulong clientId)
  32. {
  33. StartingClientFailedAsync();
  34. }
  35. //StartingClient失败。切换到OfflineState状态
  36. protected void StartingClientFailedAsync()
  37. {
  38. MessageCenter.SendMessage(EventDefine.ConnectStatusEvent, ConnectStatus.StartClientFailed);
  39. m_ConnectionManager.ChangeState(m_ConnectionManager.m_Offline);
  40. }
  41. //与服务器断开连接。切换到DisconnectingWithReasonState状态
  42. public override void OnDisconnectReasonReceived(ConnectStatus disconnectReason)
  43. {
  44. MessageCenter.SendMessage(EventDefine.ConnectStatusEvent, disconnectReason);
  45. //MessageCenter.SendMessage(EventDefine.ClientDisConnectionEvent, disconnectReason);
  46. m_ConnectionManager.ChangeState(m_ConnectionManager.m_DisconnectingWithReason);
  47. }
  48. //开始连接
  49. internal async Task ConnectClientAsync()
  50. {
  51. try
  52. {
  53. //设置IP、端口
  54. await m_ConnectionMethod.SetupClientConnectionAsync();
  55. //StartClient开始连接
  56. if(!m_ConnectionManager.NetworkManager.StartClient())
  57. {
  58. throw new Exception("NetworkManager StartClient failed");
  59. }
  60. //注册自定义消息
  61. m_ConnectionManager.RegisterCustomMessages();
  62. }
  63. catch(Exception e)
  64. {
  65. Debug.LogError("Error connecting client, see following exception");
  66. Debug.LogException(e);
  67. StartingClientFailedAsync();
  68. throw;
  69. }
  70. }
  71. }