Пример #1
0
        /// <summary>
        /// Отправка команды на отключение клиента от сервера
        /// </summary>
        /// <param name="Command">Объект сообщения,если параметр ToClient не определен, сообщение отправляется всем подключенным клиентам </param>
        private void ActionDisconnect(ToClientCommand Command)
        {
            if (!fDisconnecting)
            {
                ClientRequestCommand -= new OnClientCommand(HandlingServerCommands);
                Disconnect();

                /*try
                 * {
                 *      Sock.Shutdown(SocketShutdown.Both);
                 * }
                 * catch { }*/

                // Завершаем асинхронную операцию чтения
                if (SockAsyncEventArgs_Receive != null)
                {
                    SockAsyncEventArgs_Receive.Completed -= SockAsyncEventArgs_Completed;
                    SockAsyncEventArgs_Receive.Dispose();
                }
                // Завершаем асинхронную операцию передачи
                if (SockAsyncEventArgs_Send != null)
                {
                    SockAsyncEventArgs_Send.Completed -= SockAsyncEventArgs_Completed;
                    SockAsyncEventArgs_Send.Dispose();
                }

                // Начинаем операцию асинхронного отключения клиента
                if (SockAsyncEventArgs_Disconnect != null)
                {
                    SockAsyncEventArgs_Disconnect.Completed -= SockAsyncEventArgs_Completed;
                    SockAsyncEventArgs_Disconnect.Dispose();
                }

                // Обнуляем переменные
                SockAsyncEventArgs_Receive    = null;
                SockAsyncEventArgs_Send       = null;
                SockAsyncEventArgs_Disconnect = null;

                //Sock.Close();
                //Sock.Dispose();
            }
        }
Пример #2
0
        public OnClientConnection(Socket AcceptedSocket, bool UseProxy, byte[] ProxyConnectBuffer, int ReceiveBufferSize, object UserToken)
        {
            this.UserToken       = UserToken;
            UsingProxy           = UseProxy;
            OnProxyConnectBuffer = ProxyConnectBuffer;
            m_ReceiveBufferSize  = ReceiveBufferSize;

            m_ServerInfo = AcceptedSocket.RemoteEndPoint;

            // Создание прерывания на обработку входящих команд от сервера
            ClientRequestCommand += new OnClientCommand(HandlingServerCommands);

            Sock = AcceptedSocket;

            // После подключения встаем на прослушку сообщений клиента
            SockAsyncEventArgs_Receive            = new SocketAsyncEventArgs();
            SockAsyncEventArgs_Receive.Completed += SockAsyncEventArgs_Completed;
            SockAsyncEventArgs_Receive.SetBuffer(new byte[m_ReceiveBufferSize], 0, m_ReceiveBufferSize);
            ReceiveAsync(SockAsyncEventArgs_Receive);
        }