public override void ReceiveData(byte[] _bytes) { if (uid != -1) { BattleManager.Instance.ReceiveData(uid, _bytes); } else { using (MemoryStream ms = new MemoryStream(_bytes)) { using (BinaryReader br = new BinaryReader(ms)) { try { CsPackageTag tag = (CsPackageTag)br.ReadInt32(); if (tag == CsPackageTag.Login) { LoginMessage message = LoginMessage.Parser.ParseFrom(ms); uid = int.Parse(message.Name); PlayerUnitManager.Instance.Login(uid, this); BattleManager.Instance.Login(uid); } } catch (Exception e) { Log.Write(e.ToString()); } } } } }
internal void ReceiveData(int _playerUnit, byte[] _bytes) { using (MemoryStream ms = new MemoryStream(_bytes)) { using (BinaryReader br = new BinaryReader(ms)) { CsPackageTag tag = (CsPackageTag)br.ReadInt32(); switch (tag) { case CsPackageTag.BattleData: BattleUnit battleUnit; if (battleDic.TryGetValue(_playerUnit, out battleUnit)) { battleUnit.ReceiveData(_playerUnit, br); } else { if (_playerUnit == lastPlayer) { ReplyClient(_playerUnit, false, PlayerStateEnum.Searching); } else { ReplyClient(_playerUnit, false, PlayerStateEnum.Free); } } break; case CsPackageTag.BattleManagerAction: if (battleDic.ContainsKey(_playerUnit)) { ReplyClient(_playerUnit, false, PlayerStateEnum.Battle); } else { BattleManagerActionMessage message = BattleManagerActionMessage.Parser.ParseFrom(ms); ReceiveActionData(_playerUnit, message); } break; } } } }
private void SendAction <T>(CsPackageTag _tag, byte[] _bytes, Action <T> _callBack) where T : IMessage <T>, new() { Action <BinaryReader> dele = delegate(BinaryReader _br) { MessageParser <T> parser = new MessageParser <T>(() => new T()); T result = parser.ParseFrom(_br.BaseStream); _callBack(result); }; using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write((int)_tag); bw.Write(_bytes); client.Send(ms, dele); } } }