Шрифт:
m_wasListenerStopped = true;
try {
m_irListener.Stop;
} catch {} //Поглотить любые возникающие ошибки
m_irListener = null;
}
}
private void internal_WaitForIRFileDownload(
ref System.IO.Stream outputStream,
ref System.Net.Sockets.IrDAClient irdaClient,
ref System.IO.Stream irStreamIn) {
//---------------------------------------------------------
//Открыть входной файл для направления в него потока данных
//---------------------------------------------------------
outputStream = System.IO.File.Open(m_fileNameForDownload, System.IO.FileMode.Create);
//==========================================
//ОБНОВЛЕНИЕ СОСТОЯНИЯ
//==========================================
setStatus(ReceiveStatus.NotDone_WaitingForSender);
//---------------------------------
//Открыть прослушивающее устройство
//---------------------------------
try {
m_wasListenerStopped = false;
m_irListener = new System.Net.Sockets.IrDAListener(m_IrDAServiceName);
m_irListener.Start;
} catch (System.Exception eListener) {
m_errorDuringTransfer = "Error creating listener - " + eListener.Message;
goto exit_sub_with_error;
}
//Проверить, не поступила ли команда отменить выполнение
if (m_wasListenerStopped == true) {
goto exit_sub_with abort;
}
//------------------
//Принять соединение
//------------------
try {
//--------------------------------------------------------------------
//Выполнение будет приостановлено здесь до тех пор, пока устройство не
//начнет передавать информацию, или не будет остановлен объект
//прослушивания, выполняющийся в другом потоке)
//--------------------------------------------------------------------
irdaClient = m_irListener.AcceptIrDAClient;
} catch (System.Exception eClientAccept) {
//Если прослушивание остановлено другим потоком, инициировавшим отмену
//выполнения, будет сгенерировано исключение и управление будет
//передано сюда.
if (m_wasListenerStopped == true) {
goto exit_sub_with_abort;
}
//Если прослушивание не было прекращено,
//то произошло иное исключение. Обработать его.
m_errorDuringTransfer = "Error accepting connection - " + eClientAccept.Message;
goto exit sub_with error;
}
//B этом месте возможны два состояния:
//#1: Мы получили соединение от передающего устройства IR
//#2: IR-запрос был отменен (кто-то вызвал функцию STOP)
// (в этом случае приведенный ниже код сгенерирует исключение)
//Проверить, не было ли отменено выполнение
if (m_wasListenerStopped == true) {
goto exit_sub_with_abort;
}
//==========================================
//ОБНОВЛЕНИЕ СОСТОЯНИЯ
//==========================================
setStatus(ReceiveStatus.NotDone_Receiving);
//-------------------------
//Открыть принимающий поток