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); } }
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); } } }
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); } } }
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(); }
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; } } }
public void ClientSendHeroCommand(int _id, double _x, double _y) { HeroCommandData data = new HeroCommandData(true, _id, new Vector2(_x, _y)); ClientSendCommand(data); }
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); }
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); } } }
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); }