public BlockDBEntry[] Lookup( int max, [NotNull] PlayerInfo[] infos, bool exclude ) { if( infos == null ) throw new ArgumentNullException( "infos" ); if( infos.Length == 0 ) throw new ArgumentException( "At least one PlayerInfo must be given", "infos" ); if( infos.Length == 1 ) return Lookup( max, infos[0], exclude ); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { processor = new ExcludingReturnOldestProcessor( map, max, entry => true, entry => infos.Any( t => entry.PlayerID == t.ID ) ); } else { processor = new ReturnOldestProcessor( map, max, entry => infos.Any( t => entry.PlayerID == t.ID ) ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] PlayerInfo[] infos, bool exclude, TimeSpan span ) { if( infos == null ) throw new ArgumentNullException( "infos" ); if( infos.Length == 0 ) throw new ArgumentException( "At least one PlayerInfo must be given", "infos" ); if( span < TimeSpan.Zero ) throw new ArgumentOutOfRangeException( "span" ); if( infos.Length == 1 ) return Lookup( max, infos[0], exclude, span ); long ticks = DateTime.UtcNow.Subtract( span ).ToUnixTime(); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { processor = new ExcludingReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks, entry => infos.Any( t => entry.PlayerID == t.ID ) ); } else { processor = new ReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && infos.Any( t => entry.PlayerID == t.ID ) ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] PlayerInfo info, bool exclude ) { if( info == null ) throw new ArgumentNullException( "info" ); int pid = info.ID; Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { processor = new ExcludingReturnOldestProcessor( map, max, entry => true, entry => entry.PlayerID == pid ); } else { processor = new ReturnOldestProcessor( map, max, entry => entry.PlayerID == pid ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] PlayerInfo info, bool exclude, TimeSpan span ) { if( info == null ) throw new ArgumentNullException( "info" ); if( span < TimeSpan.Zero ) throw new ArgumentOutOfRangeException( "span" ); int pid = info.ID; long ticks = DateTime.UtcNow.Subtract( span ).ToUnixTime(); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { processor = new ExcludingReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks, entry => entry.PlayerID == pid ); } else { processor = new ReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && entry.PlayerID == pid ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, BlockDBSearchType searchType, [NotNull] Func<BlockDBEntry, bool> selector ) { if( !IsEnabled || !IsEnabledGlobally ) { throw new InvalidOperationException( "Trying to lookup on disabled BlockDB." ); } if( max == 0 ) return new BlockDBEntry[0]; if( max < 0 ) throw new ArgumentOutOfRangeException( "max" ); if( selector == null ) throw new ArgumentNullException( "selector" ); IBlockDBQueryProcessor processor; switch( searchType ) { case BlockDBSearchType.ReturnAll: processor = new ReturnAllProcessor( max, selector ); break; case BlockDBSearchType.ReturnNewest: processor = new ReturnNewestProcessor( World.LoadMap(), max, selector ); break; case BlockDBSearchType.ReturnOldest: processor = new ReturnOldestProcessor( World.LoadMap(), max, selector ); break; default: throw new ArgumentOutOfRangeException( "searchType" ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] BoundingBox area, [NotNull] PlayerInfo[] infos, bool exclude, TimeSpan span ) { if( area == null ) throw new ArgumentNullException( "area" ); if( infos == null ) throw new ArgumentNullException( "infos" ); if( infos.Length == 0 ) throw new ArgumentException( "At least one PlayerInfo must be given", "infos" ); if( span < TimeSpan.Zero ) throw new ArgumentOutOfRangeException( "span" ); if( infos.Length == 1 ) return Lookup( max, area, infos[0], exclude, span ); long ticks = DateTime.UtcNow.Subtract( span ).ToUnixTime(); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { // ReSharper disable ImplicitlyCapturedClosure processor = new ExcludingReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && area.Contains( entry.X, entry.Y, entry.Z ), entry => infos.Any( t => entry.PlayerID == t.ID ) ); // ReSharper restore ImplicitlyCapturedClosure } else { processor = new ReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && area.Contains( entry.X, entry.Y, entry.Z ) && infos.Any( t => entry.PlayerID == t.ID ) ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] BoundingBox area, [NotNull] PlayerInfo[] infos, bool exclude ) { if( area == null ) throw new ArgumentNullException( "area" ); if( infos == null ) throw new ArgumentNullException( "infos" ); if( infos.Length == 0 ) throw new ArgumentException( "At least one PlayerInfo must be given", "infos" ); if( infos.Length == 1 ) return Lookup( max, area, infos[0], exclude ); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { // ReSharper disable ImplicitlyCapturedClosure processor = new ExcludingReturnOldestProcessor( map, max, entry => area.Contains( entry.X, entry.Y, entry.Z ), entry => infos.Any( t => entry.PlayerID == t.ID ) ); // ReSharper restore ImplicitlyCapturedClosure } else { processor = new ReturnOldestProcessor( map, max, entry => area.Contains( entry.X, entry.Y, entry.Z ) && infos.Any( t => entry.PlayerID == t.ID ) ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] BoundingBox area, [NotNull] PlayerInfo info, bool exclude, TimeSpan span ) { if( area == null ) throw new ArgumentNullException( "area" ); if( info == null ) throw new ArgumentNullException( "info" ); if( span < TimeSpan.Zero ) throw new ArgumentOutOfRangeException( "span" ); int pid = info.ID; long ticks = DateTime.UtcNow.Subtract( span ).ToUnixTime(); Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { // ReSharper disable ImplicitlyCapturedClosure processor = new ExcludingReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && area.Contains( entry.X, entry.Y, entry.Z ), entry => entry.PlayerID == pid ); // ReSharper restore ImplicitlyCapturedClosure } else { processor = new ReturnOldestProcessor( map, max, entry => entry.Timestamp >= ticks && entry.PlayerID == pid && area.Contains( entry.X, entry.Y, entry.Z ) ); } Traverse( processor ); return processor.GetResults(); }
public BlockDBEntry[] Lookup( int max, [NotNull] BoundingBox area, [NotNull] PlayerInfo info, bool exclude ) { if( area == null ) throw new ArgumentNullException( "area" ); if( info == null ) throw new ArgumentNullException( "info" ); int pid = info.ID; Map map = World.LoadMap(); IBlockDBQueryProcessor processor; if( exclude ) { // ReSharper disable ImplicitlyCapturedClosure processor = new ExcludingReturnOldestProcessor( map, max, entry => area.Contains( entry.X, entry.Y, entry.Z ), entry => entry.PlayerID == pid ); // ReSharper restore ImplicitlyCapturedClosure } else { processor = new ReturnOldestProcessor( map, max, entry => area.Contains( entry.X, entry.Y, entry.Z ) && entry.PlayerID == pid ); } Traverse( processor ); return processor.GetResults(); }