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); }
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); } } }
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>(); }
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); }
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++; }
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); }
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(); }
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); }
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(); }
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(); }
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(); }
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(); }
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; }
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(); }
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); }
public FlatControllerAddedComposer(UserActor actor) : base(510) { AppendVL64(actor.Client.CurrentRoom.Id); AppendVL64(actor.Client.Player.Id); AppendString(actor.Client.Player.Username); }
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); }