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); }
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); }