public MemcacheNode(EndPoint endPoint, MemcacheClientConfiguration configuration, IOngoingDispose clientDispose) { if (configuration == null) { throw new ArgumentException("Client config should not be null"); } _configuration = configuration; _endPoint = endPoint; _clientDispose = clientDispose; _tokenSource = new CancellationTokenSource(); _transportPool = new BlockingCollection <IMemcacheTransport>(new ConcurrentStack <IMemcacheTransport>()); for (int i = 0; i < configuration.PoolSize; ++i) { var transport = (configuration.TransportFactory ?? MemcacheTransport.DefaultAllocator) (endPoint, configuration, RegisterEvents, TransportAvailable, false, clientDispose); TransportAvailable(transport); } }
/// <summary> /// Ctor, intialize things ... /// </summary> /// <param name="endpoint" /> /// <param name="clientConfig">The client configuration</param> /// <param name="registerEvents">Delegate to call to register the transport</param> /// <param name="tranportAvailable">Delegate to call when the transport is alive</param> /// <param name="planToConnect">If true, connect in a timer handler started immediately and call transportAvailable. /// Otherwise, the transport will connect synchronously at the first request</param> /// <param name="nodeDispose">Interface to check if the node is being disposed"</param> public MemcacheTransport(EndPoint endpoint, MemcacheClientConfiguration clientConfig, Action <IMemcacheTransport> registerEvents, Action <IMemcacheTransport> transportAvailable, bool planToConnect, IOngoingDispose nodeDispose) { if (clientConfig == null) { throw new ArgumentException("Client config should not be null"); } IsAlive = false; _endPoint = endpoint; _clientConfig = clientConfig; _registerEvents = registerEvents; _transportAvailable = transportAvailable; _nodeDispose = nodeDispose; _connectTimer = new Timer(TryConnect); _initialized = false; _registerEvents(this); _pendingRequests = new ConcurrentQueue <IMemcacheRequest>(); _sendAsynchEvtArgs = new SocketAsyncEventArgs(); _sendAsynchEvtArgs.Completed += OnSendRequestComplete; _receiveHeaderAsynchEvtArgs = new SocketAsyncEventArgs(); _receiveHeaderAsynchEvtArgs.SetBuffer(new byte[MemcacheResponseHeader.SIZE], 0, MemcacheResponseHeader.SIZE); _receiveHeaderAsynchEvtArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnReceiveHeaderComplete); _receiveBodyAsynchEvtArgs = new SocketAsyncEventArgs(); _receiveBodyAsynchEvtArgs.Completed += OnReceiveBodyComplete; if (planToConnect) { _connectTimer.Change(0, Timeout.Infinite); } }
public MemcacheTransportForTest(EndPoint endpoint, MemcacheClientConfiguration clientConfig, Action <IMemcacheTransport> registerEvents, Action <IMemcacheTransport> transportAvailable, bool planToConnect, IOngoingDispose nodeDispose, Action onCreate, Action onDispose) : base(endpoint, clientConfig, registerEvents, transportAvailable, planToConnect, nodeDispose) { if (onCreate != null) { onCreate(); } OnDispose = onDispose; }