public NetworkClientPacketPayloadReaderWriterDecorator(TClientType decoratedClient, THeaderReaderWriterType headerReaderWriter, INetworkSerializationService serializer, IPacketHeaderFactory <TPayloadConstraintType> packetHeaderFactory, int payloadBufferSize = 30000)
        {
            if (decoratedClient == null)
            {
                throw new ArgumentNullException(nameof(decoratedClient));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }
            if (packetHeaderFactory == null)
            {
                throw new ArgumentNullException(nameof(packetHeaderFactory));
            }
            if (payloadBufferSize <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(payloadBufferSize));
            }

            DecoratedClient     = decoratedClient;
            Serializer          = serializer;
            PacketHeaderFactory = packetHeaderFactory;
            HeaderReaderWriter  = headerReaderWriter;

            //One of the lobby packets is 14,000 bytes. We may even need bigger.
            PacketPayloadReadBuffer = new byte[payloadBufferSize];             //TODO: Do we need a larger buffer for any packets?
        }
示例#2
0
        //We shouldn't expect the deserialize to provide always non-null values.
        //That is a serialization implementation detail.
        /// <summary>
        /// Attempts to deserialize to <typeparamref name="TTypeToDeserializeTo"/> from the provided <see cref="byte[]"/>.
        /// </summary>
        /// <typeparam name="TTypeToDeserializeTo"></typeparam>
        /// <param name="serializer"></param>
        /// <param name="data">Byte repsentation of <typeparamref name="TTypeToDeserializeTo"/>.</param>
        /// <returns>An instance of <typeparamref name="TTypeToDeserializeTo"/> or null if failed.</returns>
        public static TTypeToDeserializeTo Deserialize <TTypeToDeserializeTo>(this INetworkSerializationService serializer, byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            return(serializer.Deserialize <TTypeToDeserializeTo>(data, 0, data.Length));
        }
示例#3
0
 public HackyInstanceSharedClientData([NotNull] INetworkSerializationService serializerService,
                                      [JetBrains.Annotations.NotNull] MessageHandlerService <GameServerPacketPayload, GameClientPacketPayload> messageHandler,
                                      [JetBrains.Annotations.NotNull] IPeerMessageContextFactory messageContextFactory,
                                      [JetBrains.Annotations.NotNull] IConnectionService connectionService,
                                      [JetBrains.Annotations.NotNull] IPeerPayloadSendService <GameClientPacketPayload> sendService)
 {
     SerializerService     = serializerService ?? throw new ArgumentNullException(nameof(serializerService));
     MessageHandler        = messageHandler ?? throw new ArgumentNullException(nameof(messageHandler));
     MessageContextFactory = messageContextFactory ?? throw new ArgumentNullException(nameof(messageContextFactory));
     ConnectionService     = connectionService ?? throw new ArgumentNullException(nameof(connectionService));
     SendService           = sendService ?? throw new ArgumentNullException(nameof(sendService));
 }
示例#4
0
        public HeaderlessNetworkMessageClientBuilder(INetworkSerializationService serializer, TNetworkType client)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            Serializer = serializer;
            Client     = client;
        }
示例#5
0
        public Extended317UnmanagedNetworkClient(TClientType decoratedClient, INetworkSerializationService serializer, ILog logger, int payloadBufferSize = 30000)
        {
            if (payloadBufferSize <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(payloadBufferSize));
            }

            DecoratedClient = decoratedClient ?? throw new ArgumentNullException(nameof(decoratedClient));
            Serializer      = serializer ?? throw new ArgumentNullException(nameof(serializer));
            Logger          = logger ?? throw new ArgumentNullException(nameof(logger));

            //One of the lobby packets is 14,000 bytes. We may even need bigger.
            PacketPayloadReadBuffer = new byte[payloadBufferSize];             //TODO: Do we need a larger buffer for any packets?
        }
        /// <inheritdoc />
        public AuthRealmListRequestHandler([NotNull] IRepositoryServiceFactory <IAuthenticationRealmRepository> realmListService, [NotNull] ILog logger, INetworkSerializationService serializer)
        {
            if (realmListService == null)
            {
                throw new ArgumentNullException(nameof(realmListService));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            RealmListService = realmListService;
            Logger           = logger;
            Serializer       = serializer;
        }
示例#7
0
        public NetworkMessageClientBuilder(INetworkSerializationService serializer, TNetworkType client, THeaderReaderWriterType headerReaderWriter)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (headerReaderWriter == null)
            {
                throw new ArgumentNullException(nameof(headerReaderWriter));
            }

            Serializer         = serializer;
            Client             = client;
            HeaderReaderWriter = headerReaderWriter;
        }
示例#8
0
        /// <summary>
        /// </summary>
        /// <param name="decoratedClient">The client to decorate.</param>
        /// <param name="serializer"></param>
        /// <param name="headerSize"></param>
        public NetworkClientPacketHeaderReaderWriterDecorator(NetworkClientBase decoratedClient, INetworkSerializationService serializer, int headerSize)
        {
            if (decoratedClient == null)
            {
                throw new ArgumentNullException(nameof(decoratedClient));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }
            if (headerSize < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(headerSize));
            }

            //We need to support up to the maximum block
            PacketHeaderBuffer = new byte[headerSize];
            DecoratedClient    = decoratedClient;
            Serializer         = serializer;
        }
示例#9
0
        public WoWClientWriteServerReadProxyPacketPayloadReaderWriterDecorator(TClientType decoratedClient, INetworkSerializationService serializer, ICombinedSessionPacketCryptoService cryptoService, int payloadBufferSize = 30000)
        {
            if (decoratedClient == null)
            {
                throw new ArgumentNullException(nameof(decoratedClient));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }
            if (payloadBufferSize <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(payloadBufferSize));
            }

            DecoratedClient = decoratedClient;
            Serializer      = serializer;
            CryptoService   = cryptoService;

            //One of the lobby packets is 14,000 bytes. We may even need bigger.
            PacketPayloadReadBuffer = new byte[payloadBufferSize];             //TODO: Do we need a larger buffer for any packets?
        }
示例#10
0
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <AuthenticationServerPayload, AuthenticationClientPayload> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //TODO: Are any details actually valuable here?
            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Client connected to proxy.");
            }

            //The auth server is encryptionless and 'headerless' so we do not need to support that on the proxy for the auth server
            return(clientBase
                   .AddHeaderlessNetworkMessageReading(serializeService)
                   .For <AuthenticationClientPayload, AuthenticationServerPayload, IAuthenticationPayload>()
                   .Build()
                   .AsManagedSession(Logger));
        }
示例#11
0
        /// <summary>
        /// Enables header reading functionality to a client.
        /// </summary>
        /// <typeparam name="TNetworkClientType">The client type.</typeparam>
        /// <param name="client">The client to add header reading to.</param>
        /// <returns>A client that can read headers from the network.</returns>
        public static HeaderlessNetworkMessageClientBuilder <TNetworkClientType> AddHeaderlessNetworkMessageReading <TNetworkClientType>(this TNetworkClientType client, INetworkSerializationService serializer)
            where TNetworkClientType : NetworkClientBase
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            //New netmessage client builder
            return(new HeaderlessNetworkMessageClientBuilder <TNetworkClientType>(serializer, client));
        }
示例#12
0
 /// <summary>
 /// Implementer should build the <see cref="IManagedNetworkClient{TPayloadWriteType,TPayloadReadType}"/>
 /// for the outgoing client.
 /// </summary>
 /// <param name="clientBase">The client base to use.</param>
 /// <param name="serializeService">The serializer to use.</param>
 /// <returns>The built managed client.</returns>
 protected abstract IManagedNetworkClient <TPayloadReadType, TPayloadWriteType> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService);
 /// <inheritdoc />
 public NetworkSerializerServicePair([NotNull] INetworkSerializationService proxiedClientSerializer, [NotNull] INetworkSerializationService proxiedServerSerializer)
 {
     ProxiedClientSerializer = proxiedClientSerializer ?? throw new ArgumentNullException(nameof(proxiedClientSerializer));
     ProxiedServerSerializer = proxiedServerSerializer ?? throw new ArgumentNullException(nameof(proxiedServerSerializer));
 }
示例#14
0
        /// <summary>
        /// Enables header reading functionality to a client.
        /// </summary>
        /// <param name="client">The client to add header reading to.</param>
        /// <returns>A client that can read headers from the network.</returns>
        public static NetworkClientPacketHeaderReaderWriterDecorator <TPacketHeaderType> AddHeaderReading <TPacketHeaderType>(this NetworkClientBase client, INetworkSerializationService serializer, int headerSize)
            where TPacketHeaderType : IPacketHeader
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            return(new NetworkClientPacketHeaderReaderWriterDecorator <TPacketHeaderType>(client, serializer, headerSize));
        }
示例#15
0
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <GamePacketPayload, GamePacketPayload> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //TODO: Are any details actually valuable here?
            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Client connected to proxy.");
            }

            SRP6SessionKeyStore keyStore = ServiceContainer.Resolve <SRP6SessionKeyStore>();
            ICombinedSessionPacketCryptoService cryptoService = BuildIncomingPacketCryptoService(keyStore);

            var wowClientReadServerWrite = new WoWClientReadServerWriteProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>(clientBase, serializeService, cryptoService, Logger);

            return(new ManagedNetworkServerClient <WoWClientReadServerWriteProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>, GamePacketPayload, GamePacketPayload>(wowClientReadServerWrite, Logger));
        }
 public Test([NotNull] RsUnityClient client, [NotNull] INetworkSerializationService serializerService)
 {
     Client            = client ?? throw new ArgumentNullException(nameof(client));
     SerializerService = serializerService ?? throw new ArgumentNullException(nameof(serializerService));
 }
        /// <inheritdoc />
        protected override IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            //Copied from the test client project
            IManagedNetworkClient <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer> client = clientBase
                                                                                                        .AddCryptHandling(ServerEncryptionService, ServerDecryptionService)
                                                                                                        .AddBufferredWrite(4)
                                                                                                        .AddHeaderReading <PSOBBPacketHeader>(serializeService, 2)
                                                                                                        .AddNetworkMessageReading(serializeService)
                                                                                                        .For <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient, IPacketPayload>(new PSOBBPacketHeaderFactory())
                                                                                                        .AddReadBufferClearing()
                                                                                                        .Build()
                                                                                                        .AsManagedSession();

            return(client);
        }
        /// <inheritdoc />
        protected override IManagedNetworkServerClient <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient> BuildIncomingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            ResetCrypto();

            Logger.Info($"Client connecting to Proxy App with Listener: {this.ServerAddress.AddressEndpoint}:{this.ServerAddress.Port}");

            IManagedNetworkServerClient <PSOBBGamePacketPayloadServer, PSOBBGamePacketPayloadClient> session = clientBase
                                                                                                               .AddCryptHandling(ClientEncryptionService, ClientDecryptionService)
                                                                                                               .AddBufferredWrite(4)
                                                                                                               .AddHeaderReading <PSOBBPacketHeader>(serializeService, 2)
                                                                                                               .AddNetworkMessageReading(serializeService)
                                                                                                               .For <PSOBBGamePacketPayloadClient, PSOBBGamePacketPayloadServer, IPacketPayload>(new PSOBBPacketHeaderFactory())
                                                                                                               .AddReadBufferClearing()
                                                                                                               .Build()
                                                                                                               .AsManagedSession();

            return(session);
        }
 /// <inheritdoc />
 public DefaultManagedSessionFactory([NotNull] INetworkSerializationService serializer, [NotNull] ILog logger)
 {
     Serializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
     Logger     = logger ?? throw new ArgumentNullException(nameof(logger));
 }
示例#20
0
        /// <inheritdoc />
        protected override IManagedNetworkClient <GamePacketPayload, GamePacketPayload> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
        {
            SRP6SessionKeyStore keyStore = ServiceContainer.Resolve <SRP6SessionKeyStore>();
            ICombinedSessionPacketCryptoService cryptoService = BuildOutgoingPacketCryptoService(keyStore);

            var wowClientReadServerWrite = new WoWClientWriteServerReadProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>(clientBase, serializeService, cryptoService);

            return(new ManagedNetworkServerClient <WoWClientWriteServerReadProxyPacketPayloadReaderWriterDecorator <NetworkClientBase, GamePacketPayload, GamePacketPayload, IGamePacketPayload>, GamePacketPayload, GamePacketPayload>(wowClientReadServerWrite, Logger));
        }
示例#21
0
 /// <inheritdoc />
 public VanillaWoWClientReadServerWriteProxyPacketPayloadReaderWriterDecorator(TClientType decoratedClient, INetworkSerializationService serializer, ICombinedSessionPacketCryptoService cryptoService, int payloadBufferSize = 30000)
     : base(decoratedClient, serializer, cryptoService, payloadBufferSize)
 {
 }
示例#22
0
 /// <inheritdoc />
 protected override IManagedNetworkClient <AuthenticationClientPayload, AuthenticationServerPayload> BuildOutgoingSessionManagedClient(NetworkClientBase clientBase, INetworkSerializationService serializeService)
 {
     //We need to create an actual client to the server too.
     return(clientBase
            .AddHeaderlessNetworkMessageReading(serializeService)
            .For <AuthenticationServerPayload, AuthenticationClientPayload, IAuthenticationPayload>()
            .Build()
            .AsManagedSession(Logger));
 }