예제 #1
0
파일: AsyncArgs.cs 프로젝트: iMinad/Net
 public static void Return(AsyncSendArgs args)
 {
     if (args != null)
     {
         AsyncSendArgsPool.Add(args);
     }
 }
예제 #2
0
파일: Client.cs 프로젝트: iMinad/Net
        public void Close()
        {
            lock (m){ if (stateClosed)
                      {
                          return;
                      }
                      stateClosed = true; }

            try
            {
                Sock.Close();
            } finally
            {
                lock (m)
                {
                    ByteBuffer buf;
                    while ((buf = Buffers.TryDequeue()) != null)
                    {
                        buf.DeRef();
                    }

                    AsyncReadArgs.Return(ReadArgs);
                    AsyncSendArgs.Return(SendArgs);
                }

                OnClose();
            }
        }
예제 #3
0
파일: AsyncArgs.cs 프로젝트: iMinad/Net
        public static AsyncSendArgs Get(Client c)
        {
            AsyncSendArgs args = null;

            AsyncSendArgsPool.TryTake(out args);
            if (args == null)
            {
                args = new AsyncSendArgs();
            }
            args.client = c;

            return(args);
        }
예제 #4
0
파일: Client.cs 프로젝트: iMinad/Net
        public Client(Socket s, bool needsConnect = true)
        {
            Sock = s;

            ReadArgs = AsyncReadArgs.Get(this);
            SendArgs = AsyncSendArgs.Get(this);
            if (needsConnect)
            {
                ConnectArgs = new AsyncConnectArgs(connect_complete);
            }
            else
            {
                stateConnected = true;
            }
        }