private static async Task AsyncMain(IManagedNetworkClient <AuthenticationClientPayload, AuthenticationServerPayload> client) { try { if (!await client.ConnectAsync("127.0.0.1", 5050).ConfigureAwait(false)) { Console.WriteLine("Failed to connect"); } AuthChallengeData challenge = new AuthChallengeData(ProtocolVersion.ProtocolVersionTwo, GameType.WoW, ExpansionType.WrathOfTheLichKing, 3, 5, ClientBuild.Wotlk_3_3_5a, PlatformType.x86, OperatingSystemType.Win, LocaleType.enUS, IPAddress.Parse("127.0.0.1"), "Glader"); await client.SendMessage(new AuthLogonChallengeRequest(challenge)) .ConfigureAwait(false); } catch (Exception e) { Console.WriteLine($"Error: {e.Message}"); } while (true) { var response = (await client.ReadMessageAsync()).Payload; Console.WriteLine("Recieved payload"); AuthenticationLogonChallengeResponseMessageHandler handler = new AuthenticationLogonChallengeResponseMessageHandler(); AuthenticationLogonProofResponseMessageHandler proofHandler = new AuthenticationLogonProofResponseMessageHandler(); RealmListResponseMessageHandler realmListResponseHandler = new RealmListResponseMessageHandler(bytes => Serializer.Deserialize <RealmListContainer>(bytes)); if (response is AuthLogonChallengeResponse challengeResponse) { Console.WriteLine($"Response: Valid: {challengeResponse.isValid} Result: {challengeResponse.Result} SRP: {challengeResponse.Challenge}"); await handler.HandleMessage(new DefaultPeerMessageContext <AuthenticationClientPayload>(client, client, new PayloadInterceptMessageSendService <AuthenticationClientPayload>(client, client)), challengeResponse); } else if (response is AuthRealmListResponse realmListResponse) { await realmListResponseHandler.HandleMessage(new DefaultPeerMessageContext <AuthenticationClientPayload>(client, client, new PayloadInterceptMessageSendService <AuthenticationClientPayload>(client, client)), realmListResponse); } else if (response is AuthLogonProofResponse proofResponse) { await proofHandler.HandleMessage(new DefaultPeerMessageContext <AuthenticationClientPayload>(client, client, new PayloadInterceptMessageSendService <AuthenticationClientPayload>(client, client)), proofResponse); } } }
/// <inheritdoc /> public async Task HandleMessage(IPeerSessionMessageContext <AuthenticationServerPayload> context, AuthLogonChallengeRequest payload) { using (var repo = AccountRepository.Create()) { AuthChallengeData challenge = payload.Challenge; bool accountExists = await repo.DoesAccountExists(challenge.Identity) .ConfigureAwait(false); if (Logger.IsDebugEnabled) { Logger.Debug($"Account: {challenge.Identity} Exists: {accountExists} ConnectionId: {context.Details.ConnectionId}"); } //Depending on if it exists we build an appropriate response AuthLogonChallengeResponse response = accountExists ? await BuildSuccessResponse(await repo.GetAccount(challenge.Identity).ConfigureAwait(false), context.Details.ConnectionId) : BuildFailureResponse(); await context.PayloadSendService.SendMessage(response) .ConfigureAwait(false); } }