public uint ReadUInt(uint min, uint max) { var range = max - min; var numBits = NetWriter.BitsToHoldUInt(range); var rvalue = ReadUInt(numBits); return(min + rvalue); }
public int ReadInt(int min, int max) { var range = (uint)(max - min); var numBits = NetWriter.BitsToHoldUInt(range); var rvalue = ReadUInt(numBits); return((int)(min + rvalue)); }
static NetServer() { var packets = Enum.GetValues(typeof(PacketId)); PACKET_MAX_ID = packets.Length - 1; foreach (var p in packets) { var w = new NetWriter(); _packetClearStart = w.Put(0, PACKET_MAX_ID, (int)p); _packets.Add((int)p, w); } _listener.NetworkReceiveEvent += (peer, readerOutdated, delieryMethod) => { _r.ReadFrom(readerOutdated); var packetId = (NetClient.PacketId)_r.ReadInt(0, NetClient.PACKET_MAX_ID); var p = _players[peer]; }; _listener.PeerConnectedEvent += peer => { var p = _players[peer]; _peers.Add(p, peer); _initialData.Clear(_initialDataStart); { PutPlayerId(_initialData, p); for (int j = 0; j < Players.MaxPlayers; j++) { if (j == p) { continue; } _initialData.PutPlayerId(j); } Send(_initialData, peer, DeliveryMethod.ReliableOrdered); } var w = CreatePacket(PacketId.PLAYER); { w.Put(0, PLAYER_SUB_IDS, 0); w.Put(true); w.PutPlayerId(Players.LocalID); SendToAll(w, DeliveryMethod.ReliableOrdered, peer); } }; _listener.PeerDisconnectedEvent += (peer, disconnectInfo) => { var p = _players[peer]; var w = CreatePacket(PacketId.PLAYER); { w.Put(0, PLAYER_SUB_IDS, 0); w.Put(false); w.PutPlayerId(p); SendToAll(w, DeliveryMethod.ReliableOrdered, peer); } Players.Remove(p); }; _listener.ConnectionRequestEvent += request => { if (_manager.ConnectedPeersCount + 1 >= Players.MaxPlayers) { request.Reject(); return; } _players.Add(request.Accept(), Players.GetFreeID()); }; }
static NetClient() { var packets = Enum.GetValues(typeof(PacketId)); PACKET_MAX_ID = packets.Length - 1; foreach (var p in packets) { var w = new NetWriter(); _packetClearStartBits = w.Put(0, PACKET_MAX_ID, (int)p); _packets.Add((int)p, w); } _listener.NetworkReceiveEvent += (peer, reader, delieryMethod) => { _r.ReadFrom(reader); if (_initialDataState == 0) { Players.Init(_r.ReadByte() + 1); Players.InsertLocal(_r.ReadPlayerId()); while (!_r.EndOfData) { int i = _r.ReadPlayerId(); Players.Insert(i); } // TODO: SET SCREEN TO GAMEPLAY _initialDataState++; } else { var packetId = (NetServer.PacketId)_r.ReadInt(0, NetServer.PACKET_MAX_ID); if (packetId == NetServer.PacketId.PLAYER) { var i = _r.ReadInt(0, NetServer.PLAYER_SUB_IDS); if (i == 0) { var p = NetServer.ReadPlayerId(_r); if (_r.ReadBool()) { Players.Insert(p); } else { Players.Remove(p); } } } } }; _listener.PeerDisconnectedEvent += (peer, disconnectInfo) => { // SERVER/HOST DIED Players.Clear(); // TODO: GO BACK TO MENU (?) }; }
public static void Send(NetWriter writer, DeliveryMethod deliveryMethod) => _manager.FirstPeer.Send(writer.Data, 0, writer.LengthBytes, deliveryMethod);
public long ReadLong(long min, long max) => min + (long)ReadULong(NetWriter.BitsToHoldULong((ulong)(max - min)));
public static void Send(NetWriter writer, NetPeer peer, DeliveryMethod deliveryMethod) => peer.Send(writer.Data, 0, writer.LengthBytes, deliveryMethod);
public static void SendToAll(NetWriter writer, DeliveryMethod deliveryMethod, NetPeer excludePeer) => _manager.SendToAll(writer.Data, 0, writer.LengthBytes, deliveryMethod, excludePeer);
public static void PutPlayerId(this NetWriter writer, int playerId) => writer.Put(0, Players.MaxPlayers - 1, playerId);