예제 #1
0
        public void SetTarget(int i, IPEndPoint ignore = null)
        {
            switch (Net.Status)
            {
            case Corsair.NetStatus.Server:
                NetData ns = Manager.CreateNetData(NetID, (byte)NetStatus.SetTarget);
                ns.Write(i);
                NetServer.Send(ns, NetType.TCP, ignore);
                break;

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

            case Corsair.NetStatus.Null:
                break;
            }
            index  = i;
            target = Player.Players[i].Head;
        }
예제 #2
0
        private static IEnumerator AutoNetCor()
        {
            NetClient.Flush();
            yield return(new WaitForSeconds(2f));

            if (NetClient.Servers.Count > 0)
            {
                while (Net.Status != Corsair.NetStatus.Client)
                {
                    NetClient.ConnectToServer(NetClient.Servers[0].IP);
                    yield return(new WaitForSeconds(2f));
                }
                NetData np = Manager.CreateNetData(NetID, (byte)NetStatus.GetPlayerIndex);
                NetClient.Send(np);
                NetData nl = Manager.CreateNetData(NetID, (byte)NetStatus.GetLevel);
                NetClient.Send(nl);
            }
            else
            {
                NetServer.Listen();
            }
        }
예제 #3
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);
                    }
                }
            }