Skip to content

Commit aff3ae3

Browse files
committed
Fixed sending of login packet to server if init response arrived before finishing initialization of Game instance
1 parent 1e0ab79 commit aff3ae3

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

Client.Logic/Game.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,30 +98,35 @@ private Game(ClientNetwork clientNetwork, IDataHolder dataHolder)
9898
Chat = new Chat(this);
9999
CombatLog = new CombatLog();
100100

101-
var packet = new Packet(CMSGPackets.Init);
102-
using (var rsa = new RsaEncryptor(Security.RSAKey.Modulus, Security.RSAKey.Exponent))
103-
{
104-
aes = new AesEncryptor(AesEncryptionType.Aes256Bits) { PaddingMode = PaddingMode.PKCS7 };
105-
network.Encryptor = aes;
106-
packet.Write(rsa.Encrypt(aes.Encryptors));
107-
}
108-
109-
SendPacket(packet, false);
101+
aes = new AesEncryptor(AesEncryptionType.Aes256Bits) { PaddingMode = PaddingMode.PKCS7 };
102+
network.Encryptor = aes;
110103
networkConnectionTask = Task.Run(UpdateAsync, tokenSource.Token);
111104
}
112105

113106
/// <summary>
114107
/// Creates new instance of game
115108
/// </summary>
116109
/// <param name="server">Server url</param>
110+
/// <param name="dataHolder">Data Holder</param>
111+
/// <param name="packetCallback">Callback for processed packets</param>
117112
/// <returns>Instance of game</returns>
118-
public static async Task<Game> CreateAsync(string server, IDataHolder dataHolder)
113+
public static async Task<Game> CreateAsync(string server, IDataHolder dataHolder, Action<UInt16> packetCallback)
119114
{
120115
var network = await ClientNetwork.CreateAsync(server, port);
121116
if (network == null)
122117
return null;
123118

124-
return new Game(network, dataHolder);
119+
var game = new Game(network, dataHolder);
120+
game.PacketProcessed += packetCallback;
121+
122+
var packet = new Packet(CMSGPackets.Init);
123+
using (var rsa = new RsaEncryptor(Security.RSAKey.Modulus, Security.RSAKey.Exponent))
124+
{
125+
packet.Write(rsa.Encrypt(game.aes.Encryptors));
126+
}
127+
128+
await game.SendPacketAsync(packet, false);
129+
return game;
125130
}
126131

127132
/// <summary>

Client.UI/ViewModels/User/LoginViewModel.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,14 @@ protected async Task<Game> UserOperation(Packet packet, Action<UInt16> callback)
5151
var game = App.GetGame();
5252
if (game == null)
5353
{
54-
game = await Game.CreateAsync(Server, new DataHolder());
54+
game = await Game.CreateAsync(Server, new DataHolder(), callback);
5555
if (game == null)
5656
{
5757
ErrorMessage = Texts.UnableToConnect;
5858
return null;
5959
}
6060

6161
game.MessageReceived += SetErrorMessage;
62-
game.PacketProcessed += callback;
6362
App.SetGame(game);
6463
}
6564

0 commit comments

Comments
 (0)