Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

} while (bytesRead > 0);

//Сбросить выходной поток

streamOutToIrDA.Flush; //Закончить запись любых данных

streamOutToIrDA.Close; //Закрыть поток

streamOutToIrDA = null;

//Освободить локальный файл

streamInFromFile.Close;

streamOutToIrDA = null;

//Освободить порт IrDA

irDASender.Close;

irDASender = null;

//Успешное завершение!!!

return true;

}

} //конец класса

Листинг 15.5. Класс IrDAFileReceive

//-------------------------------------------------------------------

//Обеспечивает прием файла через IrDA (инфракрасный порт).

//

//Этот класс НЕ является реентерабельным и не должен вызываться более

//чем одной функцией за один раз. Если необходимо иметь несколько

//сеансов связи через IR, это необходимо делать путем создания

//нескольких различных экземпляров данного класса.

//-------------------------------------------------------------------

public class IrDAFileReceive {

private bool m_wasListenerStopped;

private string m_IrDAServiceName;

private string m_fileNameForDownload;

private string m_errorDuringTransfer;

private System.Net.Sockets.IrDAListener m_irListener;

private ReceiveStatus m_ReceiveStatus;

public string ErrorText {

get {

return m_errorDuringTransfer;

}

}

//--------------------------

//Различные состояния приема

//--------------------------

public enum ReceiveStatus {

NotDone_SettingUp,

NotDone_WaitingForSender,

NotDone_Receiving,

Done_Success,

Done_Aborted,

Done_ErrorOccured

}

//------------------------------

// Возвращает состояние передачи

//------------------------------

public ReceiveStatus Status {

get {

//Обеспечить многопоточную безопасность для предотвращения

//параллельного выполнения операций чтения/записи

lock(this) {

return m_ReceiveStatus;

} //конец lock

} //конец get

} //конец свойства

private void setStatus(ReceiveStatus newStatus) {

//Обеспечить многопоточную безопасность для предотвращения

//параллельного выполнения операций чтения/записи

lock(this) {

m_ReceiveStatus = newStatus;

} //конец lock

}

//--------------------------------------------------

// [in] filename: желаемое имя для входного файла IR

//--------------------------------------------------

public IrDAFileReceive(string filename, string irdaServiceName) {

//Имя сокета IrDA, который мы хотим открыть

m_IrDAServiceName = irdaServiceName;

//Имя файла, в котором мы хотим сохранить полученные данные

m_fileNameForDownload = filename;

}

//----------------------------------------------------------

//Обеспечивает асинхронный прием файла через IR

//

// [in] filename: имя файла, в который осуществляется запись

//----------------------------------------------------------

public void WaitForIRFileDownloadAsync {

//Заметьте, что сейчас мы находимся в режиме подготовки

setStatus(ReceiveStatus.NotDone_SettingUp);

//-------------------

//Создать новый поток

//-------------------

System.Threading.ThreadStart threadEntryPoint;

threadEntryPoint =

new System.Threading.ThreadStart(WaitForIRFileDownload);

System.Threading.Thread newThread = new System.Threading.Thread(threadEntryPoint);

//Запустить поток на выполнение

newThread.Start;

}

//------------------------------------------

//Открывает порт IR и ожидает загрузки файла

//------------------------------------------

public void WaitForIRFileDownload {

System.IO.Stream outputStream = null;

System.Net.Sockets.IrDAClient irdaClient = null;

Поделиться с друзьями: