示例#1
0
 private void SendRequest(ISerializerable request, int requestIndex)
 {
     if (this.IsConnect)
     {
         var index = 0;
         if (MessageHandleTypes.GetTypeIndex(request.GetType(), out index))
         {
             using (var mem = new MemoryStream())
             {
                 using (var bw = new BinaryWriter(mem))
                 {
                     bw.Write(requestIndex);
                     request.ToBinary(bw);
                     if (NetProtoTool.EnableLog)
                     {
                         Debuger.Log(request.GetType() + "-->" + JsonTool.Serialize(request));
                     }
                 }
                 var result = new Message(MessageClass.Request, index, mem.ToArray());
                 SendMessage(result);
             }
         }
     }
     else
     {
         IHandler handler;
         if (Handler._handlers.TryToGetValue(requestIndex, out handler))
         {
             handler.OnHandle(false, null);
         }
     }
 }
示例#2
0
 public void OnHandle(bool success, ISerializerable message)
 {
     UUIManager.S.UnMaskEvent();
     completed = true;
     if (OnCompleted != null)
     {
         OnCompleted(success, message as R);
     }
 }
示例#3
0
        public static void SendTask(Client client, ISerializerable task)
        {
            var message = ToNetMessage(MessageClass.Task, task);

            client.SendMessage(message);
            if (EnableLog)
            {
                Debuger.Log(string.Format("Task-->{0}", JsonTool.Serialize(task)));
            }
        }
示例#4
0
        public static Message ToNetMessage(MessageClass @class, ISerializerable m)
        {
            int flag;

            MessageHandleTypes.GetTypeIndex(m.GetType(), out flag);
            using (var mem = new MemoryStream())
            {
                using (var bw = new BinaryWriter(mem))
                {
                    m.ToBinary(bw);
                }
                return(new Message(@class, flag, mem.ToArray()));
            }
        }
示例#5
0
 public void OnHandle(bool isSuccess, ISerializerable message)
 {
     RequestCompleted = true;
     {
         IsSuccess = isSuccess;
         Result    = message;
         if (isSync)
         {
             if (OnCompleted != null)
             {
                 OnCompleted(isSuccess, Result as R);
             }
         }
     }
 }
示例#6
0
 public void AddNotify(ISerializerable notify)
 {
     _notify.Enqueue(notify);
 }
示例#7
0
    /// <summary>
    /// 处理网络包的解析
    /// </summary>
    /// <param name="notify">Notify.</param>
    public void Process(ISerializerable notify)
    {
        var per = UPerceptionView.S as IBattlePerception;

        if (notify is Notify_CreateBattleCharacter)
        {
            var createcharacter = notify as Notify_CreateBattleCharacter;
            var resources       = ExcelConfig.ExcelToJSONConfigManager.Current.GetConfigByID <ExcelConfig.CharacterData>(createcharacter.ConfigID);
            var view            = per.CreateBattleCharacterView(
                resources.ResourcesPath,
                createcharacter.Position.ToGVer3(),
                createcharacter.Forward.ToGVer3());
            var character = view as UCharacterView;
            character.index  = createcharacter.Index;
            character.UserID = createcharacter.UserID;
            view.SetSpeed(createcharacter.Speed * 1.1f);

            foreach (var i in createcharacter.Magics)
            {
                view.AttachMaigc(i.MagicID, i.CDTime);
            }
            views.Add(view.Index, view);
            if (OnCreateUser != null)
            {
                OnCreateUser(view);
            }
        }
        else if (notify is Notify_CreateReleaser)
        {
            var creater  = notify as Notify_CreateReleaser;
            var releaer  = views[creater.ReleaserIndex] as UCharacterView;
            var target   = views[creater.TargetIndex] as UCharacterView;
            var viewer   = per.CreateReleaserView(releaer, target, null);
            var releaser = viewer as UMagicReleaserView;
            releaser.SetCharacter(releaer, target);
            releaser.index = creater.Index;
            views.Add(viewer.Index, viewer);
        }
        else if (notify is Notify_CreateMissile)
        {
            var create   = notify as Notify_CreateMissile;
            var releaser = views[create.ReleaserIndex] as UMagicReleaserView;
            var layout   = new Layout.LayoutElements.MissileLayout
            {
                fromBone      = create.formBone,
                toBone        = create.toBone,
                offset        = create.offset.ToLVer3(),
                resourcesPath = create.ResourcesPath,
                speed         = create.Speed
            };
            var view    = per.CreateMissile(releaser, layout);
            var missile = view as UBattleMissileView;
            missile.index = create.Index;
            views.Add(view.Index, view);
        }
        else if (notify is Notify_LayoutPlayParticle)
        {
            var particle = notify as Notify_LayoutPlayParticle;
            var layout   = new Layout.LayoutElements.ParticleLayout
            {
                path         = particle.Path,
                destoryTime  = particle.DestoryTime,
                destoryType  = (Layout.LayoutElements.ParticleDestoryType)particle.DestoryType,
                fromBoneName = particle.FromBoneName,
                fromTarget   = (Layout.TargetType)particle.FromTarget,
                toBoneName   = particle.ToBoneName,
                toTarget     = (Layout.TargetType)particle.ToTarget,
                Bind         = particle.Bind
            };
            var releaser = views[particle.ReleaseIndex] as UMagicReleaserView;
            per.CreateParticlePlayer(releaser, layout);
        }
        else if (notify is Notify_LookAtCharacter)
        {
            var look   = notify as Notify_LookAtCharacter;
            var owner  = views[look.Own] as IBattleCharacter;
            var target = views[look.Target] as IBattleCharacter;
            owner.LookAtTarget(target);
        }
        else if (notify is Notify_CharacterPosition)
        {
            var position = notify as Notify_CharacterPosition;
            var view     = views[position.Index] as IBattleCharacter;
            view.MoveTo(position.TargetPosition.ToGVer3());
        }
        else if (notify is Notify_LayoutPlayMotion)
        {
            var motion = notify as Notify_LayoutPlayMotion;
            var view   = views[motion.Index] as IBattleCharacter;
            view.PlayMotion(motion.Motion);
        }
        else if (notify is Notify_HPChange)
        {
            var change = notify as Proto.Notify_HPChange;
            var view   = views[change.Index] as IBattleCharacter;
            view.ShowHPChange(change.HP, change.TargetHP, change.Max);
            if (change.TargetHP == 0)
            {
                if (OnDeath != null)
                {
                    OnDeath(view);
                }
                view.Death();
            }
        }
        else if (notify is Notify_ElementExitState)
        {
            var exit = notify as Notify_ElementExitState;
            var view = views[exit.Index];
            views.Remove(exit.Index);

            //GameObject.Destroy(view.gameObject);
        }
        else if (notify is Notify_ElementJoinState)
        {
            var joinState = notify as Proto.Notify_ElementJoinState;
            var view      = views[joinState.Index];
            //view.Joined();
        }
        else if (notify is Notify_DamageResult)
        {
            /*var damage = notify as Proto.Notify_DamageResult;
             * var view = views[damage.Index];
             * var character = view as UCharacterView;
             * character.NotifyDamage(damage);*/
        }
        else if (notify is Notify_MPChange)
        {
            var mpChanged = notify as Notify_MPChange;
            var view      = views[mpChanged.Index] as IBattleCharacter;
            view.ShowMPChange(mpChanged.MP, mpChanged.TargetMP, mpChanged.Max);
        }
        else if (notify is Notify_PropertyValue)
        {
            var pV   = notify as Notify_PropertyValue;
            var view = views[pV.Index] as IBattleCharacter;
            view.ProtertyChange(pV.Type, pV.FinallyValue);
        }
        else if (notify is Notify_PlayerJoinState)
        {
            //package
            var package = notify as Notify_PlayerJoinState;
            if (this.OnJoined != null)
            {
                OnJoined(package);
            }
        }
        else if (notify is Notify_Drop)
        {
            var drop = notify as Notify_Drop;
            if (OnDrop != null)
            {
                OnDrop(drop);
            }

            //var drop = notify as Notify_Drop;
            if (drop.Gold > 0)
            {
                //gold += drop.Gold;
                UAppliaction.S.ShowNotify("Gold +" + drop.Gold);
            }

            foreach (var i in drop.Items)
            {
                var item = ExcelToJSONConfigManager.Current.GetConfigByID <ItemData>(i.ItemID);
                UAppliaction.S.ShowNotify(string.Format("{0}+{1}", item.Name, i.Num));
            }
        }
        else if (notify is Notify_ReleaseMagic)
        {
            var release = notify as Notify_ReleaseMagic;
            var view    = views[release.Index] as IBattleCharacter;
            view.AttachMaigc(release.MagicID, release.CdCompletedTime);
        }
        else
        {
            Debug.LogError("NO Handle:" + notify.GetType());
        }
    }
示例#8
0
 private void Process(ISerializerable notify)
 {
     player.Process(notify);
 }
示例#9
0
        private void DoHandle(Message message, Client client)
        {
            var  handlerID = message.Flag;
            Type m;

            if (_handler.TryGetValue(handlerID, out m))
            {
                var type = MessageHandleTypes.GetTypeByIndex(handlerID);
                if (type == null)
                {
                    Debuger.Log(string.Format("TypeId:{0} no found!", handlerID));
                    return;
                }
                ISerializerable request;
                int             requestIndex = 0;
                using (var mem = new MemoryStream(message.Content))
                {
                    using (var br = new BinaryReader(mem))
                    {
                        requestIndex = br.ReadInt32();
                        request      = Activator.CreateInstance(type) as Proto.ISerializerable;
                        request.ParseFormBinary(br);
                        if (NetProtoTool.EnableLog)
                        {
                            Debuger.Log(request.GetType() + "-->" + JsonTool.Serialize(request));
                        }
                    }
                }
                var responser  = Activator.CreateInstance(m);
                var NeedAccess = (bool)m.GetProperty("NeedAccess").GetValue(responser);

                if (NeedAccess)
                {
                    if (!client.HaveAdmission)
                    {
                        //直接断开
                        client.Server.DisConnectClient(client, 1);
                        return;
                    }
                }

                var             begin  = DateTime.Now;
                ISerializerable result = null;
                try
                {
                    result = m.GetMethod("DoResponse")
                             .Invoke(responser, new object[] { request, client })
                             as ISerializerable;
                }
                catch (Exception ex)
                {
                    Debuger.LogError(ex.ToString());
                }

                if (result == null)
                {
                    var rem         = m.GetMethod("DoResponse");
                    var emptyResult = Activator.CreateInstance(rem.ReturnType) as ISerializerable;
                    result = emptyResult;
                    //Debuger.LogWaring("Empty")
                }

                if (NetProtoTool.EnableLog)
                {
                    var processTime = DateTime.Now - begin;

                    Debuger.Log(
                        string.Format("{1}({0}ms)-->{2}",
                                      processTime.TotalMilliseconds,
                                      request.GetType(),
                                      JsonTool.Serialize(result))
                        );
                }

                var index = 0;
                if (MessageHandleTypes.GetTypeIndex(result.GetType(), out index))
                {
                    using (var mem = new MemoryStream())
                    {
                        using (var bw = new BinaryWriter(mem))
                        {
                            bw.Write(requestIndex);
                            result.ToBinary(bw);
                        }
                        var response = new Message(MessageClass.Response, index, mem.ToArray());
                        client.SendMessage(response);
                    }
                }
            }
            else
            {
                Debuger.LogError(string.Format("TypeID:{0} no Handle!", handlerID));
            }
        }
示例#10
0
 public void ProcessNotify(ISerializerable notify)
 {
     player.Process(notify);
 }