async Task <bool> ITankGameSession.TakeDamage(ActorId TankID, float amount) { try { bool isDead = false; float newHealth = 0.0f; GameSessionState state = await this.GetStateAsync <GameSessionState>(); foreach (TankSessionMemberItem i in state.Players) { if (i.TankId == TankID) { newHealth = await(i.TankId.Proxy <ITank>().TakeDamageAsync(amount)); if (newHealth <= 0) { isDead = true; } } } await this.SetStateAsync(state); //Notify clients TakeDamageResponse tdr = new TakeDamageResponse(); tdr.Status = System.Net.HttpStatusCode.OK; tdr.TankGameSessionId = this.Id.GetGuidId(); tdr.TankId = TankID.GetGuidId(); tdr.Health = newHealth; tdr.isDead = isDead; List <Task> tasks = new List <Task>(); foreach (TankSessionMemberItem i in state.Players) { GateResponse gr = new GateResponse((int)RequestProcessorEnum.TakeDamage, (int)HttpStatusCode.OK, i.UserId.GetGuidId(), tdr.Serialize()); tasks.Add(i.UserId.Proxy <IUser>().SendGateResponseAsync(gr)); } await Task.WhenAll(tasks); //End notify clients return(isDead); } catch (Exception E) { this.Log(E); return(false); } }