예제 #1
0
        private static async Task HandlePayload(SharedConnectionRedirectPayload payload, IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> client)
        {
            Console.WriteLine($"Redirect: {payload.EndpointAddress}:{payload.EndpointerPort}");

            EncryptionKeyInitializer.Uninitialize();
            DecryptionKeyInitializer.Uninitialize();

            //Redirects to character the first time
            await client.ConnectAsync(payload.EndpointAddress, payload.EndpointerPort);
        }
예제 #2
0
        private static async Task HandlePayload(SharedLoginResponsePayload payload, IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> client)
        {
            Console.WriteLine($"Login Response: {payload.ResponseCode}");

            if (hasSecurityData && hasAskedForChars && !hasSelectedCharacter)
            {
                hasSelectedCharacter = true;
                await client.SendMessage(new CharacterCharacterSelectionRequestPayload(0, CharacterSelectionType.PlaySelection));

                Task.Factory.StartNew(async() =>
                {
                    await Task.Delay(3000);
                    DecryptionKeyInitializer.Uninitialize();
                    EncryptionKeyInitializer.Uninitialize();
                    await client.ConnectAsync("158.69.215.131", 12001);
                });

                return;
            }

            if (hasSecurityData && !hasAskedForChars)
            {
                hasAskedForChars = true;
                for (int i = 0; i < 4; i++)
                {
                    await client.SendMessage(new CharacterCharacterSelectionRequestPayload((byte)i, CharacterSelectionType.Preview));
                }

                Task.Factory.StartNew(async() =>
                {
                    await Task.Delay(6000);
                    await client.ConnectAsync("158.69.215.131", 12001);
                    DecryptionKeyInitializer.Uninitialize();
                    EncryptionKeyInitializer.Uninitialize();
                });
            }

            //We should recieve a 19 redirect after this
            //We should use the bytes from the response for future sessions
            ClientVerification = new ClientVerificationData(0x41, payload.SecurityData);            //.Take(32).Reverse().Concat(payload.SecurityData.Skip(32)).ToArray());
            hasSecurityData    = true;
            teamId             = payload.TeamId;
            Console.WriteLine($"Set 32bit key: {payload.TeamId}");
        }