public Player(IdentificationPacket p, NetPeer peer) { name = p.name; id = p.id; health = 100.0f; includeInSnapshot = true; this.peer = peer; }
public static IdentificationPacket GetIdentification(byte[] data) { IdentificationPacket p = new IdentificationPacket(); NetDataReader r = new NetDataReader(data); p.name = r.GetString(r.GetInt()); p.id = new Guid(r.GetRemainingBytes()); return(p); }
private static void SetupListeners() { listener.NetworkErrorEvent += (endpoint, error) => { Console.WriteLine("An error occured on endpoint {0} with error {1}", endpoint.ToString(), error.ToString()); }; listener.NetworkLatencyUpdateEvent += (peer, latency) => { //Console.WriteLine("Client {0} latency was updated to {1}", peer.Id, latency); }; listener.ConnectionRequestEvent += rq => { NetPeer peer; if (server.PeersCount <= 14 /* max connections */) { peer = rq.Accept(); } else { rq.Reject(); return; } IdentificationPacket p = Packets.GetIdentification(rq.Data.GetRemainingBytes()); players.Add(peer.Id, new Player(p, peer)); Log("Player " + p.name + " is logged in with id " + p.id); }; listener.PeerConnectedEvent += (peer) => { peer.Send(Packets.CreateInit(), DeliveryMethod.ReliableOrdered); }; listener.PeerDisconnectedEvent += (peer, reason) => { Log("Peer " + peer.EndPoint + " disconnected"); if (players.ContainsKey(peer.Id)) { players.Remove(peer.Id); } }; listener.NetworkReceiveEvent += (peer, data, method) => { Player p; players.TryGetValue(peer.Id, out p); if (p == null) { server.DisconnectPeer(peer, Encoding.Unicode.GetBytes("Protocol error. Player must sent identification packet.")); return; } switch (data.GetByte()) { case 1: //Chat message packet => (int) messageLength; (string) message; (int -> cast to enum) recipients string msg = Packets.GetChatMsg(data.GetRemainingBytes()); SendToAll(Packets.CreateChat(p.GetName(), msg), DeliveryMethod.ReliableOrdered); break; case 2: //Position update packet => (transform/compressed) transform; (int) movedAtTick p.Move(data.GetShort(), data.GetShort(), data.GetShort()); p.Rotate(data.GetShort(), data.GetShort(), data.GetShort()); break; case 3: //Shoot command => (Vector3/compressed) direction; (int) shootAtTick break; case 4: //TODO: define use break; case 5: //TODO: define use break; } }; }