private IEnumerator TestConnect()
    {
        var cg = CGPlayerCmd.CreateBuilder();

        cg.Cmd = "TestUDP";
        var avtar = AvatarInfo.CreateBuilder();
        var myId  = NetworkScene.Instance.myId;

        avtar.Id      = myId;
        cg.AvatarInfo = avtar.Build();

        SendPacket(cg);
        var waitTime = 0.0f;

        Log.Net("UDP TestBegin");
        while (!Connected && waitTime < 10)
        {
            yield return(null);

            waitTime += Time.deltaTime;
        }
        Log.Net("UDP Connnect: " + Connected);
        if (Connected)
        {
            var cg1 = CGPlayerCmd.CreateBuilder();
            cg1.Cmd = "UDPConnect";
            NetworkUtil.Broadcast(cg1);
            Util.ShowMsg("开始使用UDP同步");
        }
        else
        {
            Close();
            Util.ShowMsg("UDP测试失败,使用TCP通信");
        }
    }
Exemple #2
0
 private void OnBuy()
 {
     if (curSelect != null)
     {
         var cg = CGPlayerCmd.CreateBuilder();
         cg.Cmd = "Buy " + curSelect.id;
         NetworkUtil.Broadcast(cg);
     }
 }
Exemple #3
0
    private IEnumerator TestConnect()
    {
        var cg = CGPlayerCmd.CreateBuilder();

        cg.Cmd = "TestKCP";
        var avtar = AvatarInfo.CreateBuilder();
        var myId  = NetMatchScene.Instance.myId;

        avtar.Id      = myId;
        cg.AvatarInfo = avtar.Build();
        Bundle bundle;
        var    data = Bundle.GetPacketFull(cg, out bundle);

        Bundle.ReturnBundle(bundle);
        var pkData = data.data;

        SendPacketData(pkData);

        var waitTime = 0.0f;

        Log.Net("KCP TestBegin");
        var askTime = 0.0f;

        while (!Connected && waitTime < 10)
        {
            yield return(null);

            waitTime += Time.deltaTime;
            askTime  += Time.deltaTime;
            if (askTime >= 1f)
            {
                askTime = 0;
                SendPacketData(pkData);
            }
        }

        waitTime = 0;
        if (Connected)
        {
            Log.Net("KCP TestSuc");
            var cg1 = CGPlayerCmd.CreateBuilder();
            cg1.Cmd = "KCPConnect";
            NetworkUtil.Broadcast(cg1);
        }
        else
        {
            Close();
            Log.Net("KCP Test Fail");
        }
    }
    /// <summary>
    /// 同步客户端位置给服务器
    /// </summary>
    public override void SyncPos()
    {
        Log.Net("SyncPos");
        var me     = gameObject;
        var pos    = me.transform.position;
        var dir    = (int)me.transform.localRotation.eulerAngles.y;
        var intPos = NetworkUtil.ConvertPos(pos);

        var ainfo = AvatarInfo.CreateBuilder();

        ainfo.Id = GetComponent <NpcAttribute>().GetNetView().GetServerID();
        var change = false;
        //第一个报文用于建立UDP连接 在UDP连接没有建立起来一直走TCP

        /*
         * if (frameId == 1)
         * {
         *  change = true;
         * }
         */

        var diffTime = Time.time - lastSyncTime;

        //防止UDP连接断开

        /*
         * if (dir != lastInfo.Dir)
         * {
         *   ainfo.Dir = dir;
         *   lastInfo.Dir = ainfo.Dir;
         *   change = true;
         * }
         */

        if (mv != null)
        {
            //摇杆的操控命令 如何处理命令是服务器的问题
            var vcontroller     = mv.vcontroller;
            var h               = vcontroller.inputVector.x; //CameraRight
            var v               = vcontroller.inputVector.y; //CameraForward
            var camRight        = CameraController.Instance.camRight;
            var camForward      = CameraController.Instance.camForward;
            var targetDirection = h * camRight + v * camForward;
            var mdir            = targetDirection.normalized;
            var speed           = attr.GetSpeed();
            var sp              = mdir * speed;
            var SpeedX          = Util.GameToNetNum(sp.x);
            var SpeedY          = Util.GameToNetNum(sp.z);
            Log.Sys("MoveSpeed:" + SpeedX + ":" + SpeedY + ":" + h + ":" + v + ":" + targetDirection + ":" + camRight + ":" + camForward);
            if (SpeedX != lastInfo.SpeedX || SpeedY != lastInfo.SpeedY)
            {
                ainfo.SpeedX    = SpeedX;
                ainfo.SpeedY    = SpeedY;
                lastInfo.SpeedX = ainfo.SpeedX;
                lastInfo.SpeedY = ainfo.SpeedY;
                change          = true;
            }

            if (diffTime > 1 ||
                (intPos[0] != lastInfo.X || intPos[1] != lastInfo.Y || intPos[2] != lastInfo.Z ||
                 dir != lastInfo.Dir ||
                 SpeedX != lastInfo.SpeedX ||
                 SpeedY != lastInfo.SpeedY)
                )
            {
                lastSyncTime = Time.time;

                ainfo.X      = intPos[0];
                ainfo.Y      = intPos[1];
                ainfo.Z      = intPos[2];
                ainfo.Dir    = dir;
                ainfo.SpeedX = SpeedX;
                ainfo.SpeedY = SpeedY;

                change = true;

                lastInfo.X   = ainfo.X;
                lastInfo.Y   = ainfo.Y;
                lastInfo.Z   = ainfo.Z;
                lastInfo.Dir = ainfo.Dir;

                lastInfo.SpeedX = ainfo.SpeedX;
                lastInfo.SpeedY = ainfo.SpeedY;
            }
        }

        if (change)
        {
            var cg = CGPlayerCmd.CreateBuilder();
            cg.Cmd = "UpdateData";

            /*
             * var nf = frameId++;
             * var find = false;
             * if (low && nf > 127)
             * {
             *  find = true;
             *  low = false;
             * }
             * else if (nf == 0)
             * {
             *  find = true;
             *  low = true;
             * }
             * //ainfo.FrameID = nf;
             */

            cg.AvatarInfo = ainfo.Build();
            //cg.FrameId = NetworkScene.Instance.GetPredictServerTimeForNet();
            NetworkUtil.Broadcast(cg);

            /*
             * //报文区间变化 TCP稳定通知
             * if (find)
             * {
             * }
             * else
             * {
             *  NetworkUtil.BroadcastUDP(cg);
             * }
             */
        }
    }
    public override void SyncAttribute()
    {
        Log.Net("SyncAttribute");
        var me     = gameObject;
        var pos    = me.transform.position;
        var dir    = (int)me.transform.localRotation.eulerAngles.y;
        var meAttr = me.GetComponent <NpcAttribute>();
        var intPos = NetworkUtil.ConvertPos(pos);

        var ainfo  = AvatarInfo.CreateBuilder();
        var change = false;

        var intNetSpeed = (int)(meAttr.NetSpeed * 100);

        if (intNetSpeed != lastInfo.NetSpeed)
        {
            ainfo.NetSpeed = intNetSpeed;
            change         = true;

            lastInfo.NetSpeed = ainfo.NetSpeed;
        }
        var intThrowSpeed = (int)(meAttr.ThrowSpeed * 100);

        if (intThrowSpeed != lastInfo.ThrowSpeed)
        {
            ainfo.ThrowSpeed = intThrowSpeed;
            change           = true;

            lastInfo.ThrowSpeed = ainfo.ThrowSpeed;
        }
        var intJumpSpeed = (int)(meAttr.JumpForwardSpeed * 100);

        if (intJumpSpeed != lastInfo.JumpForwardSpeed)
        {
            ainfo.JumpForwardSpeed = intJumpSpeed;
            change = true;

            lastInfo.JumpForwardSpeed = ainfo.JumpForwardSpeed;
        }

        if (!string.Equals(meAttr.userName, lastInfo.Name))
        {
            ainfo.Name    = meAttr.userName;
            change        = true;
            lastInfo.Name = ainfo.Name;
        }

        if (lastInfo.Job != ServerData.Instance.playerInfo.Roles.Job)
        {
            ainfo.Job    = ServerData.Instance.playerInfo.Roles.Job;
            change       = true;
            lastInfo.Job = ainfo.Job;
        }

        if (change)
        {
            var cg = CGPlayerCmd.CreateBuilder();
            cg.Cmd        = "UpdateData";
            cg.AvatarInfo = ainfo.Build();
            NetworkUtil.Broadcast(cg);
        }
    }