コード例 #1
0
ファイル: UserActorTest.cs プロジェクト: jpiquot/ExtenFlow
        public async Task SetUserWithConcurrencyStampMismatch_ReturnsConcurrencyFailure()
        {
            var stateManager = new Mock <IActorStateManager>();
            var existingUser = new User {
                Id = Guid.NewGuid(), UserName = "******", NormalizedUserName = "******", ConcurrencyStamp = Guid.NewGuid().ToString()
            };
            var newUser = new User {
                Id = existingUser.Id, UserName = "******", NormalizedUserName = "******", ConcurrencyStamp = Guid.NewGuid().ToString()
            };

            stateManager.Setup(manager => manager
                               .GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(existingUser));
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, newUser.Id);

            IdentityResult result = await testDemoActor.SetUser(newUser);

            result.Succeeded.Should().BeFalse();
            result.Errors.Should().HaveCount(1);
            IdentityError error       = new IdentityErrorDescriber().ConcurrencyFailure();
            IdentityError resultError = result.Errors.First();

            resultError.Code.Should().Be(error.Code);
            resultError.Description.Should().Be(error.Description);
        }
コード例 #2
0
    public void AbilityResult(pt_scene_skill_effect_c006 _pt)
    {
        HasServerConfirm = true;
        result_list      = _pt.effect_list;
        endPosX          = _pt.shift_x;
        endPosY          = _pt.shift_y;
        endPosZ          = _pt.shift_z;
        runeID           = (int)_pt.rune;
        needHitAnim      = (_pt.effect_sort != (byte)(int)AbilityResultCAUSEType.BUFF);

        if (UserActor != null)
        {
            UserActor.AbilityMove(this);
        }
        for (int i = 0; i < result_list.Count; i++)
        {
            int        instanceID = (int)result_list[i].target_id;
            ObjectType type       = (ObjectType)result_list[i].target_sort;
            ActorInfo  actor      = null;
            switch (type)
            {
            case ObjectType.Player:
                if (instanceID == GameCenter.curMainPlayer.id)
                {
                    actor = GameCenter.mainPlayerMng.MainPlayerInfo;
                }
                if (actor == null)
                {
                    actor = GameCenter.sceneMng.GetOPCInfo(instanceID);
                }
                break;

            case ObjectType.MOB:
                actor = GameCenter.sceneMng.GetMobInfo(instanceID);
                break;

            case ObjectType.Entourage:
                if (GameCenter.curMainEntourage != null && instanceID == GameCenter.curMainEntourage.id)
                {
                    actor = GameCenter.mercenaryMng.curMercernaryInfo;
                }
                else
                {
                    actor = GameCenter.sceneMng.GetEntourageInfo(instanceID);
                }
                break;
            }
            if (actor != null)
            {
                actor.BeInfluencedByOther(this, result_list[i]);
            }
            else
            {
                Debug.LogError("找不到技能承受对象 " + instanceID);
            }
        }
    }
コード例 #3
0
        public async Task GetUninitializedUser_ThrowsException()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            await Invoking(async() => await testDemoActor.GetUser())
            .Should()
            .ThrowAsync <KeyNotFoundException>();
        }
コード例 #4
0
 void Start()
 {
     scene          = SceneManager.GetActiveScene();
     isDoingAttack  = -1;
     timer          = 0;
     dead           = false;
     Tools          = GameObject.Find("Tools");
     anim           = gameObject.GetComponent <Animator>();
     rb             = gameObject.GetComponent <Rigidbody2D>();
     spriteRenderer = gameObject.GetComponent <SpriteRenderer>();
     //新建的actor为玩家最初的状态,位置在最开始的地方,活,不跳,静止,不攻击
     actor = new UserActor(mName, gameObject.GetComponent <Rigidbody2D>().position, 1, -1, 0, -1, gender);
 }
コード例 #5
0
        public void AddUserActor(Client client)
        {
            int newVirtualId = _virtualId++;

            UserActor actor = new UserActor(client, newVirtualId);

            Actors.TryAdd(newVirtualId, actor);
            client.CurrentRoomId = this.Id;
            client.CurrentRoom   = Engine.Locator.RoomController.GetRoom(client.CurrentRoomId);
            client.UserActor     = actor;
            PlayersIn++;

            Engine.Locator.NavigatorController.Categories[CategoryId].PlayersInside++;
        }
コード例 #6
0
        private async Task <UserActor> CreateUserActor(IActorStateManager actorStateManager, string id)
        {
            var actorTypeInformation = ActorTypeInformation.Get(typeof(UserActor));

            UserActor actorFactory(ActorService service, ActorId id) =>
            new UserActor(service, id, actorStateManager);

            var        actorService = new ActorService(actorTypeInformation, actorFactory);
            UserActor  actor        = actorFactory(actorService, new ActorId(id));
            MethodInfo OnActivate   = actor.GetType().GetMethod("OnActivateAsync", BindingFlags.NonPublic | BindingFlags.Instance);

            await(Task) OnActivate.Invoke(actor, Array.Empty <object>());
            return(actor);
        }
コード例 #7
0
        public async Task CreateUser_ExpectSetStateAsync()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.SetStateAsync("User", user, It.IsAny <CancellationToken>())).Verifiable();
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            IdentityResult result = await testDemoActor.Create(user);

            result.Succeeded.Should().BeTrue();

            stateManager.VerifyAll();
        }
コード例 #8
0
 void SendNewMessage(UserActor _actor)
 {
     mmopb.UserActor_req req = new mmopb.UserActor_req();
     req.name          = _actor.name;
     req.position      = new mmopb.Vector2();
     req.position.x    = _actor.position.x;
     req.position.y    = _actor.position.y;
     req.LifeState     = _actor.LifeState;
     req.action        = new mmopb.Action();
     req.action.jump   = _actor.jump;
     req.action.walk   = _actor.walk;
     req.action.attack = _actor.attack;
     req.gender        = _actor.gender;
     req.RoomID        = Network.m_Actor.inRoomNum;
     Tools.GetComponent <Tools>().SendUserActorReq(req);
 }
コード例 #9
0
        public async Task DeleteUninitializedUser_ThrowsException()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult <User>(null));
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            await Invoking(async() => await testDemoActor.Delete())
            .Should()
            .ThrowAsync <KeyNotFoundException>();

            stateManager.VerifyAll();
        }
コード例 #10
0
ファイル: UserActorTest.cs プロジェクト: jpiquot/ExtenFlow
        public async Task SetNewUser_ExpectConcurrencyStampChange()
        {
            var    stateManager     = new Mock <IActorStateManager>();
            string concurrencyStamp = Guid.NewGuid().ToString();
            var    user             = new User {
                Id = Guid.NewGuid(), UserName = "******", NormalizedUserName = "******", ConcurrencyStamp = concurrencyStamp
            };

            stateManager.Setup(manager => manager.SetStateAsync("User", user, It.IsAny <CancellationToken>())).Verifiable();
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            IdentityResult result = await testDemoActor.SetUser(user);

            result.Succeeded.Should().BeTrue();
            user.Should().NotBe(concurrencyStamp);
            stateManager.VerifyAll();
        }
コード例 #11
0
        public async Task SetNormalizedUserName_ExpectSetStateAsyncNewValue(string name)
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(user));
            stateManager.Setup(manager => manager.SetStateAsync("User", user, It.IsAny <CancellationToken>())).Verifiable();
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            string newName = "new user name";
            await testDemoActor.SetNormalizedUserName(newName);

            user.NormalizedUserName.Should().Be(newName);

            stateManager.VerifyAll();
        }
コード例 #12
0
        public async Task UpdateUserWithInvalidId_ThrowsException()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(user));
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            await Invoking(async() => await testDemoActor.Update(new User {
                Id = "other user", UserName = "******", NormalizedUserName = "******"
            }))
            .Should()
            .ThrowAsync <InvalidOperationException>();

            stateManager.VerifyAll();
        }
コード例 #13
0
    void FixedUpdate()
    {
        newActor = ComputeBehaviour();
        if (newActor.LifeState == -1)
        {
            //soundEffects.clip = deadAudio;
            //soundEffects.Play();
            SendNewMessage(newActor);
        }
        //如果新的actor和旧的actor不一样,就发生改变,就发送UserActor_req到服务器
        if (actor != newActor)
        {
            SendNewMessage(newActor);
        }
        //当从服务器接到新的UserActor_ack之后,更新actor
        if (Network.m_Actor.isReceiveActorAck)
        {
            for (int i = 0; i < Network.m_Actor.actorAckList.Count; i++)
            {
                //如果性别与自己一致,就赋值给自己的player
                if (Network.m_Actor.actorAckList[i].gender == gender)
                {
                    //将新的操作赋值给actor
                    SetNewActor(Network.m_Actor.actorAckList[i]);
                    Network.m_Actor.actorAckList.Remove(Network.m_Actor.actorAckList[i]);
                }
            }
            //如果所有的数据包都被接受完毕了
            if (Network.m_Actor.actorAckList.Count == 0)
            {
                Network.m_Actor.actorAckList.Clear();
                //再将是否收到改为false
                Network.m_Actor.isReceiveActorAck = false;
            }
        }

        //根据actor计算出下一帧的位置和其他信息
        ComputeInfomation();
        //使用新的actor来决定当前状态人物的动画
        DoActor();
        //更新actor中的位置值
        actor.position = rb.position;
    }
コード例 #14
0
        public async Task GetUser_ExpectGetStateAsync()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(user))
            .Verifiable();
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            User state = await testDemoActor.GetUser();

            state.Id.Should().Be(user.Id);
            state.UserName.Should().Be(user.UserName);
            state.NormalizedUserName.Should().Be(user.NormalizedUserName);

            stateManager.VerifyAll();
        }
コード例 #15
0
        public async Task CreateExistingUser_ThrowsException()
        {
            var stateManager = new Mock <IActorStateManager>();
            var user         = new User {
                Id = "testuser", UserName = "******", NormalizedUserName = "******"
            };

            stateManager.Setup(manager => manager.GetStateAsync <User>("User", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(user));
            UserActor testDemoActor = await CreateUserActor(stateManager.Object, user.Id);

            IdentityResult result = await testDemoActor.Create(user);

            result.Succeeded.Should().BeFalse();
            result.Errors.Should().HaveCount(1);
            IdentityError error       = new IdentityErrorDescriber().DuplicateUserName(user.Id);
            IdentityError resultError = result.Errors.First();

            resultError.Code.Should().Be(error.Code);
            resultError.Description.Should().Be(error.Description);
        }
コード例 #16
0
 public FlatControllerAddedComposer(UserActor actor) : base(510)
 {
     AppendVL64(actor.Client.CurrentRoom.Id);
     AppendVL64(actor.Client.Player.Id);
     AppendString(actor.Client.Player.Username);
 }
コード例 #17
0
    UserActor ComputeBehaviour()
    {
        UserActor ret = new UserActor();

        if (gender == Network.m_Actor.gender && ctrlState == CtrlState.Player)
        {
            ret.name      = mName;
            ret.LifeState = 1;
            //左跳
            if (Input.GetKey(KeyCode.A) && Input.GetKeyDown(KeyCode.W))
            {
                ret.walk     = -1;
                ret.jump     = 1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;

                isStill = false;
            }
            //右跳
            else if (Input.GetKey(KeyCode.D) && Input.GetKeyDown(KeyCode.W))
            {
                ret.walk     = 1;
                ret.jump     = 1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;
                //soundEffects.clip = jumpAudio;
                //soundEffects.Play();
                isStill = false;
            }
            //左走
            else if (Input.GetKey(KeyCode.A))
            {
                ret.walk     = -1;
                ret.jump     = -1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;
                isStill      = false;
            }
            //右走
            else if (Input.GetKey(KeyCode.D))
            {
                ret.walk     = 1;
                ret.jump     = -1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;
                isStill      = false;
            }
            //上跳
            else if (Input.GetKeyDown(KeyCode.W))
            {
                ret.walk     = 0;
                ret.jump     = 1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;
                isStill      = false;
            }
            //互动
            else if (Input.GetKeyDown(KeyCode.K))
            {
                ret.walk     = 0;
                ret.jump     = -1;
                ret.attack   = 1;
                ret.position = rb.position;
                ret.gender   = gender;
                isStill      = false;
            }
            //静止
            else
            {
                ret.walk     = 0;
                ret.jump     = -1;
                ret.attack   = -1;
                ret.position = rb.position;
                ret.gender   = gender;
                isStill      = true;
            }
        }
        else
        {
            ret = actor;
        }

        //死了
        if (dead)
        {
            ret.walk      = 0;
            ret.jump      = -1;
            ret.attack    = -1;
            ret.position  = rb.position;
            ret.gender    = gender;
            ret.LifeState = -1;
            isStill       = true;
        }

        return(ret);
    }