RPGClient.Connect.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using DeepCore.FuckPomeloClient;
  2. using DeepCore.IO;
  3. using DeepMMO.Data;
  4. using DeepMMO.Protocol.Client;
  5. using System;
  6. namespace DeepMMO.Client
  7. {
  8. public partial class RPGClient
  9. {
  10. public ClientEnterServerRequest last_EnterServerRequest { get; private set; }
  11. public ClientEnterServerResponse last_EnterServerResponse { get; private set; }
  12. public ClientEnterGameResponse last_EnterGameResponse { get; private set; }
  13. public ClientRoleData LastRoleData
  14. {
  15. get { return (last_EnterGameResponse != null) ? last_EnterGameResponse.s2c_role : null; }
  16. }
  17. public string RoleName
  18. {
  19. get { var data = LastRoleData; return data == null ? "" : data.name; }
  20. }
  21. public string RoleUUID
  22. {
  23. get { var data = LastRoleData; return data == null ? "" : data.uuid; }
  24. }
  25. public string SceneUUID
  26. {
  27. get { var battle = current_battle; return battle == null ? "" : battle.ZoneUUID; }
  28. }
  29. public DeepCore.GameData.Zone.ZoneEditor.SceneData SceneData
  30. {
  31. get { var battle = current_battle; return battle == null ? null : battle.Layer.Data; }
  32. }
  33. protected virtual void Connect_Init()
  34. {
  35. this.game_client.OnConnected += Connect_OnConnected;
  36. this.game_client.OnDisconnected += Connect_OnDisconnected;
  37. this.game_client.OnRequestEnd += Game_client_OnRequestEnd;
  38. }
  39. public virtual void Connect_Connect(Action<ClientEnterServerResponse> callback)
  40. {
  41. this.last_EnterServerRequest = new ClientEnterServerRequest()
  42. {
  43. c2s_account = last_EnterGateResponse.s2c_accountUUID,
  44. c2s_gate_token = last_EnterGateResponse.s2c_connectToken,
  45. c2s_login_token = last_EnterGateResponse.s2c_lastLoginToken,
  46. c2s_session_token = last_EnterServerResponse != null ? last_EnterServerResponse.s2c_session_token : null,
  47. c2s_time = DateTime.Now,
  48. c2s_clientInfo = clientInfo,
  49. };
  50. if (this.last_EnterServerRequest.c2s_clientInfo != null)
  51. {
  52. this.last_EnterServerRequest.c2s_clientInfo.platformAcount = last_EnterGateResponse.s2c_platformAccount;
  53. }
  54. if (this.game_client.IsConnected)
  55. {
  56. this.game_client.Disconnect();
  57. }
  58. var host = last_EnterGateResponse.s2c_connectHost;
  59. var port = last_EnterGateResponse.s2c_connectPort;
  60. this.game_client.Connect(host, port, this.ConnectTimeOut, last_EnterServerRequest, response =>
  61. {
  62. // game_client.Request<ClientPong>(new ClientPing(), (s, a) => { });
  63. callback(response as ClientEnterServerResponse);
  64. });
  65. }
  66. private void Connect_OnConnected(object obj, ISerializable token)
  67. {
  68. this.last_EnterServerResponse = token as ClientEnterServerResponse;
  69. OnGameClientConnected(obj, token);
  70. if (event_OnGameConnected != null) event_OnGameConnected(game_client, last_EnterServerResponse);
  71. }
  72. private void Connect_OnDisconnected(CloseReason reason, string err)
  73. {
  74. OnGameClientDisconnected(reason, err);
  75. if (event_OnGameDisconnected != null) event_OnGameDisconnected(game_client, reason);
  76. }
  77. private void Game_client_OnRequestEnd(string route, PomeloException error, ISerializable response, object option)
  78. {
  79. if (response is ClientEnterGameResponse && ((ClientEnterGameResponse)response).IsSuccess)
  80. {
  81. last_EnterGameResponse = response as ClientEnterGameResponse;
  82. OnGameClientEntered(last_EnterGameResponse);
  83. if (event_OnGameEntered != null) event_OnGameEntered(game_client, last_EnterGameResponse);
  84. }
  85. }
  86. protected virtual void Connect_Disposing()
  87. {
  88. game_client.Dispose();
  89. event_OnGameConnected = null;
  90. event_OnGameDisconnected = null;
  91. }
  92. private Action<PomeloClient, ClientEnterServerResponse> event_OnGameConnected;
  93. private Action<PomeloClient, ClientEnterGameResponse> event_OnGameEntered;
  94. private Action<PomeloClient, CloseReason> event_OnGameDisconnected;
  95. public event Action<PomeloClient, ClientEnterServerResponse> OnGameConnected { add { event_OnGameConnected += value; } remove { event_OnGameConnected -= value; } }
  96. public event Action<PomeloClient, ClientEnterGameResponse> OnGameEntered { add { event_OnGameEntered += value; } remove { event_OnGameEntered -= value; } }
  97. public event Action<PomeloClient, CloseReason> OnGameDisconnected { add { event_OnGameDisconnected += value; } remove { event_OnGameDisconnected -= value; } }
  98. }
  99. }