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++; } }
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); }
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); }
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); }
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; } }
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; } }
public static NetData CreateNetData(string id, byte status) { NetData n = new NetData(NetMessageType.Data); n.Write(id); n.Write(status); return(n); }
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; }
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; } }
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); }
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; } }
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; } }
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; } } }
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; } }
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); }
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); }
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; } }
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; } }
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; } }
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); } } }
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; } }
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(); }