Exemplo n.º 1
0
        protected BaseClient([NotNull] ICommsNetworkState network)
        {
            if (network == null)
            {
                throw new ArgumentNullException("network");
            }

            Log = Logs.Create(LogCategory.Network, GetType().Name);

            const int poolSize        = 32;
            const int byteBufferSize  = 1024;
            const int channelListSize = 8;
            var       byteArrayPool   = new ReadonlyLockedValue <Pool <byte[]> >(new Pool <byte[]>(poolSize, () => new byte[byteBufferSize]));
            var       channelListPool = new ConcurrentPool <List <RemoteChannel> >(poolSize, () => new List <RemoteChannel>(channelListSize));

            _sendQueue        = new SendQueue <TPeer>(this, byteArrayPool);
            _serverNegotiator = new ConnectionNegotiator <TPeer>(_sendQueue, network.PlayerName, network.CodecSettings);
            _lossSimulator    = new PacketDelaySimulator();

            _events = new EventQueue(byteArrayPool, channelListPool);
            _peers  = new SlaveClientCollection <TPeer>(_sendQueue, _serverNegotiator, _events, network.Rooms, network.PlayerName, network.CodecSettings);
            _peers.OnClientJoined        += OnAddedClient;
            _peers.OnClientIntroducedP2P += OnMetClient;

            _voiceReceiver = new VoiceReceiver <TPeer>(_serverNegotiator, _peers, _events, network.Rooms, channelListPool);
            _voiceSender   = new VoiceSender <TPeer>(_sendQueue, _serverNegotiator, _peers, _events, network.PlayerChannels, network.RoomChannels);

            _textReceiver = new TextReceiver <TPeer>(_events, network.Rooms, _peers);
            _textSender   = new TextSender <TPeer>(_sendQueue, _serverNegotiator, _peers);
        }
Exemplo n.º 2
0
        private BaseClient(string playerName, Rooms rooms, PlayerChannels playerChannels, RoomChannels roomChannels)
        {
            if (playerName == null)
            {
                throw new ArgumentNullException("playerName");
            }
            if (rooms == null)
            {
                throw new ArgumentNullException("rooms");
            }
            if (playerChannels == null)
            {
                throw new ArgumentNullException("playerChannels");
            }
            if (roomChannels == null)
            {
                throw new ArgumentNullException("roomChannels");
            }

            Log = Logs.Create(LogCategory.Network, GetType().Name);

            _playerName = playerName;

            _byteBufferPool = new ConcurrentPool <byte[]>(10, () => new byte[1024]);
            _queuedUnreliableTransmissions = new TransferBuffer <ArraySegment <byte> >(16);
            _queuedReliableTransmissions   = new TransferBuffer <ArraySegment <byte> >(16);
            _queuedEvents = new List <NetworkEvent>();

            _peers                = new PeerCollection(this);
            _channels             = new ChannelCollection(_peers.RoutingTable, playerChannels, roomChannels);
            _connectionNegotiator = new ConnectionNegotiator(this);
            _router               = new PacketRouter(this, _connectionNegotiator);
            _commsProcessor       = new CommsProcessor(this, _peers.RoutingTable, rooms, _channels);
            _roomsManager         = new RoomMembershipManager(this, _connectionNegotiator, rooms);
        }