示例#1
0
        public void Test_Can_Serializer_MovementPacket_With_PathMovementData()
        {
            //arrange
            Unity3DProtobufPayloadRegister payloadRegister = new Unity3DProtobufPayloadRegister();

            payloadRegister.RegisterDefaults();
            payloadRegister.Register();
            GladNet.ProtobufNetGladNetSerializerAdapter gladnetProtobuf = new ProtobufNetGladNetSerializerAdapter(PrefixStyle.Fixed32);

            //act
            MovementDataUpdateEventPayload payload = new MovementDataUpdateEventPayload(new EntityAssociatedData <IMovementData>[]
            {
                new EntityAssociatedData <IMovementData>(new NetworkEntityGuid(55), new PathBasedMovementData(new Vector3[]
                {
                    new Vector3(1, 2, 3),
                    new Vector3(2, 3, 4)
                }, 55)),
            });

            byte[] serialize = gladnetProtobuf.Serialize(payload);

            //assert
            Assert.NotNull(serialize);
            Assert.IsNotEmpty(serialize);
        }
示例#2
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            //Register the serialization models.
            Unity3DProtobufPayloadRegister unityProtobufRegisteration = new Unity3DProtobufPayloadRegister();

            unityProtobufRegisteration.RegisterDefaults();
            unityProtobufRegisteration.Register();

            builder.RegisterType <ProtobufNetGladNetSerializerAdapter>()
            .AsSelf()
            .AsImplementedInterfaces()
            .SingleInstance();
        }
示例#3
0
        static async Task Main(string[] args)
        {
            ProtobufNetGladNetSerializerAdapter serializer = new ProtobufNetGladNetSerializerAdapter();

            Unity3DProtobufPayloadRegister payloadRegister = new Unity3DProtobufPayloadRegister();

            payloadRegister.RegisterDefaults();
            payloadRegister.Register();

            var client = new GladMMOUnmanagedNetworkClient <DotNetTcpClientNetworkClient, GameServerPacketPayload,
                                                            GameClientPacketPayload, IGamePacketPayload>(new DotNetTcpClientNetworkClient(), serializer, new ConsoleLogger(LogLevel.All))
                         .AsManaged();

            await client.ConnectAsync(IPAddress.Parse("72.190.177.214"), 5006);

            Thread.Sleep(3000);

            Console.WriteLine("Enter Character ID for test:");

            int characterId = int.Parse(Console.ReadLine());

            await client.SendMessage(new ClientSessionClaimRequestPayload("Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjYyN0YyQUFDMTZERTlENjNDMkY3NDQyQzk1OUFBNjEyQjIyOTlENDciLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiIyNyIsIm5hbWUiOiJUZXN0UGxheWZhYiIsInBmaWQiOiJEMTdENUI1RDY5RTY3QTM2IiwidG9rZW5fdXNhZ2UiOiJhY2Nlc3NfdG9rZW4iLCJqdGkiOiIyMDM2Zjg1MC04ODY5LTQ4YzUtOWRkOS0xYWI4MzIzZjBkOTkiLCJzY29wZSI6Im9wZW5pZCIsImF1ZCI6ImF1dGgtc2VydmVyIiwiYXpwIjoiVlJHdWFyZGlhbnNBdXRoZW50aWNhdGlvbiIsIm5iZiI6MTU1OTYzNzkzMywiZXhwIjoxNTU5NjQxNTMzLCJpYXQiOjE1NTk2Mzc5MzMsImlzcyI6Imh0dHBzOi8vYXV0aC52cmd1YXJkaWFucy5uZXQvIn0.oWlUhM3JMI1jC6Irh8lUeTmzcIIl2TJfgps0dHSshS6-TcJsL37u3xP_xXE2x0FH3HkXbAPyCL2hYr7KdSnCATh1G1Ar9vqt3XY0HWw7lOCovmAYjPHPgaHZXGnlk6P35A4bpCK-gLPi4xTW6rHYa1SJt_oeNQfFuElaUTR1cj-TajqHCV6P3xb3cEcsAD4Z4Pye0x4RUANN6NKpMvc5c_GPfnoRDpPFQwM7e8616vPBoN2vR7k9pnvsaJPBdnlZrMA8fVmvigO4ARoyGMJNkgsVonF7Oyr1LfLJu47tuqEqzKL9pRkOFYvUyCHniImut6o0JMX5t2LWwA-GOhiRmzCLuiVV0GMHQLFRkZ7h3lw4lXC6-nbq-k9YQKbj3jDM8uLyQv0VdxJjfF28DIAs4Eo_5A5r6R48p0-opiU0SVLPK-IfNWCzl_jFXCpOq0otoKVx-lyl89eyMYATny4tr1qHT2FG6Y8Pdm8skz13iZltAivy-I6W5RbeZ7COgwtaHmcwqTOY7kpFAWZ0rylFTDbKL7K-Kf7QMNQfUw3yP8KOWk4KL6Wa9EFFkBzwcxFKX-fdVg08xTBYZWj5GuCU_gWCTYBviiBbwCC4H2yQcJ9gLvW6tVRDCPfbpZiuMU8FrUk_JflQoy-QXUV1L-CZofra-uUGmHmLya5gULbR6qI", characterId));

            int packetCount = 0;

            try
            {
                while (true)
                {
                    NetworkIncomingMessage <GameServerPacketPayload> message = await client.ReadMessageAsync()
                                                                               .ConfigureAwaitFalse();

                    Console.WriteLine($"\n#{packetCount} - Recieved Message Type: {message.Payload.GetType().Name}");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
示例#4
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            //https://stackoverflow.com/questions/4926676/mono-https-webrequest-fails-with-the-authentication-or-decryption-has-failed
            ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.CheckCertificateRevocationList = false;

            //TODO: Extract to seperate module like the client.
            //Register the serialization models.
            Unity3DProtobufPayloadRegister unityProtobufRegisteration = new Unity3DProtobufPayloadRegister();

            unityProtobufRegisteration.RegisterDefaults();
            unityProtobufRegisteration.Register();

            //Set the sync context
            UnityAsyncHelper.InitializeSyncContext();

            Application.targetFrameRate = 10;
            QualitySettings.vSyncCount  = 0;

            HandleConfigurableDependencies(builder);

            //AuthToken
            //ZoneServerAuthenticationTokenRepository: IReadonlyAuthTokenRepository
            builder.RegisterType <ZoneServerAuthenticationTokenRepository>()
            .As <IReadonlyAuthTokenRepository>()
            .As <IAuthTokenRepository>()
            .SingleInstance();

            builder.RegisterType <ProtobufNetGladNetSerializerAdapter>()
            .As <INetworkSerializationService>()
            .SingleInstance();

            builder.RegisterType <ZoneServerDefaultRequestHandler>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.RegisterInstance(new UnityLogger(LogLevel.All))
            .As <ILog>();

            builder.RegisterType <MessageHandlerService <GameClientPacketPayload, GameServerPacketPayload, IPeerSessionMessageContext <GameServerPacketPayload> > >()
            .As <MessageHandlerService <GameClientPacketPayload, GameServerPacketPayload, IPeerSessionMessageContext <GameServerPacketPayload> > >()
            .SingleInstance();

            builder.RegisterType <ZoneServerApplicationBase>()
            .SingleInstance()
            .AsSelf();

            RegisterEntityMappableCollections(builder);

            //TODO: We should automate the registeration of message senders
            builder.RegisterType <VisibilityChangeMessageSender>()
            .AsImplementedInterfaces()
            .AsSelf();

            builder.RegisterType <DefaultGameObjectToEntityMappable>()
            .As <IReadonlyGameObjectToEntityMappable>()
            .As <IGameObjectToEntityMappable>()
            .SingleInstance();

            RegisterPlayerFactoryServices(builder);

            builder.RegisterType <GenericMessageSender <PlayerSelfSpawnEventPayload> >()
            .AsSelf()
            .AsImplementedInterfaces();

            builder.RegisterType <DefaultManagedSessionFactory>()
            .AsImplementedInterfaces();

            //TODO: Extract this into a handlers registrar

            //This is for mapping connection IDs to the main controlled EntityGuid.
            builder.RegisterInstance(new ConnectionEntityMap())
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.RegisterType <PlayerEntityGuidEnumerable>()
            .As <IPlayerEntityGuidEnumerable>()
            .AsSelf();

            builder.RegisterType <MovementUpdateMessageSender>()
            .As <INetworkMessageSender <EntityMovementMessageContext> >()
            .AsSelf();

            //Keep this one here, zoneserver needs it.

            /*builder.Register<IServiceDiscoveryService>(context => RestService.For<IServiceDiscoveryService>("https://test-guardians-servicediscovery.azurewebsites.net"))
             *      .As<IServiceDiscoveryService>()
             *      .SingleInstance();*/
            //builder.Register<IServiceDiscoveryService>(context => RestService.For<IServiceDiscoveryService>(@"http://72.190.177.214:5000"));
            builder.Register <IServiceDiscoveryService>(context => RestService.For <IServiceDiscoveryService>(@"http://72.190.177.214:5000"))
            .As <IServiceDiscoveryService>()
            .SingleInstance();
            builder.Register(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();

                return(new AsyncEndpointZoneServerToGameServerService(QueryForRemoteServiceEndpoint(serviceDiscovery, "GameServer")));
            })
            .As <IZoneServerToGameServerClient>()
            .SingleInstance();

            /*builder.RegisterType<DefaultMovementHandlerService>()
             *      .As<IMovementDataHandlerService>()
             *      .AsSelf();
             *
             * builder.RegisterType<PathMovementBlockHandler>()
             *      .AsImplementedInterfaces()
             *      .AsSelf();
             *
             * builder.RegisterType<PositionChangeMovementBlockHandler>()
             *      .AsImplementedInterfaces()
             *      .AsSelf();*/

            builder.RegisterType <UtcNowNetworkTimeService>()
            .AsSelf()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.RegisterType <FieldValueUpdateFactory>()
            .AsSelf()
            .AsImplementedInterfaces();

            RegisterEntityDestructionServices(builder);

            //Honestly, before running this I think it'll be a MIRACLE if this actually works
            //Registering the generic networkmessage sender
            builder.RegisterGeneric(typeof(GenericMessageSender <>))
            .As(typeof(INetworkMessageSender <>).MakeGenericType(typeof(GenericSingleTargetMessageContext <>)))
            .SingleInstance();

            RegisterLockingPolicies(builder);

            //IPhysicsTriggerEventSubscribable TriggerEventSubscribable
            builder.RegisterInstance(GlobalPhysicsEventSystem.Instance)
            .AsImplementedInterfaces()
            .SingleInstance();

            //DefaultEntitySessionMessageSender : IEntitySessionMessageSender
            builder.RegisterType <DefaultEntitySessionMessageSender>()
            .As <IEntitySessionMessageSender>();

            //EntityBaseStatsDataFactory : IFactoryCreatable<EntityBaseStatsModel, EntityDataStatsDerivable>
            builder.RegisterType <EntityBaseStatsDataFactory>()
            .As <IFactoryCreatable <EntityBaseStatsModel, EntityDataStatsDerivable> >();

            //RoundRobinSpawnStrategy : ISpawnPointStrategy
            builder.RegisterType <PlayerRoundRobinSpawnStrategy>()
            .As <ISpawnPointStrategy>();

            builder.RegisterType <PlayerSpawnPointQueue>()
            .AsSelf()
            .SingleInstance();

            builder.RegisterType <DefaultThreadUnSafeKnownEntitySet>()
            .AsSelf()
            .AsImplementedInterfaces()
            .SingleInstance();

            //ServerMovementGeneratorFactory : IFactoryCreatable<IMovementGenerator<GameObject>, EntityAssociatedData<IMovementData>>
            builder.RegisterType <ServerMovementGeneratorFactory>()
            .As <IFactoryCreatable <IMovementGenerator <GameObject>, EntityAssociatedData <IMovementData> > >()
            .As <IMovementGeneratorFactory>()
            .AsSelf();

            builder.RegisterType <RemoteGameObjectDataService>()
            .As <IGameObjectDataService>()
            .SingleInstance();

            //DefaultSpellDataCollection : ISpellDataCollection, IReadonlySpellDataCollection
            builder.RegisterType <DefaultSpellDataCollection>()
            .AsImplementedInterfaces()
            .SingleInstance();
        }