Beispiel #1
0
        public static DependencyReader CreateReader(this ICacheFile cache, IAddressTranslator translator, Stream stream, bool leaveOpen)
        {
            var reader = new DependencyReader(stream, cache.ByteOrder, leaveOpen);

            reader.RegisterInstance(cache);
            reader.RegisterInstance(translator);

            if (cache.CacheType >= CacheType.Halo2Xbox)
            {
                reader.RegisterType(() => new Matrix4x4
                {
                    M11 = reader.ReadSingle(),
                    M12 = reader.ReadSingle(),
                    M13 = reader.ReadSingle(),

                    M21 = reader.ReadSingle(),
                    M22 = reader.ReadSingle(),
                    M23 = reader.ReadSingle(),

                    M31 = reader.ReadSingle(),
                    M32 = reader.ReadSingle(),
                    M33 = reader.ReadSingle(),

                    M41 = reader.ReadSingle(),
                    M42 = reader.ReadSingle(),
                    M43 = reader.ReadSingle(),
                });
            }

            return(reader);
        }
Beispiel #2
0
 /// <summary>
 /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
 /// One configuration instance per Cluster instance.
 /// </summary>
 internal Configuration(Policies policies,
                        ProtocolOptions protocolOptions,
                        PoolingOptions poolingOptions,
                        SocketOptions socketOptions,
                        ClientOptions clientOptions,
                        IAuthProvider authProvider,
                        IAuthInfoProvider authInfoProvider,
                        QueryOptions queryOptions,
                        IAddressTranslator addressTranslator)
 {
     if (addressTranslator == null)
     {
         throw new ArgumentNullException("addressTranslator");
     }
     if (queryOptions == null)
     {
         throw new ArgumentNullException("queryOptions");
     }
     _policies          = policies;
     _protocolOptions   = protocolOptions;
     _poolingOptions    = poolingOptions;
     _socketOptions     = socketOptions;
     _clientOptions     = clientOptions;
     _authProvider      = authProvider;
     _authInfoProvider  = authInfoProvider;
     _queryOptions      = queryOptions;
     _addressTranslator = addressTranslator;
 }
Beispiel #3
0
        public DependencyReader CreateReader(IAddressTranslator translator, IPointerExpander expander)
        {
            var reader = CreateReader(translator);

            reader.RegisterInstance(expander);
            return(reader);
        }
 /// <summary>
 /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
 /// One configuration instance per Cluster instance.
 /// </summary>
 internal Configuration(Policies policies,
                        ProtocolOptions protocolOptions,
                        PoolingOptions poolingOptions,
                        SocketOptions socketOptions,
                        ClientOptions clientOptions,
                        IAuthProvider authProvider,
                        IAuthInfoProvider authInfoProvider,
                        QueryOptions queryOptions,
                        IAddressTranslator addressTranslator,
                        IInterceptor interceptor)
 {
     if (addressTranslator == null)
     {
         throw new ArgumentNullException("addressTranslator");
     }
     if (queryOptions == null)
     {
         throw new ArgumentNullException("queryOptions");
     }
     _policies          = policies;
     _protocolOptions   = protocolOptions;
     _poolingOptions    = poolingOptions;
     _socketOptions     = socketOptions;
     _clientOptions     = clientOptions;
     _authProvider      = authProvider;
     _authInfoProvider  = authInfoProvider;
     _queryOptions      = queryOptions;
     _addressTranslator = addressTranslator;
     // Create the buffer pool with 16KB for small buffers and 256Kb for large buffers.
     // The pool does not eagerly reserve the buffers, so it doesn't take unnecessary memory
     // to create the instance.
     _bufferPool  = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength);
     _timer       = new HashedWheelTimer();
     _interceptor = interceptor;
 }
        internal ControlConnection(Cluster cluster,
                                   Policies policies,
                                   ProtocolOptions protocolOptions,
                                   PoolingOptions poolingOptions,
                                   SocketOptions socketOptions,
                                   ClientOptions clientOptions,
                                   IAuthProvider authProvider,
                                   IAuthInfoProvider authInfoProvider,
                                   IAddressTranslator addressTranslator)
        {
            _cluster              = cluster;
            _addressTranslator    = addressTranslator;
            _reconnectionSchedule = _reconnectionPolicy.NewSchedule();
            _reconnectionTimer    = new Timer(ReconnectionClb, null, Timeout.Infinite, Timeout.Infinite);

            var config = new Configuration
                         (
                policies,
                protocolOptions,
                poolingOptions,
                socketOptions,
                clientOptions,
                authProvider,
                authInfoProvider,
                new QueryOptions(),
                addressTranslator
                         );

            _session = new Session(cluster, config, "", _controlConnectionProtocolVersion);
        }
Beispiel #6
0
 /// <summary>
 /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
 /// One configuration instance per Cluster instance.
 /// </summary>
 internal Configuration(Policies policies,
                        ProtocolOptions protocolOptions,
                        PoolingOptions poolingOptions,
                        SocketOptions socketOptions,
                        ClientOptions clientOptions,
                        IAuthProvider authProvider,
                        IAuthInfoProvider authInfoProvider,
                        QueryOptions queryOptions,
                        IAddressTranslator addressTranslator,
                        IStartupOptionsFactory startupOptionsFactory,
                        ISessionFactoryBuilder <IInternalCluster, IInternalSession> sessionFactoryBuilder)
 {
     AddressTranslator     = addressTranslator ?? throw new ArgumentNullException(nameof(addressTranslator));
     QueryOptions          = queryOptions ?? throw new ArgumentNullException(nameof(queryOptions));
     Policies              = policies;
     ProtocolOptions       = protocolOptions;
     PoolingOptions        = poolingOptions;
     SocketOptions         = socketOptions;
     ClientOptions         = clientOptions;
     AuthProvider          = authProvider;
     AuthInfoProvider      = authInfoProvider;
     StartupOptionsFactory = startupOptionsFactory;
     SessionFactoryBuilder = sessionFactoryBuilder;
     // Create the buffer pool with 16KB for small buffers and 256Kb for large buffers.
     // The pool does not eagerly reserve the buffers, so it doesn't take unnecessary memory
     // to create the instance.
     BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength);
     Timer      = new HashedWheelTimer();
 }
Beispiel #7
0
 /// <summary>
 /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
 /// One configuration instance per Cluster instance.
 /// </summary>
 internal Configuration(Policies policies,
     ProtocolOptions protocolOptions,
     PoolingOptions poolingOptions,
     SocketOptions socketOptions,
     ClientOptions clientOptions,
     IAuthProvider authProvider,
     IAuthInfoProvider authInfoProvider,
     QueryOptions queryOptions,
     IAddressTranslator addressTranslator)
 {
     if (addressTranslator == null)
     {
         throw new ArgumentNullException("addressTranslator");
     }
     if (queryOptions == null)
     {
         throw new ArgumentNullException("queryOptions");
     }
     _policies = policies;
     _protocolOptions = protocolOptions;
     _poolingOptions = poolingOptions;
     _socketOptions = socketOptions;
     _clientOptions = clientOptions;
     _authProvider = authProvider;
     _authInfoProvider = authInfoProvider;
     _queryOptions = queryOptions;
     _addressTranslator = addressTranslator;
 }
        /// <summary>
        /// Parses address from system table query response and translates it using the provided <paramref name="translator"/>.
        /// </summary>
        internal IPEndPoint GetRpcEndPoint(bool isPeersV2, IRow row, IAddressTranslator translator, int defaultPort)
        {
            IPAddress address;

            address = isPeersV2 ? GetRpcAddressFromPeersV2(row) : GetRpcAddressFromLocalPeersV1(row);

            if (address == null)
            {
                return(null);
            }

            if (TopologyRefresher.BindAllAddress.Equals(address))
            {
                if (row.ContainsColumn("peer") && !row.IsNull("peer"))
                {
                    // system.peers
                    address = row.GetValue <IPAddress>("peer");
                }
                else if (row.ContainsColumn("broadcast_address") && !row.IsNull("broadcast_address"))
                {
                    // system.local
                    address = row.GetValue <IPAddress>("broadcast_address");
                }
                else if (row.ContainsColumn("listen_address") && !row.IsNull("listen_address"))
                {
                    // system.local
                    address = row.GetValue <IPAddress>("listen_address");
                }
                else
                {
                    ControlConnection.Logger.Error(
                        "Found host with 0.0.0.0 as rpc_address and nulls as listen_address and broadcast_address. " +
                        "Because of this, the driver can not connect to this node.");
                    return(null);
                }

                ControlConnection.Logger.Warning(
                    "Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. " +
                    "If this is incorrect you should avoid the use of 0.0.0.0 server side.", address.ToString());
            }

            var rpcPort = defaultPort;

            if (isPeersV2)
            {
                var nullableRpcPort = GetRpcPortFromPeersV2(row);
                if (nullableRpcPort == null)
                {
                    ControlConnection.Logger.Warning(
                        "Found host with NULL native_port, using default port ({0}) to contact it instead. ", rpcPort);
                }
                else
                {
                    rpcPort = nullableRpcPort.Value;
                }
            }

            return(translator.Translate(new IPEndPoint(address, rpcPort)));
        }
Beispiel #9
0
        public DependencyReader CreateReader(IAddressTranslator translator)
        {
            if (translator == null)
            {
                throw new ArgumentNullException(nameof(translator));
            }

            return(CreateReader(FileName, translator));
        }
Beispiel #10
0
        /// <summary>
        /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
        /// One configuration instance per Cluster instance.
        /// </summary>
        internal Configuration(Policies policies,
                               ProtocolOptions protocolOptions,
                               PoolingOptions poolingOptions,
                               SocketOptions socketOptions,
                               ClientOptions clientOptions,
                               IAuthProvider authProvider,
                               IAuthInfoProvider authInfoProvider,
                               QueryOptions queryOptions,
                               IAddressTranslator addressTranslator,
                               IStartupOptionsFactory startupOptionsFactory,
                               ISessionFactoryBuilder <IInternalCluster, IInternalSession> sessionFactoryBuilder,
                               IReadOnlyDictionary <string, IExecutionProfile> executionProfiles,
                               IRequestOptionsMapper requestOptionsMapper,
                               MetadataSyncOptions metadataSyncOptions,
                               IEndPointResolver endPointResolver,
                               IRequestHandlerFactory requestHandlerFactory         = null,
                               IHostConnectionPoolFactory hostConnectionPoolFactory = null,
                               IRequestExecutionFactory requestExecutionFactory     = null,
                               IConnectionFactory connectionFactory = null,
                               IControlConnectionFactory controlConnectionFactory = null,
                               IPrepareHandlerFactory prepareHandlerFactory       = null,
                               ITimerFactory timerFactory = null)
        {
            AddressTranslator     = addressTranslator ?? throw new ArgumentNullException(nameof(addressTranslator));
            QueryOptions          = queryOptions ?? throw new ArgumentNullException(nameof(queryOptions));
            Policies              = policies;
            ProtocolOptions       = protocolOptions;
            PoolingOptions        = poolingOptions;
            SocketOptions         = socketOptions;
            ClientOptions         = clientOptions;
            AuthProvider          = authProvider;
            AuthInfoProvider      = authInfoProvider;
            StartupOptionsFactory = startupOptionsFactory;
            SessionFactoryBuilder = sessionFactoryBuilder;
            RequestOptionsMapper  = requestOptionsMapper;
            MetadataSyncOptions   = metadataSyncOptions?.Clone() ?? new MetadataSyncOptions();
            DnsResolver           = new DnsResolver();
            EndPointResolver      = endPointResolver ?? new EndPointResolver(DnsResolver, protocolOptions);

            RequestHandlerFactory     = requestHandlerFactory ?? new RequestHandlerFactory();
            HostConnectionPoolFactory = hostConnectionPoolFactory ?? new HostConnectionPoolFactory();
            RequestExecutionFactory   = requestExecutionFactory ?? new RequestExecutionFactory();
            ConnectionFactory         = connectionFactory ?? new ConnectionFactory();
            ControlConnectionFactory  = controlConnectionFactory ?? new ControlConnectionFactory();
            PrepareHandlerFactory     = prepareHandlerFactory ?? new PrepareHandlerFactory();
            TimerFactory = timerFactory ?? new TaskBasedTimerFactory();

            RequestOptions    = RequestOptionsMapper.BuildRequestOptionsDictionary(executionProfiles, policies, socketOptions, clientOptions, queryOptions);
            ExecutionProfiles = BuildExecutionProfilesDictionary(executionProfiles, RequestOptions);

            // Create the buffer pool with 16KB for small buffers and 256Kb for large buffers.
            // The pool does not eagerly reserve the buffers, so it doesn't take unnecessary memory
            // to create the instance.
            BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength);
            Timer      = new HashedWheelTimer();
        }
Beispiel #11
0
        public Pointer64(long value, IAddressTranslator translator)
        {
            if (translator == null)
            {
                throw new ArgumentNullException(nameof(translator));
            }

            this._value     = value;
            this.translator = translator;
        }
Beispiel #12
0
        public Pointer(int value, IAddressTranslator translator, IPointerExpander expander)
        {
            if (translator == null)
            {
                throw new ArgumentNullException(nameof(translator));
            }

            this._value     = value;
            this.translator = translator;
            this.expander   = expander;
        }
Beispiel #13
0
        public BlockCollection(DependencyReader reader, ICacheFile cache, IAddressTranslator translator, IPointerExpander expander)
            : base(reader, cache, translator, expander)
        {
            if (IsInvalid)
            {
                return;
            }

            reader.BaseStream.Position = Pointer.Address;
            for (int i = 0; i < Count; i++)
            {
                items.Add((T)reader.ReadObject(typeof(T), (int)cache.CacheType));
            }
        }
Beispiel #14
0
        private DependencyReader CreateReader(string fileName, IAddressTranslator translator)
        {
            var fs     = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            var reader = new DependencyReader(fs, ByteOrder);

            reader.RegisterInstance <CacheFile>(this);
            reader.RegisterInstance <ICacheFile>(this);

            if (translator != null)
            {
                reader.RegisterInstance <IAddressTranslator>(translator);
            }

            return(reader);
        }
Beispiel #15
0
        public Pointer64(DependencyReader reader, IAddressTranslator translator)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (translator == null)
            {
                throw new ArgumentNullException(nameof(translator));
            }

            this._value     = reader.ReadInt64();
            this.translator = translator;
        }
Beispiel #16
0
        /// <summary>
        /// Uses system.peers values to build the Address translator
        /// </summary>
        internal static IPEndPoint GetAddressForPeerHost(Row row, IAddressTranslator translator, int port)
        {
            var address = row.GetValue <IPAddress>("rpc_address");

            if (address == null)
            {
                return(null);
            }
            if (BindAllAddress.Equals(address) && !row.IsNull("peer"))
            {
                address = row.GetValue <IPAddress>("peer");
                _logger.Warning(String.Format("Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. If this is incorrect you should avoid the use of 0.0.0.0 server side.", address));
            }

            return(translator.Translate(new IPEndPoint(address, port)));
        }
        /// <inheritdoc />
        public IPEndPoint GetOrParseHostIpEndPoint(Row row, IAddressTranslator translator, int port)
        {
            if (_hostIpEndPoint != null)
            {
                return(_hostIpEndPoint);
            }

            var ipEndPoint = ControlConnection.GetAddressForLocalOrPeerHost(row, translator, port);

            if (ipEndPoint == null)
            {
                throw new DriverInternalError("Could not parse the node's ip address from system tables.");
            }

            return(ipEndPoint);
        }
Beispiel #18
0
        public TagBlock(DependencyReader reader, ICacheFile cache, IAddressTranslator translator, IPointerExpander expander)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (translator == null)
            {
                throw new ArgumentNullException(nameof(translator));
            }

            Count   = reader.ReadInt32();
            Pointer = new Pointer(reader.ReadInt32(), translator, expander);

            IsInvalid = Count <= 0 || Pointer.Address < 0 || Pointer.Address >= reader.BaseStream.Length;
        }
Beispiel #19
0
 internal Configuration(Policies policies,
                        ProtocolOptions protocolOptions,
                        PoolingOptions poolingOptions,
                        SocketOptions socketOptions,
                        ClientOptions clientOptions,
                        IAuthProvider authProvider,
                        IAuthInfoProvider authInfoProvider,
                        QueryOptions queryOptions,
                        IAddressTranslator addressTranslator)
 {
     _policies          = policies;
     _protocolOptions   = protocolOptions;
     _poolingOptions    = poolingOptions;
     _socketOptions     = socketOptions;
     _clientOptions     = clientOptions;
     _authProvider      = authProvider;
     _authInfoProvider  = authInfoProvider;
     _queryOptions      = queryOptions;
     _addressTranslator = addressTranslator;
 }
Beispiel #20
0
        internal CacheFile(CacheArgs args)
        {
            if (!File.Exists(args.FileName))
            {
                throw Exceptions.FileNotFound(args.FileName);
            }

            FileName    = args.FileName;
            ByteOrder   = args.ByteOrder;
            BuildString = args.BuildString;
            CacheType   = args.CacheType;
            Metadata    = args.Metadata;

            HeaderTranslator   = new AlphaHeaderAddressTranslator(this);
            MetadataTranslator = new AlphaTagAddressTranslator(this);

            using (var reader = CreateReader(HeaderTranslator))
                Header = reader.ReadObject <CacheHeader>((int)CacheType);

            //change IndexPointer to use MetadataTranslator instead of HeaderTranslator
            Header.IndexPointer = new Pointer(Header.IndexPointer.Value, MetadataTranslator);

            using (var reader = CreateReader(MetadataTranslator))
            {
                reader.Seek(Header.IndexPointer.Address, SeekOrigin.Begin);
                TagIndex    = reader.ReadObject(new TagIndex(this));
                StringIndex = new StringIndex(this);

                TagIndex.ReadItems();
                StringIndex.ReadItems();
            }

            Task.Factory.StartNew(() =>
            {
                TagIndex.GetGlobalTag("play")?.ReadMetadata <Halo3.cache_file_resource_layout_table>();
                TagIndex.GetGlobalTag("zone")?.ReadMetadata <Halo3.cache_file_resource_gestalt>();
                TagIndex.GetGlobalTag("scnr")?.ReadMetadata <Halo3.scenario>();
            });
        }
        /// <summary>
        /// Creates a new instance. This class is also used to shareable a context across all instance that are created below one Cluster instance.
        /// One configuration instance per Cluster instance.
        /// </summary>
        internal Configuration(Policies policies,
                               ProtocolOptions protocolOptions,
                               PoolingOptions poolingOptions,
                               SocketOptions socketOptions,
                               ClientOptions clientOptions,
                               IAuthProvider authProvider,
                               IAuthInfoProvider authInfoProvider,
                               QueryOptions queryOptions,
                               IAddressTranslator addressTranslator,
                               IReadOnlyDictionary <string, IExecutionProfile> executionProfiles,
                               MetadataSyncOptions metadataSyncOptions,
                               IEndPointResolver endPointResolver,
                               IDriverMetricsProvider driverMetricsProvider,
                               DriverMetricsOptions metricsOptions,
                               string sessionName,
                               GraphOptions graphOptions,
                               Guid?clusterId,
                               string appVersion,
                               string appName,
                               MonitorReportingOptions monitorReportingOptions,
                               TypeSerializerDefinitions typeSerializerDefinitions,
                               bool?keepContactPointsUnresolved,
                               ISessionFactory sessionFactory                       = null,
                               IRequestOptionsMapper requestOptionsMapper           = null,
                               IStartupOptionsFactory startupOptionsFactory         = null,
                               IInsightsSupportVerifier insightsSupportVerifier     = null,
                               IRequestHandlerFactory requestHandlerFactory         = null,
                               IHostConnectionPoolFactory hostConnectionPoolFactory = null,
                               IRequestExecutionFactory requestExecutionFactory     = null,
                               IConnectionFactory connectionFactory                 = null,
                               IControlConnectionFactory controlConnectionFactory   = null,
                               IPrepareHandlerFactory prepareHandlerFactory         = null,
                               ITimerFactory timerFactory = null,
                               IObserverFactoryBuilder observerFactoryBuilder = null,
                               IInsightsClientFactory insightsClientFactory   = null,
                               IContactPointParser contactPointParser         = null,
                               IServerNameResolver serverNameResolver         = null,
                               IDnsResolver dnsResolver = null)
        {
            AddressTranslator = addressTranslator ?? throw new ArgumentNullException(nameof(addressTranslator));
            QueryOptions      = queryOptions ?? throw new ArgumentNullException(nameof(queryOptions));
            GraphOptions      = graphOptions ?? new GraphOptions();

            ClusterId                   = clusterId ?? Guid.NewGuid();
            ApplicationVersion          = appVersion ?? Configuration.DefaultApplicationVersion;
            ApplicationName             = appName ?? Configuration.FallbackApplicationName;
            ApplicationNameWasGenerated = appName == null;

            Policies                    = policies;
            ProtocolOptions             = protocolOptions;
            PoolingOptions              = poolingOptions;
            SocketOptions               = socketOptions;
            ClientOptions               = clientOptions;
            AuthProvider                = authProvider;
            AuthInfoProvider            = authInfoProvider;
            StartupOptionsFactory       = startupOptionsFactory ?? new StartupOptionsFactory(ClusterId, ApplicationVersion, ApplicationName);
            SessionFactory              = sessionFactory ?? new SessionFactory();
            RequestOptionsMapper        = requestOptionsMapper ?? new RequestOptionsMapper();
            MetadataSyncOptions         = metadataSyncOptions?.Clone() ?? new MetadataSyncOptions();
            DnsResolver                 = dnsResolver ?? new DnsResolver();
            MetricsOptions              = metricsOptions ?? new DriverMetricsOptions();
            MetricsProvider             = driverMetricsProvider ?? new NullDriverMetricsProvider();
            SessionName                 = sessionName;
            MetricsEnabled              = driverMetricsProvider != null;
            TypeSerializers             = typeSerializerDefinitions?.Definitions;
            KeepContactPointsUnresolved = keepContactPointsUnresolved ?? false;

            ObserverFactoryBuilder    = observerFactoryBuilder ?? (MetricsEnabled ? (IObserverFactoryBuilder) new MetricsObserverFactoryBuilder() : new NullObserverFactoryBuilder());
            RequestHandlerFactory     = requestHandlerFactory ?? new RequestHandlerFactory();
            HostConnectionPoolFactory = hostConnectionPoolFactory ?? new HostConnectionPoolFactory();
            RequestExecutionFactory   = requestExecutionFactory ?? new RequestExecutionFactory();
            ConnectionFactory         = connectionFactory ?? new ConnectionFactory();
            ControlConnectionFactory  = controlConnectionFactory ?? new ControlConnectionFactory();
            PrepareHandlerFactory     = prepareHandlerFactory ?? new PrepareHandlerFactory();
            TimerFactory = timerFactory ?? new TaskBasedTimerFactory();

            RequestOptions    = RequestOptionsMapper.BuildRequestOptionsDictionary(executionProfiles, policies, socketOptions, clientOptions, queryOptions, GraphOptions);
            ExecutionProfiles = BuildExecutionProfilesDictionary(executionProfiles, RequestOptions);

            MonitorReportingOptions = monitorReportingOptions ?? new MonitorReportingOptions();
            InsightsSupportVerifier = insightsSupportVerifier ?? Configuration.DefaultInsightsSupportVerifier;
            InsightsClientFactory   = insightsClientFactory ?? Configuration.DefaultInsightsClientFactory;
            ServerNameResolver      = serverNameResolver ?? new ServerNameResolver(ProtocolOptions);
            EndPointResolver        = endPointResolver ?? new EndPointResolver(ServerNameResolver);
            ContactPointParser      = contactPointParser ?? new ContactPointParser(DnsResolver, ProtocolOptions, ServerNameResolver, KeepContactPointsUnresolved);

            // Create the buffer pool with 16KB for small buffers and 256Kb for large buffers.
            // The pool does not eagerly reserve the buffers, so it doesn't take unnecessary memory
            // to create the instance.
            BufferPool = new RecyclableMemoryStreamManager(16 * 1024, 256 * 1024, ProtocolOptions.MaximumFrameLength);
            Timer      = new HashedWheelTimer();
        }
Beispiel #22
0
 /// <inheritdoc />
 public IPEndPoint GetOrParseHostIpEndPoint(Row row, IAddressTranslator translator, int port)
 {
     return(SocketIpEndPoint);
 }
Beispiel #23
0
 /// <summary>
 ///  Configures the address translater to use for the new cluster.
 /// </summary>
 /// <remarks>
 /// See <c>IAddressTranslater</c> for more detail on address translation,
 /// but the default tanslater, <c>DefaultAddressTranslator</c>, should be
 /// correct in most cases. If unsure, stick to the default.
 /// </remarks>
 /// <param name="addressTranslator">the translater to use.</param>
 /// <returns>this Builder</returns>
 public Builder WithAddressTranslator(IAddressTranslator addressTranslator)
 {
     _addressTranslator = addressTranslator;
     return(this);
 }
Beispiel #24
0
 public Pointer(DependencyReader reader, IAddressTranslator translator)
     : this(reader, translator, null)
 {
 }
Beispiel #25
0
        internal CacheFile(CacheArgs args)
        {
            if (!File.Exists(args.FileName))
            {
                throw Exceptions.FileNotFound(args.FileName);
            }

            FileName    = args.FileName;
            ByteOrder   = args.ByteOrder;
            BuildString = args.BuildString;
            CacheType   = args.CacheType;
            Metadata    = args.Metadata;

            if (args.CacheType == CacheType.Halo3Beta)
            {
                HeaderTranslator   = new BetaHeaderAddressTranslator(this);
                MetadataTranslator = new BetaTagAddressTranslator(this);
            }
            else
            {
                HeaderTranslator   = new SectionAddressTranslator(this, 0);
                MetadataTranslator = new TagAddressTranslator(this);
            }

            using (var reader = CreateReader(HeaderTranslator))
                Header = reader.ReadObject <CacheHeader>((int)CacheType);

            //change IndexPointer to use MetadataTranslator instead of HeaderTranslator
            Header.IndexPointer = new Pointer(Header.IndexPointer.Value, MetadataTranslator);

            using (var reader = CreateReader(MetadataTranslator))
            {
                reader.Seek(Header.IndexPointer.Address, SeekOrigin.Begin);
                TagIndex    = reader.ReadObject(new TagIndex(this));
                StringIndex = new StringIndex(this);

                TagIndex.ReadItems();
                StringIndex.ReadItems();

                switch (CacheType)
                {
                case CacheType.Halo3Beta:
                    LocaleIndex = new LocaleIndex(this, 488, 28, 11);
                    break;

                case CacheType.Halo3Retail:
                    LocaleIndex = new LocaleIndex(this, 452, 68, 12);
                    break;

                case CacheType.Halo3ODST:
                    LocaleIndex = new LocaleIndex(this, 508, 68, 12);
                    break;
                }
            }

            Task.Factory.StartNew(() =>
            {
                TagIndex.GetGlobalTag("play")?.ReadMetadata <cache_file_resource_layout_table>();
                TagIndex.GetGlobalTag("zone")?.ReadMetadata <cache_file_resource_gestalt>();
                TagIndex.GetGlobalTag("scnr")?.ReadMetadata <scenario>();
            });
        }
Beispiel #26
0
 public Pointer(int value, IAddressTranslator translator)
     : this(value, translator, null)
 {
 }
Beispiel #27
0
 /// <summary>
 ///  Configures the address translater to use for the new cluster.
 /// </summary>
 /// <remarks>
 /// See <c>IAddressTranslater</c> for more detail on address translation,
 /// but the default tanslater, <c>DefaultAddressTranslator</c>, should be
 /// correct in most cases. If unsure, stick to the default.
 /// </remarks>
 /// <param name="addressTranslator">the translater to use.</param>
 /// <returns>this Builder</returns>
 public new DseClusterBuilder WithAddressTranslator(IAddressTranslator addressTranslator)
 {
     _addressTranslator = addressTranslator;
     base.WithAddressTranslator(addressTranslator);
     return(this);
 }
        /// <summary>
        /// Uses system.peers values to build the Address translator
        /// </summary>
        internal static IPEndPoint GetAddressForPeerHost(Row row, IAddressTranslator translator, int port)
        {
            var address = row.GetValue<IPAddress>("rpc_address");
            if (address == null)
            {
                return null;
            }
            if (BindAllAddress.Equals(address) && !row.IsNull("peer"))
            {
                address = row.GetValue<IPAddress>("peer");
                _logger.Warning(String.Format("Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. If this is incorrect you should avoid the use of 0.0.0.0 server side.", address));
            }

            return translator.Translate(new IPEndPoint(address, port));
        }
 /// <summary>
 ///  Configures the address translater to use for the new cluster.
 /// </summary>
 /// <remarks>
 /// See <c>IAddressTranslater</c> for more detail on address translation,
 /// but the default tanslater, <c>DefaultAddressTranslator</c>, should be
 /// correct in most cases. If unsure, stick to the default.
 /// </remarks>
 /// <param name="addressTranslator">the translater to use.</param>
 /// <returns>this Builder</returns>
 public new DseClusterBuilder WithAddressTranslator(IAddressTranslator addressTranslator)
 {
     _addressTranslator = addressTranslator;
     base.WithAddressTranslator(addressTranslator);
     return this;
 }
Beispiel #30
0
        public static DependencyReader CreateReader(this ICacheFile cache, IAddressTranslator translator, bool leaveOpen)
        {
            var fs = new FileStream(cache.FileName, FileMode.Open, FileAccess.Read);

            return(CreateReader(cache, translator, fs, leaveOpen));
        }
Beispiel #31
0
 public static DependencyReader CreateReader(this ICacheFile cache, IAddressTranslator translator, Stream stream) => CreateReader(cache, translator, stream, false);
Beispiel #32
0
 public BlockCollection(DependencyReader reader, ICacheFile cache, IAddressTranslator translator)
     : this(reader, cache, translator, null)
 {
 }
Beispiel #33
0
 /// <summary>
 ///  Configures the address translater to use for the new cluster.
 /// </summary>
 /// <remarks>
 /// See <c>IAddressTranslater</c> for more detail on address translation,
 /// but the default tanslater, <c>DefaultAddressTranslator</c>, should be
 /// correct in most cases. If unsure, stick to the default.
 /// </remarks>
 /// <param name="addressTranslator">the translater to use.</param>
 /// <returns>this Builder</returns>
 public Builder WithAddressTranslator(IAddressTranslator addressTranslator)
 {
     _addressTranslator = addressTranslator;
     return this;
 }
Beispiel #34
0
 public DependencyReader CreateReader(IAddressTranslator translator) => CacheFactory.CreateReader(this, translator);