Example #1
0
 public static void Host(int maxPlayers)
 {
     _manager.Start(PORT);
     _initialData.Clear(0);
     Players.Init(maxPlayers);
     _initialData.Put((byte)(Players.MaxPlayers - 1));
 }
Example #2
0
        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());
            };
        }
Example #3
0
        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 (?)
            };
        }
Example #4
0
 public static void PutPlayerId(this NetWriter writer, int playerId) => writer.Put(0, Players.MaxPlayers - 1, playerId);