public void NetDataManager(NetData data) { switch ((NetStatus)data.ReadByte()) { case NetStatus.Create: string n = data.ReadString(); Vector3 p = data.ReadVector3(); Quaternion r = data.ReadQuaternion(); Manager.CreateGameObject(prefabId, p, r); break; case NetStatus.Remain: Remain(data.ReadFloat()); break; case NetStatus.End: End(); 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; } }