示例#1
0
        public static void CreateGameObject(int id, Vector3 pos, Quaternion rota)
        {
            if (id > -1 && id < Prefabs.Count)
            {
                string name = id + "_" + Prefabs[id].name + "_" + index;
                switch (Net.Status)
                {
                case Corsair.NetStatus.Server:
                    NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.CreateGameObject);
                    n.Write(id);
                    n.Write(name);
                    n.Write(pos);
                    n.Write(rota);
                    NetServer.Send(n);

                    Instantiate(Prefabs[id], pos, rota).name = name;
                    break;

                case Corsair.NetStatus.Client:
                    Instantiate(Prefabs[id], pos, rota).name = name;
                    break;

                case Corsair.NetStatus.Null:
                    Instantiate(Prefabs[id], pos, rota).name = name;
                    break;
                }
                index++;
            }
        }
示例#2
0
        public override void Hurt(Corsair.AttackInfo a)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                ns.Write(a.Position);
                ns.Write(a.Rotation);
                ns.Write(a.Value);
                NetServer.Send(ns);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                nc.Write(a.Position);
                nc.Write(a.Rotation);
                nc.Write(a.Value);
                NetClient.Send(nc);
                break;

            case Corsair.NetStatus.Null:
                break;
            }
            base.Hurt(a);
            //animator.Play("Hurt");
            //attacks.prelude.gameObject.SetActive(false);
        }
示例#3
0
        public void Hurt(AttackInfo a, IPEndPoint ignore)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                ns.Write(a.Position);
                ns.Write(a.Rotation);
                ns.Write(a.Value);
                NetServer.Send(ns, NetType.TCP, ignore);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                nc.Write(a.Position);
                nc.Write(a.Rotation);
                nc.Write(a.Value);
                NetClient.Send(nc);
                break;

            case Corsair.NetStatus.Null:
                break;
            }
            _Hurt(a);
        }
示例#4
0
        public override void Hurt(AttackInfo a)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                ns.Write(a.Position);
                ns.Write(a.Rotation);
                ns.Write(a.Value);
                NetServer.Send(ns);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                nc.Write(a.Position);
                nc.Write(a.Rotation);
                nc.Write(a.Value);
                NetClient.Send(nc);
                break;

            case Corsair.NetStatus.Null:
                break;
            }
            _Hurt(a);
        }
示例#5
0
        public void NetDataManager(NetData data)
        {
            switch ((NetStatus)data.ReadByte())
            {
            case NetStatus.GetStatus:
                NetData ngs = Manager.CreateNetData(NetID, (byte)NetStatus.SetStatus);
                ngs.Write(heart);
                ngs.Write((byte)Status);
                NetServer.SendTo(ngs, data.RemoteIP);
                break;

            case NetStatus.SetStatus:
                heart  = data.ReadInt();
                Status = (ShipStatus)data.ReadInt();
                break;

            case NetStatus.ShipStatus:
                Status = (ShipStatus)data.ReadByte();
                break;

            case NetStatus.Avatar:
                transform.position = data.ReadVector3();
                transform.rotation = data.ReadQuaternion();
                break;

            case NetStatus.Death:
                Death(data.RemoteIP);
                break;
            }
        }
示例#6
0
        public void NetDataManager(NetData data)
        {
            switch ((NetStatus)data.ReadByte())
            {
            case NetStatus.GetStatus:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.SetStatus);
                n.Write(Heart);
                n.Write((byte)status);
                n.Write(index);
                NetServer.Send(n);
                break;

            case NetStatus.SetStatus:
                heart  = data.ReadInt();
                status = (RoleStatus)data.ReadByte();
                SetTarget(data.ReadInt(), data.RemoteIP);
                switch (status)
                {
                case RoleStatus.Death:
                    PlayDeath(data.RemoteIP);
                    break;

                case RoleStatus.Vectory:
                    PlayVictory(data.RemoteIP);
                    break;
                }
                break;

            case NetStatus.SetTarget:
                SetTarget(data.ReadInt(), data.RemoteIP);
                break;

            case NetStatus.Idle:
                PlayIdle(data.RemoteIP);
                break;

            case NetStatus.Attacking:
                PlayAttack(data.ReadInt(), data.RemoteIP);
                break;

            case NetStatus.Moving:
                break;

            case NetStatus.Hurt:
                Corsair.AttackInfo a = new Corsair.AttackInfo();
                a.Position = data.ReadVector3();
                a.Rotation = data.ReadQuaternion();
                a.Value    = data.ReadInt();
                base.Hurt(a);
                break;

            case NetStatus.Death:
                PlayDeath(data.RemoteIP);
                break;

            case NetStatus.Victory:
                PlayVictory(data.RemoteIP);
                break;
            }
        }
示例#7
0
        public static NetData CreateNetData(string id, byte status)
        {
            NetData n = new NetData(NetMessageType.Data);

            n.Write(id);
            n.Write(status);
            return(n);
        }
示例#8
0
        public void Select(int i, IPEndPoint ignore = null)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.Select);
                ns.Write(i);
                NetServer.Send(ns, NetType.TCP, ignore);

                _Select(i);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.Select);
                nc.Write(i);
                NetClient.Send(nc);

                _Select(i);
                break;

            case Corsair.NetStatus.Null:
                _Select(i);
                break;
            }
            index = i;
        }
示例#9
0
        public static void SetLevel(int i)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.SetLevel);
                n.Write(i);
                NetServer.Send(n);
                if (i != Level)
                {
                    LoadLevel(i);
                }
                break;

            case Corsair.NetStatus.Client:
                break;

            case Corsair.NetStatus.Null:
                if (i != Level)
                {
                    LoadLevel(i);
                }
                break;
            }
        }
示例#10
0
        public static void ConnectToServer(IPEndPoint ip, string password = null)
        {
            if (Status != NetStatus.Null)
            {
                Debug.LogError("请先退出Net状态:" + Status);
                return;
            }
            NetData n = new NetData(NetMessageType.Connecting);

            n.Write(PlayerName);
            if (password != null)
            {
                n.Write(password);
            }
            NetUdp.Send(n, ip);
        }
示例#11
0
        public void LaunchTo(Vector3 point, IPEndPoint ignore = null)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.LaunchTo);
                ns.Write(point);
                NetServer.Send(ns, NetType.TCP, ignore);

                Main.LaunchTo(point);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.LaunchTo);
                nc.Write(point);
                NetClient.Send(nc);

                Main.LaunchTo(point);
                break;

            case Corsair.NetStatus.Null:
                Main.LaunchTo(point);
                break;
            }
        }
示例#12
0
        protected void FixedUpdate()
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.Avatar);
                n.Write(transform.position);
                n.Write(transform.rotation);
                NetServer.Send(n, NetType.UDP);
                break;

            case Corsair.NetStatus.Client:
                break;

            case Corsair.NetStatus.Null:
                break;
            }
        }
示例#13
0
        public void NetDataManager(NetData data)
        {
            if (!isMain)
            {
                switch ((NetStatus)data.ReadByte())
                {
                case NetStatus.GetStatus:
                    NetData ngs = Manager.CreateNetData(NetID, (byte)NetStatus.SetStatus);
                    ngs.Write(Heart);
                    ngs.Write((byte)status);
                    NetServer.SendTo(ngs, data.RemoteIP);
                    break;

                case NetStatus.SetStatus:
                    heart  = data.ReadInt();
                    status = (PlayerStatus)data.ReadByte();
                    break;

                case NetStatus.Avatar:
                    head.transform.position = data.ReadVector3();
                    head.transform.rotation = data.ReadQuaternion();

                    left.transform.position = data.ReadVector3();
                    left.transform.rotation = data.ReadQuaternion();

                    right.transform.position = data.ReadVector3();
                    right.transform.rotation = data.ReadQuaternion();
                    break;

                case NetStatus.Death:
                    Death(data.RemoteIP);
                    break;

                case NetStatus.Hurt:
                    AttackInfo a = new AttackInfo();
                    a.Position = data.ReadVector3();
                    a.Rotation = data.ReadQuaternion();
                    a.Value    = data.ReadInt();
                    Hurt(a, data.RemoteIP);
                    break;
                }
            }
        }
示例#14
0
        public override void Hurt(AttackInfo a)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.Hurt);
                n.Write(a.Position);
                n.Write(a.Rotation);
                n.Write(a.Value);
                NetServer.Send(n);

                base.Hurt(a);
                LifeEvent.Invoke(heart / (float)max);
                break;

            case Corsair.NetStatus.Client:
                break;

            case Corsair.NetStatus.Null:
                base.Hurt(a);
                LifeEvent.Invoke(heart / (float)max);
                break;
            }
        }
示例#15
0
        public bool PlayAttack(int i, IPEndPoint ignore = null)
        {
            if (Time.time - attackLast[i] < attackCD[i])
            {
                return(false);
            }
            attackLast[i] = Time.time;
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.Attacking);
                ns.Write(i);
                NetServer.Send(ns, NetType.TCP, ignore);
                break;

            case Corsair.NetStatus.Client:
                NetData nc = Manager.CreateNetData(NetID, (byte)NetStatus.Attacking);
                nc.Write(i);
                NetClient.Send(nc);
                break;

            case Corsair.NetStatus.Null:
                break;
            }
            switch (i)
            {
            case 0:
                isLookAt = true;
                animator.Play(attackClip[0]);
                transform.LookAt(target, Vector3.up);
                break;

            case 1:
                isLookAt = false;
                animator.Play(attackClip[1]);
                break;

            case 2:
                isLookAt = true;
                animator.Play(attackClip[2]);
                transform.LookAt(target, Vector3.up);
                break;
            }
            return(true);
        }
示例#16
0
        private NetData GetAvatar()
        {
            NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.Avatar);

            n.Write(Player_Vive.Main.Camera.transform.position);
            n.Write(Player_Vive.Main.Camera.transform.rotation);

            n.Write(Player_Vive.Main.Left.transform.position);
            n.Write(Player_Vive.Main.Left.transform.rotation);

            n.Write(Player_Vive.Main.Right.transform.position);
            n.Write(Player_Vive.Main.Right.transform.rotation);
            return(n);
        }
示例#17
0
        public void SetStatus(ShipStatus s)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.ShipStatus);
                n.Write((byte)s);
                NetServer.Send(n);

                Status = s;
                break;

            case Corsair.NetStatus.Client:
                break;

            case Corsair.NetStatus.Null:
                Status = s;
                break;
            }
        }
示例#18
0
        public void Remain(float y)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData n = Manager.CreateNetData(NetID, (byte)NetStatus.Remain);
                n.Write(y);
                NetServer.Send(n);
                RemainEvent.Invoke(y);
                break;

            case Corsair.NetStatus.Client:
                RemainEvent.Invoke(y);
                break;

            case Corsair.NetStatus.Null:
                RemainEvent.Invoke(y);
                break;
            }
        }
示例#19
0
        public void NetManager(NetData data)
        {
            switch ((NetStatus)data.ReadByte())
            {
            case NetStatus.GetStatus:
                NetData ngs = Manager.CreateNetData(NetID, (byte)NetStatus.SetStatus);
                ngs.Write(heart);
                NetServer.Send(ngs);
                break;

            case NetStatus.SetStatus:
                heart = data.ReadInt();
                if (heart > 0)
                {
                    LifeEvent.Invoke(heart / (float)max);
                }
                else
                {
                    base.Death();
                    Ramparts.Remove(this);
                }
                break;

            case NetStatus.Hurt:
                AttackInfo a = new AttackInfo();
                a.Position = data.ReadVector3();
                a.Rotation = data.ReadQuaternion();
                a.Value    = data.ReadInt();
                base.Hurt(a);
                LifeEvent.Invoke(heart / (float)max);
                break;

            case NetStatus.Death:
                base.Death();
                Ramparts.Remove(this);
                break;
            }
        }
示例#20
0
            private void Update()
            {
                while (NetDatas.Count > 0)
                {
                    NetData n = NetDatas[0];
                    try
                    {
                        switch (n.MessageType)
                        {
                        // 1 下线警告
                        case NetMessageType.Warning:
                            Debug.LogWarning(n.ReadString());
                            break;

                        case NetMessageType.Error:
                            Debug.LogError(n.ReadString());
                            break;

                        case NetMessageType.Heartbeat:
                            int d = DateTime.Now.Millisecond - n.ReadInt();
                            Debug.Log(n.RemoteIP + "延迟:" + d);
                            break;

                        case NetMessageType.Data:
                            break;

                        case NetMessageType.GainServer:
                            if (Net.Status == NetStatus.Server)
                            {
                                NetData g = new NetData(NetMessageType.SendServer);
                                g.Write(NetServer.ServerName);
                                g.Write(NetServer.PlayerName);
                                g.Write(NetServer.IsPassword);
                                g.Write(NetServer.ClientNumber);
                                g.Write(NetServer.ClientMax);
                                NetUdp.Send(g, n.RemoteIP);
                            }
                            break;

                        case NetMessageType.SendServer:
                            string     ssn = n.ReadString();
                            string     spn = n.ReadString();
                            IPEndPoint sip = n.RemoteIP;
                            bool       spd = n.ReadBool();
                            int        scn = n.ReadInt();
                            int        scm = n.ReadInt();
                            NetClient.Servers.Add(new NetServer.Info(ssn, spn, sip, spd, scn, scm));
                            break;

                        case NetMessageType.Connecting:
                            if (Net.Status == NetStatus.Server)
                            {
                                if (NetServer.ClientNumber >= NetServer.ClientMax)
                                {
                                    NetData cw0 = new NetData(NetMessageType.Warning);
                                    cw0.Write("该服务器玩家数已满!");
                                    NetUdp.Send(cw0, n.RemoteIP);
                                }
                                string cn = n.ReadString();

                                if (NetServer.IsPassword)
                                {
                                    if (!n.IsRead())
                                    {
                                        NetData cw1 = new NetData(NetMessageType.Warning);
                                        cw1.Write("该服务器需要密码访问!");
                                        NetUdp.Send(cw1, n.RemoteIP);
                                        break;
                                    }

                                    string cp = n.ReadString();
                                    if (NetServer.Password != cp)
                                    {
                                        NetData cw2 = new NetData(NetMessageType.Warning);
                                        cw2.Write("该服务器访问密码错误!");
                                        NetUdp.Send(cw2, n.RemoteIP);
                                        break;
                                    }
                                }
                                if (NetServer.Clients.ContainsIP(n.RemoteIP))
                                {
                                    NetData cw3 = new NetData(NetMessageType.Warning);
                                    cw3.Write("请勿重复登录!");
                                    NetUdp.Send(cw3, n.RemoteIP);
                                    break;
                                }
                                NetServer.Clients.Add(new NetClient.Info(cn, n.RemoteIP));
                                NetData cw = new NetData(NetMessageType.ConnectPass);
                                NetUdp.Send(cw, n.RemoteIP);
                            }
                            break;

                        case NetMessageType.ConnectPass:
                            NetClient.Connect(n.RemoteIP);
                            break;

                        default:
                            Debug.Log("未知数据包,来自:" + n.RemoteIP);
                            break;
                        }
                        n.Reset();
                        if (NetDataEvent != null)
                        {
                            NetDataEvent(n);
                        }
                        NetDatas.RemoveAt(0);
                    }
                    catch (Exception e)
                    {
                        Debug.LogError("数据包解析错误:" + e.Message.ToString());
                        NetDatas.RemoveAt(0);
                    }
                }
            }
示例#21
0
        private static void NetManager(NetData data)
        {
            switch ((NetStatus)data.ReadByte())
            {
            case NetStatus.GetLevel:
                NetData ngl = Manager.CreateNetData(NetID, (byte)NetStatus.SetLevel);
                ngl.Write(Level);
                NetServer.SendTo(ngl, data.RemoteIP);
                break;

            case NetStatus.SetLevel:
                int level = data.ReadInt();
                if (Level != level)
                {
                    LoadLevel(level);
                }
                break;

            case NetStatus.ResetLevel:
                LoadLevel(data.ReadInt());
                break;

            case NetStatus.GetPlayerIndex:
                NetData ngp = Manager.CreateNetData(NetID, (byte)NetStatus.SetPlayerIndex);
                ngp.Write(1);
                NetServer.SendTo(ngp, data.RemoteIP);
                break;

            case NetStatus.SetPlayerIndex:
                SetPlayerIndex(data.ReadInt());
                break;

            case NetStatus.GetGameStatus:
                NetData ngg = Manager.CreateNetData(NetID, (byte)NetStatus.SetGameStatus);
                ngg.Write((byte)GameStatus);
                NetServer.SendTo(ngg, data.RemoteIP);
                break;

            case NetStatus.SetGameStatus:
                SetGameStatus((GameStatus)data.ReadByte());
                break;

            case NetStatus.CreateGameObject:
                int        id = data.ReadInt();
                string     na = data.ReadString();
                Vector3    po = data.ReadVector3();
                Quaternion ro = data.ReadQuaternion();
                Instantiate(Prefabs[id], po, ro).name = na;
                break;

            case NetStatus.GetGameObjects:
                for (int i = 0; i < GameObjects.Count; i++)
                {
                    NetData    ng = Manager.CreateNetData(NetID, (byte)NetStatus.CreateGameObject);
                    GameObject g  = GameObjects[i];
                    ng.Write(int.Parse(g.name.Substring(0, g.name.IndexOf('_'))));
                    ng.Write(g.name);
                    ng.Write(g.transform.position);
                    ng.Write(g.transform.rotation);
                    NetServer.SendTo(ng, data.RemoteIP);
                }
                break;
            }
        }
示例#22
0
            public void Receive()
            {
                Thread r = new Thread(() =>
                {
                    try
                    {
                        byte[] d           = new byte[4096];
                        tcp.ReceiveTimeout = Net.Timeout;
                        int l = tcp.Receive(d);
                        while (l > 0)
                        {
                            if (LogEnable)
                            {
                                Debug.Log("收到" + ip + ",tcp数据长度:" + l);
                            }
                            if (l < d.Length)
                            {
                                byte[] _d = new byte[l];
                                Array.Copy(d, 0, _d, 0, l);
                                buffer.Write(_d);
                            }
                            else
                            {
                                buffer.Write(d);
                            }

                            if (buffer.IsRead)
                            {
                                NetData n  = NetData.ReadBuffer(buffer.Read());
                                n.RemoteIP = ip;
                                Net.NetDatas.Add(n);
                            }
                            l = tcp.Receive(d);
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogError("tcpInfo:" + ip + ":" + e.Message.ToString());
                    }
                    finally
                    {
                        if (LogEnable)
                        {
                            Debug.Log("tcp接收监听关闭");
                        }
                        Close();
                    }
                });

                r.Start();
                //心跳包线程
                Thread h = new Thread(() =>
                {
                    while (true)
                    {
                        Thread.Sleep(Timeout / 2);
                        if (tcp != null)
                        {
                            NetData n = new NetData(NetMessageType.Heartbeat);
                            n.Write(DateTime.Now.Millisecond);
                            Send(n.ToBuffer());
                        }
                        else
                        {
                            return;
                        }
                    }
                });

                h.Start();
            }