private static async Task AsyncMain() { SerializerService serializer = new SerializerService(); typeof(AuthLogonChallengeRequest).Assembly .GetTypes() .Where(t => typeof(AuthenticationServerPayload).IsAssignableFrom(t) || typeof(AuthenticationClientPayload).IsAssignableFrom(t)) .ToList() .ForEach(t => { serializer.RegisterType(t); }); serializer.Compile(); //The auth server is encryptionless and headerless IManagedNetworkClient <AuthenticationClientPayload, AuthenticationServerPayload> client = new DotNetTcpClientNetworkClient() .AddHeaderlessNetworkMessageReading(new FreecraftCoreGladNetSerializerAdapter(serializer)) .For <AuthenticationServerPayload, AuthenticationClientPayload, IAuthenticationPayload>() .Build() .AsManaged(new ConsoleOutLogger("ConsoleLogger", LogLevel.All, true, false, false, null)); if (!await client.ConnectAsync("127.0.0.1", 3724)) { Console.WriteLine("Failed to connect"); } await client.SendMessage(new AuthLogonChallengeRequest(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")); while (true) { var response = (await client.ReadMessageAsync()).Payload; Console.WriteLine("Recieved payload"); AuthenticationLogonChallengeResponseMessageHandler handler = new AuthenticationLogonChallengeResponseMessageHandler(); 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 { Console.WriteLine($"Recieved Payload of Type: {response.GetType().Name}"); } } }
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); } } }