/// <inheritdoc />
        public AuthenticationServerApplicationBase([NotNull] NetworkAddressInfo serverAddress, [NotNull] ILog logger)
            : base(serverAddress)
        {
            if (serverAddress == null)
            {
                throw new ArgumentNullException(nameof(serverAddress));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            Logger           = logger;
            Serializer       = new FreecraftCoreGladNetSerializerAdapter(CreateSerializer());
            ServiceContainer = BuildServiceContainer();
        }
Exemplo n.º 2
0
        private async Task InitializeNetworkingClient()
        {
            ContainerBuilder builder = new ContainerBuilder();

            EncryptionLazyWithoutKeyDecorator <uint> encrypt     = new EncryptionLazyWithoutKeyDecorator <uint>(val => new PatchServerCryptoProvider(PatchEncryptionKeyFactory.Create(val)), 4);
            EncryptionLazyWithoutKeyDecorator <uint> decrypt     = new EncryptionLazyWithoutKeyDecorator <uint>(val => new PatchServerCryptoProvider(PatchEncryptionKeyFactory.Create(val)), 4);
            IFullCryptoInitializationService <uint>  intializers = new SeperateAggregateCryptoInitializationService <uint>(encrypt, decrypt);

            builder.RegisterInstance(intializers)
            .As <IFullCryptoInitializationService <uint> >();

            INetworkSerializationService serializerService = new FreecraftCoreGladNetSerializerAdapter(CreateSerializerService());

            //Configurs and builds the clients without all the
            //relevant decorators
            IManagedNetworkClient <PSOBBPatchPacketPayloadClient, PSOBBPatchPacketPayloadServer> client = new DotNetTcpClientNetworkClient()
                                                                                                          .AddCryptHandling(encrypt, decrypt)
                                                                                                          .AddHeaderReading <PSOBBPacketHeader>(serializerService, 2)
                                                                                                          .AddNetworkMessageReading(serializerService)
                                                                                                          .For <PSOBBPatchPacketPayloadServer, PSOBBPatchPacketPayloadClient, IPacketPayload>(null)
                                                                                                          .AddReadBufferClearing()
                                                                                                          .Build()
                                                                                                          .AsManaged();

            builder.RegisterInstance(client)
            .As <IManagedNetworkClient <PSOBBPatchPacketPayloadClient, PSOBBPatchPacketPayloadServer> >();

            //Patch welcome message
            builder.RegisterHandler <PatchWelcomeMessageHandler, PatchingWelcomePayload>();
            builder.RegisterHandler <PatchingLoginReadyMessageHandler, PatchingReadyForLoginRequestPayload>();
            builder.RegisterHandler <PatchingRedirectionMessageHandler, PatchingRedirectPayload>();
            builder.RegisterHandler <PatchingInfoDoneMessageHandler, PatchingInfoRequestDonePayload>(async h =>
            {
                await Dispatcher.InvokeAsync(() => PlayButton.DataContext = h);
            });
            builder.RegisterHandler <PatchMessageMessageHandler, PatchingMessagePayload>(async h =>
            {
                await Dispatcher.InvokeAsync(() => PatchNotesData.DataContext = h);
            });

            IContainer container = builder.Build();

            IEnumerable <IPeerMessageHandler <PSOBBPatchPacketPayloadServer, PSOBBPatchPacketPayloadClient> > Handlers =
                container.Resolve <IEnumerable <IPeerMessageHandler <PSOBBPatchPacketPayloadServer, PSOBBPatchPacketPayloadClient> > >();

            IPeerMessageContextFactory MessageContextFactory = new DefaultMessageContextFactory();

            await client.ConnectAsync("158.69.215.131", 11000);

            while (client.isConnected)
            {
                NetworkIncomingMessage <PSOBBPatchPacketPayloadServer> message = await client.ReadMessageAsync();

                Console.WriteLine($"Recieved {message.Payload?.GetType().Name}");

                foreach (var h in Handlers)
                {
                    //TODO: Fix this and enable request service
                    if (await h.TryHandleMessage(MessageContextFactory.Create(client, client, null), message))
                    {
                        break;
                    }
                }
            }
        }