示例#1
0
        public async Task Process(JoinBattle join)
        {
            if (!IsLoggedIn)
            {
                return;
            }

            if (MyBattle != null)
            {
                await Respond("You are already in other battle");

                return;
            }

            Battle battle;

            if (state.Battles.TryGetValue(join.BattleID, out battle))
            {
                if (battle.IsPassworded && battle.Password != join.Password)
                {
                    await Respond("Invalid password");

                    return;
                }
                var ubs = new UserBattleStatus(Name, User);
                if (battle.Users.Values.Count(x => !x.IsSpectator) >= battle.MaxPlayers)
                {
                    ubs.IsSpectator = true;
                }
                battle.Users[Name] = ubs;
                MyBattle           = battle;
                await state.Broadcast(state.ConnectedUsers.Values, new JoinedBattle()
                {
                    BattleID = battle.BattleID, User = Name
                });
                await RecalcSpectators(battle);

                await state.Broadcast(battle.Users.Keys.Where(x => x != Name), battle.Users[Name].ToUpdateBattleStatus());// send my UBS to others in battle

                foreach (var u in battle.Users.Values.Select(x => x.ToUpdateBattleStatus()).ToList())
                {
                    await SendCommand(u);                                                                                   // send other's status to self
                }
                foreach (var u in battle.Bots.Values.Select(x => x.ToUpdateBotStatus()).ToList())
                {
                    await SendCommand(u);
                }
                foreach (var u in battle.Rectangles)
                {
                    await SendCommand(new SetRectangle()
                    {
                        Number = u.Key, Rectangle = u.Value
                    });
                }
                await SendCommand(new SetModOptions()
                {
                    Options = battle.ModOptions
                });
            }
        }
示例#2
0
        async Task Process(JoinBattle join)
        {
            if (!IsLoggedIn)
            {
                return;
            }

            if (MyBattle != null)
            {
                await Respond("You are already in other battle");

                return;
            }

            Battle battle;

            if (state.Battles.TryGetValue(join.BattleID, out battle))
            {
                if (battle.IsPassworded && battle.Password != join.Password)
                {
                    await Respond("Invalid password");

                    return;
                }
                battle.Users[Name] = new UserBattleStatus(Name, User);
                MyBattle           = battle;
                await Broadcast(state.Clients.Values, new JoinedBattle()
                {
                    BattleID = battle.BattleID, User = Name
                }, Name);
                await RecalcSpectators(battle);

                foreach (var u in battle.Users.Values.Select(x => x.ToUpdateBattleStatus()).ToList())
                {
                    await SendCommand(u);
                }
                foreach (var u in battle.Bots.Values.Select(x => x.ToUpdateBotStatus()).ToList())
                {
                    await SendCommand(u);
                }
                foreach (var u in battle.Rectangles)
                {
                    await SendCommand(new SetRectangle()
                    {
                        Number = u.Key, Rectangle = u.Value
                    });
                }
                await SendCommand(new SetModOptions()
                {
                    Options = battle.ModOptions
                });
            }
        }
示例#3
0
        public async Task Process(JoinBattle join)
        {
            if (!IsLoggedIn)
            {
                return;
            }

            ServerBattle battle;

            if (server.Battles.TryGetValue(join.BattleID, out battle))
            {
                await battle.ProcessPlayerJoin(this, join.Password);
            }
        }