Example #1
0
 public bool Connect()
 {
     pooledSocketsLock.EnterWriteLock();
     try
     {
         if (connected)
         {
             return(true);
         }
         connected = true;
         IList <PooledSocket> tempPools = new List <PooledSocket>(poolSize);
         for (var i = 0; i < pooledSockets.Count; i++)
         {
             try
             {
                 if (pooledSockets[i] != null && pooledSockets[i].Connected)
                 {
                     tempPools.Add(pooledSockets[i]);
                 }
                 else
                 {
                     pooledSockets[i].Close();
                 }
             }
             catch
             {
             }
         }
         pooledSockets.Clear();
         pooledSockets = tempPools;
         for (int i = 0; i < poolSize; i++)
         {
             if (tempPools.Count >= poolSize)
             {
                 break;
             }
             PooledSocket pooledSocket = PooledSocket.CreateNewSocket(endpoint, this, formatter);
             if (pooledSocket != null)
             {
                 pooledSockets.Add(pooledSocket);
             }
             else
             {
                 connected = false;
                 break;
             }
         }
         return(connected);
     }
     finally
     {
         pooledSocketsLock.ExitWriteLock();
     }
 }
Example #2
0
 internal void AddNewPooledSocket(Socket socket)
 {
     pooledSocketsLock.EnterWriteLock();
     try
     {
         pooledSockets.Add(PooledSocket.CreateNewSocket(socket, this, formatter));
     }
     finally
     {
         pooledSocketsLock.ExitWriteLock();
     }
 }
Example #3
0
 internal SocketPool(ServiceContainer container, Socket socket)
 {
     formatter           = new BinaryFormatter();
     container.Pool      = this;
     connected           = true;
     poolSize            = 1;
     this.container      = container;
     endpoint            = socket.RemoteEndPoint;
     NetworkListener     = new NetworkListner();
     waitingCallback     = new Dictionary <long, WaitCallback>();
     waitingContext      = new Dictionary <long, object>();
     waitingCallbackLock = new ReaderWriterLockSlim();
     waitHandles         = new Dictionary <long, SynchResult>();
     waitHandlesLock     = new ReaderWriterLockSlim();
     pooledSocketsLock   = new ReaderWriterLockSlim();
     pooledSockets       = new List <PooledSocket>(poolSize)
     {
         PooledSocket.CreateNewSocket(socket, this, formatter)
     };
 }