Beispiel #1
0
        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}");
                }
            }
        }
Beispiel #2
0
        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);
                }
            }
        }