/// <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(); } }
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); }