Exemplo n.º 1
0
    private void DoCommand(CommandData _commandData)
    {
        if (_commandData is UnitCommandData)
        {
            UnitCommandData command = _commandData as UnitCommandData;

            AddUnitToPool(command.isMine, command.id);
        }
        else if (_commandData is HeroCommandData)
        {
            HeroCommandData command = _commandData as HeroCommandData;

            AddUnitToBattle(command.isMine, command.id, false, command.pos);

            AddSpawnSkillToBattle(command.isMine, command.id, command.pos);

            Dictionary <int, HeroCommandData> tmpDic2 = command.isMine ? mHeroCommandPool : oHeroCommandPool;

            tmpDic2.Remove(command.id);
        }
        else if (_commandData is SkillCommandData)
        {
            SkillCommandData command = _commandData as SkillCommandData;

            AddSkillToBattle(command.isMine, command.id, command.pos);
        }
    }
Exemplo n.º 2
0
    private void ServerReceiveCommand(bool _isMine, BinaryReader _br)
    {
        CommandData data;

        CommandType commandType = (CommandType)_br.ReadInt32();

        switch (commandType)
        {
        case CommandType.UNIT:

            int id = _br.ReadInt32();

            data = new UnitCommandData(_isMine, id);

            break;

        case CommandType.HERO:

            id = _br.ReadInt32();

            double x = _br.ReadDouble() + (random.NextDouble() - 0.5) * 0.01;

            double y = _br.ReadDouble() + (random.NextDouble() - 0.5) * 0.01;

            data = new HeroCommandData(_isMine, id, new Vector2(x, y));

            break;

        case CommandType.SKILL:

            id = _br.ReadInt32();

            x = _br.ReadDouble() + (random.NextDouble() - 0.5) * 0.01;

            y = _br.ReadDouble() + (random.NextDouble() - 0.5) * 0.01;

            data = new SkillCommandData(_isMine, id, new Vector2(x, y));

            break;

        default:

            throw new Exception("commandtype error");
        }

        using (MemoryStream ms = new MemoryStream())
        {
            using (BinaryWriter bw = new BinaryWriter(ms))
            {
                bool b = ReceiveCommand(roundNum + gameConfig.GetCommandDelay(), GetCommandID(), data);

                bw.Write((int)S2CCommand.ACTION_OK);

                bw.Write(b);

                serverSendDataCallBack(_isMine, ms);
            }
        }
    }
Exemplo n.º 3
0
    private void ClientSendCommand(CommandData _data)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (BinaryWriter bw = new BinaryWriter(ms))
            {
                bw.Write((int)C2SCommand.ACTION);

                if (_data is UnitCommandData)
                {
                    UnitCommandData command = _data as UnitCommandData;

                    bw.Write((int)CommandType.UNIT);

                    bw.Write(command.id);
                }
                else if (_data is HeroCommandData)
                {
                    HeroCommandData command = _data as HeroCommandData;

                    bw.Write((int)CommandType.HERO);

                    bw.Write(command.id);

                    bw.Write(command.pos.x);

                    bw.Write(command.pos.y);
                }
                else if (_data is SkillCommandData)
                {
                    SkillCommandData command = _data as SkillCommandData;

                    bw.Write((int)CommandType.SKILL);

                    bw.Write(command.id);

                    bw.Write(command.pos.x);

                    bw.Write(command.pos.y);
                }

                clientSendDataCallBack(ms);
            }
        }
    }
Exemplo n.º 4
0
    private void ClientUpdateRead(BinaryReader _br, out int _serverRoundNum, out Dictionary <int, CommandData> _commandData, out Dictionary <int, UnitCommandData> _mUnitCommandData, out Dictionary <int, UnitCommandData> _oUnitCommandData, out double _serverResult)
    {
        _serverRoundNum = _br.ReadInt32();

        int num = _br.ReadInt32();

        _commandData = null;

        if (num > 0)
        {
            _commandData = new Dictionary <int, CommandData>();

            for (int i = 0; i < num; i++)
            {
                int tmpCommandID = _br.ReadInt32();

                bool isMine = _br.ReadBoolean();

                CommandData command;

                CommandType commandType = (CommandType)_br.ReadInt32();

                switch (commandType)
                {
                case CommandType.HERO:

                    int id = _br.ReadInt32();

                    double x = _br.ReadDouble();

                    double y = _br.ReadDouble();

                    command = new HeroCommandData(isMine, id, new Vector2(x, y));

                    break;

                case CommandType.SKILL:

                    id = _br.ReadInt32();

                    x = _br.ReadDouble();

                    y = _br.ReadDouble();

                    command = new SkillCommandData(isMine, id, new Vector2(x, y));

                    break;

                default:

                    throw new Exception("commandtype error");
                }

                _commandData.Add(tmpCommandID, command);
            }
        }

        num = _br.ReadInt32();

        _mUnitCommandData = null;

        if (num > 0)
        {
            _mUnitCommandData = new Dictionary <int, UnitCommandData>();

            for (int i = 0; i < num; i++)
            {
                int tmpCommandID = _br.ReadInt32();

                int id = _br.ReadInt32();

                _mUnitCommandData.Add(tmpCommandID, new UnitCommandData(clientIsMine, id));
            }
        }

        _oUnitCommandData = null;

        if ((_serverRoundNum + gameConfig.GetCommandDelay()) % gameConfig.GetSpawnStep() == 0)
        {
            num = _br.ReadInt32();

            if (num > 0)
            {
                _oUnitCommandData = new Dictionary <int, UnitCommandData>();

                for (int i = 0; i < num; i++)
                {
                    int num2 = _br.ReadInt32();

                    for (int m = 0; m < num2; m++)
                    {
                        int tmpCommandID = _br.ReadInt32();

                        int id = _br.ReadInt32();

                        _oUnitCommandData.Add(tmpCommandID, new UnitCommandData(!clientIsMine, id));
                    }
                }
            }
        }

        _serverResult = _br.ReadDouble();
    }
Exemplo n.º 5
0
    private void ServerUpdate(BinaryWriter _bw, bool _isMine)
    {
        _bw.Write((int)S2CCommand.UPDATE);

        _bw.Write(roundNum);

        int tmpRoundNum = roundNum + gameConfig.GetCommandDelay();

        if (commandPool.ContainsKey(tmpRoundNum))
        {
            Dictionary <int, CommandData> tmpDic = commandPool[tmpRoundNum];

            _bw.Write(tmpDic.Count);

            Dictionary <int, CommandData> .Enumerator enumerator = tmpDic.GetEnumerator();

            while (enumerator.MoveNext())
            {
                _bw.Write(enumerator.Current.Key);

                CommandData data = enumerator.Current.Value;

                _bw.Write(data.isMine);

                if (data is HeroCommandData)
                {
                    HeroCommandData command = data as HeroCommandData;

                    _bw.Write((int)CommandType.HERO);

                    _bw.Write(command.id);

                    _bw.Write(command.pos.x);

                    _bw.Write(command.pos.y);
                }
                else if (data is SkillCommandData)
                {
                    SkillCommandData command = data as SkillCommandData;

                    _bw.Write((int)CommandType.SKILL);

                    _bw.Write(command.id);

                    _bw.Write(command.pos.x);

                    _bw.Write(command.pos.y);
                }
            }
        }
        else
        {
            _bw.Write(0);
        }

        Dictionary <int, Dictionary <int, UnitCommandData> > tmpUnitCommandPool = _isMine ? mUnitCommandPool : oUnitCommandPool;

        if (tmpUnitCommandPool.ContainsKey(tmpRoundNum))
        {
            Dictionary <int, UnitCommandData> tmpDic = tmpUnitCommandPool[tmpRoundNum];

            _bw.Write(tmpDic.Count);

            Dictionary <int, UnitCommandData> .Enumerator enumerator = tmpDic.GetEnumerator();

            while (enumerator.MoveNext())
            {
                _bw.Write(enumerator.Current.Key);

                _bw.Write(enumerator.Current.Value.id);
            }
        }
        else
        {
            _bw.Write(0);
        }

        if (tmpRoundNum % gameConfig.GetSpawnStep() == 0)
        {
            tmpUnitCommandPool = _isMine ? oUnitCommandPool : mUnitCommandPool;

            _bw.Write(tmpUnitCommandPool.Count);

            Dictionary <int, Dictionary <int, UnitCommandData> > .ValueCollection.Enumerator enumerator = tmpUnitCommandPool.Values.GetEnumerator();

            while (enumerator.MoveNext())
            {
                _bw.Write(enumerator.Current.Count);

                Dictionary <int, UnitCommandData> .Enumerator enumerator2 = enumerator.Current.GetEnumerator();

                while (enumerator2.MoveNext())
                {
                    _bw.Write(enumerator2.Current.Key);

                    _bw.Write(enumerator2.Current.Value.id);
                }
            }

            if (_isMine)
            {
                oShowMoney = oMoney;
            }
            else
            {
                mShowMoney = mMoney;
            }
        }
    }
Exemplo n.º 6
0
    public void ClientSendHeroCommand(int _id, double _x, double _y)
    {
        HeroCommandData data = new HeroCommandData(true, _id, new Vector2(_x, _y));

        ClientSendCommand(data);
    }
Exemplo n.º 7
0
    private void ClientRefresh(BinaryReader _br)
    {
        unitDic.Clear();

        unitList.Clear();

        mUnitPool.Clear();

        oUnitPool.Clear();

        commandPool.Clear();

        mHeroCommandPool.Clear();

        oHeroCommandPool.Clear();

        mSkillCommandPool.Clear();

        oSkillCommandPool.Clear();

        skillList.Clear();

        mHeroPool.Clear();

        oHeroPool.Clear();

        mUnitCommandPool.Clear();

        oUnitCommandPool.Clear();

        simulator.ClearAgents();

        clientIsMine = _br.ReadBoolean();

        serverRoundNum = roundNum = _br.ReadInt32();

        Log.Print("client refresh data " + roundNum + "  clientIsMine:" + clientIsMine);

        uid = _br.ReadInt32();

        mMoney = _br.ReadInt32();

        oMoney = _br.ReadInt32();

        int num = _br.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            Unit unit = new Unit();

            unit.Init(this, simulator, _br);

            unitDic.Add(unit.uid, unit);

            unitList.AddLast(unit);

            if (unit.sds.GetIsHero())
            {
                Dictionary <int, Unit> tmpDic = unit.isMine ? mHeroPool : oHeroPool;

                tmpDic.Add(unit.id, unit);
            }
        }

        num = _br.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            Skill skill = new Skill();

            skill.Init(this, simulator, _br);

            skillList.AddLast(skill);
        }

        num = _br.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            int id = _br.ReadInt32();

            int num2 = _br.ReadInt32();

            mUnitPool.Add(id, num2);
        }

        num = _br.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            int id = _br.ReadInt32();

            int num2 = _br.ReadInt32();

            oUnitPool.Add(id, num2);
        }

        num = _br.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            int tmpRoundNum = _br.ReadInt32();

            int num2 = _br.ReadInt32();

            Dictionary <int, CommandData> tmpDic = new Dictionary <int, CommandData>();

            commandPool.Add(tmpRoundNum, tmpDic);

            for (int m = 0; m < num2; m++)
            {
                int tmpCommandID = _br.ReadInt32();

                bool isMine = _br.ReadBoolean();

                CommandData commandData;

                CommandType commandType = (CommandType)_br.ReadInt32();

                switch (commandType)
                {
                case CommandType.UNIT:

                    int id = _br.ReadInt32();

                    commandData = new UnitCommandData(isMine, id);

                    break;

                case CommandType.HERO:

                    id = _br.ReadInt32();

                    double x = _br.ReadDouble();

                    double y = _br.ReadDouble();

                    commandData = new HeroCommandData(isMine, id, new Vector2(x, y));

                    Dictionary <int, HeroCommandData> tmpDic2 = isMine ? mHeroCommandPool : oHeroCommandPool;

                    tmpDic2.Add(id, commandData as HeroCommandData);

                    break;

                case CommandType.SKILL:

                    id = _br.ReadInt32();

                    x = _br.ReadDouble();

                    y = _br.ReadDouble();

                    commandData = new SkillCommandData(isMine, id, new Vector2(x, y));

                    Dictionary <int, SkillCommandData> tmpDic3 = isMine ? mSkillCommandPool : oSkillCommandPool;

                    tmpDic3.Add(id, commandData as SkillCommandData);

                    break;

                default:

                    throw new Exception("commandtype error");
                }

                tmpDic.Add(tmpCommandID, commandData);
            }
        }

        num = _br.ReadInt32();

        Dictionary <int, Dictionary <int, UnitCommandData> > unitCommandData = clientIsMine ? mUnitCommandPool : oUnitCommandPool;

        for (int i = 0; i < num; i++)
        {
            int tmpRoundNum = _br.ReadInt32();

            int num2 = _br.ReadInt32();

            Dictionary <int, UnitCommandData> tmpDic = new Dictionary <int, UnitCommandData>();

            unitCommandData.Add(tmpRoundNum, tmpDic);

            for (int m = 0; m < num2; m++)
            {
                int tmpCommandID = _br.ReadInt32();

                int id = _br.ReadInt32();

                tmpDic.Add(tmpCommandID, new UnitCommandData(clientIsMine, id));
            }
        }

        updateCallBack(null);
    }
Exemplo n.º 8
0
    public void ServerRefresh(bool _isMine)
    {
        Log.Print("ServerRefresh:" + roundNum + "   isMine:" + _isMine);

        using (MemoryStream ms = new MemoryStream())
        {
            using (BinaryWriter bw = new BinaryWriter(ms))
            {
                bw.Write((int)S2CCommand.REFRESH);

                bw.Write(_isMine);

                bw.Write(roundNum);

                bw.Write(uid);

                if (_isMine)
                {
                    bw.Write(mMoney);

                    bw.Write(oShowMoney);
                }
                else
                {
                    bw.Write(mShowMoney);

                    bw.Write(oMoney);
                }

                bw.Write(unitList.Count);

                LinkedList <Unit> .Enumerator enumerator = unitList.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    Unit unit = enumerator.Current;

                    unit.WriteData(bw);
                }

                bw.Write(skillList.Count);

                LinkedList <Skill> .Enumerator enumerator7 = skillList.GetEnumerator();

                while (enumerator7.MoveNext())
                {
                    Skill skill = enumerator7.Current;

                    skill.WriteData(bw);
                }

                bw.Write(mUnitPool.Count);

                Dictionary <int, int> .Enumerator enumerator2 = mUnitPool.GetEnumerator();

                while (enumerator2.MoveNext())
                {
                    bw.Write(enumerator2.Current.Key);

                    bw.Write(enumerator2.Current.Value);
                }

                bw.Write(oUnitPool.Count);

                enumerator2 = oUnitPool.GetEnumerator();

                while (enumerator2.MoveNext())
                {
                    bw.Write(enumerator2.Current.Key);

                    bw.Write(enumerator2.Current.Value);
                }

                bw.Write(commandPool.Count);

                Dictionary <int, Dictionary <int, CommandData> > .Enumerator enumerator3 = commandPool.GetEnumerator();

                while (enumerator3.MoveNext())
                {
                    bw.Write(enumerator3.Current.Key);

                    Dictionary <int, CommandData> tmpDic = enumerator3.Current.Value;

                    bw.Write(tmpDic.Count);

                    Dictionary <int, CommandData> .Enumerator enumerator4 = tmpDic.GetEnumerator();

                    while (enumerator4.MoveNext())
                    {
                        bw.Write(enumerator4.Current.Key);

                        CommandData data = enumerator4.Current.Value;

                        bw.Write(data.isMine);

                        if (data is UnitCommandData)
                        {
                            UnitCommandData command = data as UnitCommandData;

                            bw.Write((int)CommandType.UNIT);

                            bw.Write(command.id);
                        }
                        else if (data is HeroCommandData)
                        {
                            HeroCommandData command = data as HeroCommandData;

                            bw.Write((int)CommandType.HERO);

                            bw.Write(command.id);

                            bw.Write(command.pos.x);

                            bw.Write(command.pos.y);
                        }
                        else if (data is SkillCommandData)
                        {
                            SkillCommandData command = data as SkillCommandData;

                            bw.Write((int)CommandType.SKILL);

                            bw.Write(command.id);

                            bw.Write(command.pos.x);

                            bw.Write(command.pos.y);
                        }
                    }
                }

                Dictionary <int, Dictionary <int, UnitCommandData> > unitCommandData = _isMine ? mUnitCommandPool : oUnitCommandPool;

                bw.Write(unitCommandData.Count);

                Dictionary <int, Dictionary <int, UnitCommandData> > .Enumerator enumerator5 = unitCommandData.GetEnumerator();

                while (enumerator5.MoveNext())
                {
                    bw.Write(enumerator5.Current.Key);

                    Dictionary <int, UnitCommandData> tmpDic = enumerator5.Current.Value;

                    bw.Write(tmpDic.Count);

                    Dictionary <int, UnitCommandData> .Enumerator enumerator6 = tmpDic.GetEnumerator();

                    while (enumerator6.MoveNext())
                    {
                        bw.Write(enumerator6.Current.Key);

                        bw.Write(enumerator6.Current.Value.id);
                    }
                }

                serverSendDataCallBack(_isMine, ms);
            }
        }
    }
Exemplo n.º 9
0
    private bool ReceiveCommand(int _roundNum, int _commandID, CommandData _commandData)
    {
        if (_commandData is UnitCommandData)
        {
            UnitCommandData command = _commandData as UnitCommandData;

            IUnitSDS sds = getUnitCallBack(command.id);

            if (!sds.GetIsHero())
            {
                if (command.isMine)
                {
                    if (sds.GetPrize() > mMoney)
                    {
                        return(false);
                    }
                    else
                    {
                        mMoney -= sds.GetPrize();
                    }
                }
                else
                {
                    if (sds.GetPrize() > oMoney)
                    {
                        return(false);
                    }
                    else
                    {
                        oMoney -= sds.GetPrize();
                    }
                }
            }
            else
            {
                return(false);
            }

            Dictionary <int, Dictionary <int, UnitCommandData> > unitCommandPool = command.isMine ? mUnitCommandPool : oUnitCommandPool;

            if (unitCommandPool.ContainsKey(_roundNum))
            {
                Dictionary <int, UnitCommandData> tmpDic = unitCommandPool[_roundNum];

                if (!tmpDic.ContainsKey(_commandID))
                {
                    tmpDic.Add(_commandID, command);
                }
            }
            else
            {
                Dictionary <int, UnitCommandData> tmpDic = new Dictionary <int, UnitCommandData>();

                unitCommandPool.Add(_roundNum, tmpDic);

                tmpDic.Add(_commandID, command);
            }
        }
        else if (_commandData is HeroCommandData)
        {
            HeroCommandData command = _commandData as HeroCommandData;

            IUnitSDS sds = getUnitCallBack(command.id);

            if (sds.GetIsHero())
            {
                if (command.isMine)
                {
                    if (mHeroCommandPool.ContainsKey(command.id) || mHeroPool.ContainsKey(command.id) || sds.GetPrize() > mMoney)
                    {
                        return(false);
                    }
                    else
                    {
                        mMoney -= sds.GetPrize();
                    }
                }
                else
                {
                    if (oHeroCommandPool.ContainsKey(command.id) || oHeroPool.ContainsKey(command.id) || sds.GetPrize() > oMoney)
                    {
                        return(false);
                    }
                    else
                    {
                        oMoney -= sds.GetPrize();
                    }
                }
            }
            else
            {
                return(false);
            }

            if (commandPool.ContainsKey(_roundNum))
            {
                Dictionary <int, CommandData> tmpDic = commandPool[_roundNum];

                if (!tmpDic.ContainsKey(_commandID))
                {
                    tmpDic.Add(_commandID, _commandData);
                }
            }
            else
            {
                Dictionary <int, CommandData> tmpDic = new Dictionary <int, CommandData>();

                commandPool.Add(_roundNum, tmpDic);

                tmpDic.Add(_commandID, _commandData);
            }

            Dictionary <int, HeroCommandData> tmpDic2 = _commandData.isMine ? mHeroCommandPool : oHeroCommandPool;

            tmpDic2.Add(command.id, command);
        }
        else if (_commandData is SkillCommandData)
        {
            SkillCommandData command = _commandData as SkillCommandData;

            Dictionary <int, SkillCommandData> skillDic = command.isMine ? mSkillCommandPool : oSkillCommandPool;

            Dictionary <int, Unit> heroDic = command.isMine ? mHeroPool : oHeroPool;

            if (heroDic.ContainsKey(command.id) && !skillDic.ContainsKey(command.id))
            {
                Unit hero = heroDic[command.id];

                if (hero.sds.GetSkill() == 0 || hero.skillCd > 0)
                {
                    return(false);
                }

                if (commandPool.ContainsKey(_roundNum))
                {
                    Dictionary <int, CommandData> tmpDic = commandPool[_roundNum];

                    if (!tmpDic.ContainsKey(_commandID))
                    {
                        tmpDic.Add(_commandID, _commandData);
                    }
                }
                else
                {
                    Dictionary <int, CommandData> tmpDic = new Dictionary <int, CommandData>();

                    commandPool.Add(_roundNum, tmpDic);

                    tmpDic.Add(_commandID, _commandData);
                }

                skillDic.Add(command.id, command);
            }
            else
            {
                return(false);
            }
        }

        return(true);
    }